summaryrefslogtreecommitdiff
path: root/drivers/char
diff options
context:
space:
mode:
authorSreelakshmi Gownipalli <sgownipa@codeaurora.org>2016-10-19 17:08:23 -0700
committerSreelakshmi Gownipalli <sgownipa@codeaurora.org>2016-11-14 10:47:51 -0800
commit2d6dc48e83fd57c825d9f7d9d95bf9610d9e7a19 (patch)
treeb8fe40a26f801ee43e4bdbcca78f9a07bee3433c /drivers/char
parent85d7e134cc5d95dfd3a1a5ee5a1d1435633288cd (diff)
diag: Call diagmem_exit only if the mempool is initialized
Call diagmem_exit in diag_mhi_exit only if the memory pool is initialized earlier. If diag bridge initialization fails allow diag apps to still communicate to other processors without unloading the diag driver. Change-Id: I0eb8b9a357f172984612175d1b03dd872df91b6f Signed-off-by: Sreelakshmi Gownipalli <sgownipa@codeaurora.org>
Diffstat (limited to 'drivers/char')
-rw-r--r--drivers/char/diag/diagchar_core.c7
-rw-r--r--drivers/char/diag/diagfwd_mhi.c6
-rw-r--r--drivers/char/diag/diagfwd_mhi.h3
3 files changed, 11 insertions, 5 deletions
diff --git a/drivers/char/diag/diagchar_core.c b/drivers/char/diag/diagchar_core.c
index a5781f6db269..9d0955289796 100644
--- a/drivers/char/diag/diagchar_core.c
+++ b/drivers/char/diag/diagchar_core.c
@@ -3434,9 +3434,6 @@ static int __init diagchar_init(void)
ret = diagfwd_init();
if (ret)
goto fail;
- ret = diagfwd_bridge_init();
- if (ret)
- goto fail;
ret = diagfwd_cntl_init();
if (ret)
goto fail;
@@ -3467,6 +3464,9 @@ static int __init diagchar_init(void)
goto fail;
pr_debug("diagchar initialized now");
+ ret = diagfwd_bridge_init();
+ if (ret)
+ diagfwd_bridge_exit();
return 0;
fail:
@@ -3482,6 +3482,7 @@ fail:
diag_masks_exit();
diag_remote_exit();
return -1;
+
}
static void diagchar_exit(void)
diff --git a/drivers/char/diag/diagfwd_mhi.c b/drivers/char/diag/diagfwd_mhi.c
index f7b1e98f22b0..df26e2522baf 100644
--- a/drivers/char/diag/diagfwd_mhi.c
+++ b/drivers/char/diag/diagfwd_mhi.c
@@ -49,6 +49,7 @@ struct diag_mhi_info diag_mhi[NUM_MHI_DEV] = {
.enabled = 0,
.num_read = 0,
.mempool = POOL_TYPE_MDM,
+ .mempool_init = 0,
.mhi_wq = NULL,
.read_ch = {
.chan = MHI_CLIENT_DIAG_IN,
@@ -68,6 +69,7 @@ struct diag_mhi_info diag_mhi[NUM_MHI_DEV] = {
.enabled = 0,
.num_read = 0,
.mempool = POOL_TYPE_MDM_DCI,
+ .mempool_init = 0,
.mhi_wq = NULL,
.read_ch = {
.chan = MHI_CLIENT_DCI_IN,
@@ -684,6 +686,7 @@ int diag_mhi_init()
strlcpy(wq_name, "diag_mhi_", DIAG_MHI_STRING_SZ);
strlcat(wq_name, mhi_info->name, sizeof(mhi_info->name));
diagmem_init(driver, mhi_info->mempool);
+ mhi_info->mempool_init = 1;
mhi_info->mhi_wq = create_singlethread_workqueue(wq_name);
if (!mhi_info->mhi_wq)
goto fail;
@@ -725,7 +728,8 @@ void diag_mhi_exit()
if (mhi_info->mhi_wq)
destroy_workqueue(mhi_info->mhi_wq);
mhi_close(mhi_info->id);
- diagmem_exit(driver, mhi_info->mempool);
+ if (mhi_info->mempool_init)
+ diagmem_exit(driver, mhi_info->mempool);
}
}
diff --git a/drivers/char/diag/diagfwd_mhi.h b/drivers/char/diag/diagfwd_mhi.h
index 8332efdf5efb..a4466977ca97 100644
--- a/drivers/char/diag/diagfwd_mhi.h
+++ b/drivers/char/diag/diagfwd_mhi.h
@@ -1,4 +1,4 @@
-/* Copyright (c) 2014-2015, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2014-2016, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -65,6 +65,7 @@ struct diag_mhi_info {
int id;
int dev_id;
int mempool;
+ int mempool_init;
int num_read;
uint8_t enabled;
char name[DIAG_MHI_NAME_SZ];