diag: Modify md_info and diag client map synchronization
Extend the scope of protection to md_info till queueing the write to sdcard. Patch adds protection to diag client map synchronizing access by various clients. CRs-Fixed: 2282558 Change-Id: If076af2d09180a282a9077b4ebcda0184e9f67b5 Signed-off-by: Manoj Prabhu B <bmanoj@codeaurora.org>
This commit is contained in:
parent
eea1a62727
commit
d0be0bc135
2 changed files with 14 additions and 8 deletions
|
@ -206,6 +206,7 @@ int diag_md_write(int id, unsigned char *buf, int len, int ctx)
|
|||
}
|
||||
|
||||
found = 0;
|
||||
mutex_lock(&driver->diagchar_mutex);
|
||||
for (i = 0; i < driver->num_clients && !found; i++) {
|
||||
if ((driver->client_map[i].pid != pid) ||
|
||||
(driver->client_map[i].pid == 0))
|
||||
|
@ -219,6 +220,7 @@ int diag_md_write(int id, unsigned char *buf, int len, int ctx)
|
|||
pr_debug("diag: wake up logging process\n");
|
||||
wake_up_interruptible(&driver->wait_q);
|
||||
}
|
||||
mutex_unlock(&driver->diagchar_mutex);
|
||||
|
||||
if (!found)
|
||||
return -EINVAL;
|
||||
|
|
|
@ -357,6 +357,8 @@ static void diagfwd_data_process_done(struct diagfwd_info *fwd_info,
|
|||
goto end;
|
||||
}
|
||||
}
|
||||
mutex_unlock(&fwd_info->data_mutex);
|
||||
mutex_unlock(&driver->hdlc_disable_mutex);
|
||||
|
||||
if (write_len > 0) {
|
||||
err = diag_mux_write(DIAG_LOCAL_PROC, write_buf, write_len,
|
||||
|
@ -364,18 +366,18 @@ static void diagfwd_data_process_done(struct diagfwd_info *fwd_info,
|
|||
if (err) {
|
||||
pr_err_ratelimited("diag: In %s, unable to write to mux error: %d\n",
|
||||
__func__, err);
|
||||
goto end;
|
||||
goto end_write;
|
||||
}
|
||||
}
|
||||
mutex_unlock(&fwd_info->data_mutex);
|
||||
mutex_unlock(&driver->hdlc_disable_mutex);
|
||||
|
||||
diagfwd_queue_read(fwd_info);
|
||||
return;
|
||||
|
||||
end:
|
||||
diag_ws_release();
|
||||
mutex_unlock(&fwd_info->data_mutex);
|
||||
mutex_unlock(&driver->hdlc_disable_mutex);
|
||||
end_write:
|
||||
diag_ws_release();
|
||||
if (buf) {
|
||||
DIAG_LOG(DIAG_DEBUG_PERIPHERALS,
|
||||
"Marking buffer as free p: %d, t: %d, buf_num: %d\n",
|
||||
|
@ -694,24 +696,26 @@ static void diagfwd_data_read_done(struct diagfwd_info *fwd_info,
|
|||
}
|
||||
}
|
||||
|
||||
mutex_unlock(&fwd_info->data_mutex);
|
||||
mutex_unlock(&driver->hdlc_disable_mutex);
|
||||
|
||||
if (write_len > 0) {
|
||||
err = diag_mux_write(DIAG_LOCAL_PROC, write_buf, write_len,
|
||||
temp_buf->ctxt);
|
||||
if (err) {
|
||||
pr_err_ratelimited("diag: In %s, unable to write to mux error: %d\n",
|
||||
__func__, err);
|
||||
goto end;
|
||||
goto end_write;
|
||||
}
|
||||
}
|
||||
mutex_unlock(&fwd_info->data_mutex);
|
||||
mutex_unlock(&driver->hdlc_disable_mutex);
|
||||
diagfwd_queue_read(fwd_info);
|
||||
return;
|
||||
|
||||
end:
|
||||
diag_ws_release();
|
||||
mutex_unlock(&fwd_info->data_mutex);
|
||||
mutex_unlock(&driver->hdlc_disable_mutex);
|
||||
end_write:
|
||||
diag_ws_release();
|
||||
if (temp_buf) {
|
||||
DIAG_LOG(DIAG_DEBUG_PERIPHERALS,
|
||||
"Marking buffer as free p: %d, t: %d, buf_num: %d\n",
|
||||
|
|
Loading…
Add table
Reference in a new issue