diag: Proper update of logging mode
The patch properly updates the logging mode after an user PD on-device logging session is killed preventing a mutex deadlock and thereby safe ODL session clearing. CRs-Fixed: 2154183 Change-Id: I8451ed3869f5b75860684d5ef4119befd0cb2723 Signed-off-by: Manoj Prabhu B <bmanoj@codeaurora.org>
This commit is contained in:
parent
99b73ed59a
commit
a2ad16a353
3 changed files with 11 additions and 5 deletions
|
@ -1,4 +1,4 @@
|
|||
/* Copyright (c) 2014-2017, The Linux Foundation. All rights reserved.
|
||||
/* Copyright (c) 2014-2018, 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
|
||||
|
@ -239,6 +239,8 @@ int diag_mux_switch_logging(int *req_mode, int *peripheral_mask)
|
|||
new_mask = ~(*peripheral_mask) & diag_mux->mux_mask;
|
||||
if (new_mask != DIAG_CON_NONE)
|
||||
*req_mode = DIAG_MULTI_MODE;
|
||||
if (new_mask == DIAG_CON_ALL)
|
||||
*req_mode = DIAG_MEMORY_DEVICE_MODE;
|
||||
break;
|
||||
case DIAG_MEMORY_DEVICE_MODE:
|
||||
new_mask = (*peripheral_mask) | diag_mux->mux_mask;
|
||||
|
|
|
@ -1710,19 +1710,20 @@ static int diag_switch_logging(struct diag_logging_mode_param_t *param)
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
i = upd - UPD_WLAN;
|
||||
|
||||
if (driver->md_session_map[peripheral] &&
|
||||
(MD_PERIPHERAL_MASK(peripheral) &
|
||||
diag_mux->mux_mask)) {
|
||||
diag_mux->mux_mask) &&
|
||||
!driver->pd_session_clear[i]) {
|
||||
DIAG_LOG(DIAG_DEBUG_USERSPACE,
|
||||
"diag_fr: User PD is already logging onto active peripheral logging\n");
|
||||
i = upd - UPD_WLAN;
|
||||
driver->pd_session_clear[i] = 0;
|
||||
return -EINVAL;
|
||||
}
|
||||
peripheral_mask =
|
||||
diag_translate_mask(param->pd_mask);
|
||||
param->peripheral_mask = peripheral_mask;
|
||||
i = upd - UPD_WLAN;
|
||||
if (!driver->pd_session_clear[i]) {
|
||||
driver->pd_logging_mode[i] = 1;
|
||||
driver->num_pd_session += 1;
|
||||
|
|
|
@ -1003,8 +1003,11 @@ int diag_process_apps_pkt(unsigned char *buf, int len, int pid)
|
|||
} else {
|
||||
mutex_unlock(&driver->md_session_lock);
|
||||
if (MD_PERIPHERAL_MASK(reg_item->proc) &
|
||||
driver->logging_mask)
|
||||
driver->logging_mask) {
|
||||
mutex_unlock(&driver->cmd_reg_mutex);
|
||||
diag_send_error_rsp(buf, len, pid);
|
||||
return write_len;
|
||||
}
|
||||
else
|
||||
write_len = diag_send_data(reg_item, buf, len);
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue