Merge "diag: Update masks to peripherals in workqueue context"
diff --git a/drivers/char/diag/diag_masks.c b/drivers/char/diag/diag_masks.c
index 8e5d836..f510c14 100644
--- a/drivers/char/diag/diag_masks.c
+++ b/drivers/char/diag/diag_masks.c
@@ -2133,6 +2133,14 @@
driver->real_time_mode[DIAG_LOCAL_PROC]);
diag_send_peripheral_buffering_mode(
&driver->buffering_mode[peripheral]);
+
+ /*
+ * Clear mask_update variable afer updating
+ * logging masks to peripheral.
+ */
+ mutex_lock(&driver->cntl_lock);
+ driver->mask_update ^= PERIPHERAL_MASK(peripheral);
+ mutex_unlock(&driver->cntl_lock);
}
}
diff --git a/drivers/char/diag/diagfwd_cntl.c b/drivers/char/diag/diagfwd_cntl.c
index eaca17a..162d53f 100644
--- a/drivers/char/diag/diagfwd_cntl.c
+++ b/drivers/char/diag/diagfwd_cntl.c
@@ -39,9 +39,6 @@
for (peripheral = 0; peripheral <= NUM_PERIPHERALS; peripheral++) {
if (!(driver->mask_update & PERIPHERAL_MASK(peripheral)))
continue;
- mutex_lock(&driver->cntl_lock);
- driver->mask_update ^= PERIPHERAL_MASK(peripheral);
- mutex_unlock(&driver->cntl_lock);
diag_send_updates_peripheral(peripheral);
}
}
@@ -834,7 +831,7 @@
*/
if (root_str) {
driver->diag_id_sent[peripheral] = 1;
- diag_send_updates_peripheral(peripheral);
+ queue_work(driver->cntl_wq, &driver->mask_update_work);
}
fwd_info = &peripheral_info[TYPE_DATA][peripheral];
diagfwd_buffers_init(fwd_info);