From 61d5461783e629490753e0ef3f4726bf6d771973 Mon Sep 17 00:00:00 2001 From: Mohit Aggarwal Date: Thu, 29 Nov 2018 14:44:32 +0530 Subject: [PATCH] diag: Do not clear masks during logging mode switch Currently, masks will be cleared during logging mode switch if physical USB disconnection will happen in concurrency. There is no need to clear the masks in logging switch case. The patch ensures that masks will be cleared only in valid cases. Change-Id: I68f5335c4fa8fe06ba1f686f29336a8150991368 Signed-off-by: Mohit Aggarwal --- drivers/char/diag/diag_usb.c | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/drivers/char/diag/diag_usb.c b/drivers/char/diag/diag_usb.c index 87d021f6a956..d80f0b1cfde1 100644 --- a/drivers/char/diag/diag_usb.c +++ b/drivers/char/diag/diag_usb.c @@ -216,13 +216,6 @@ static void usb_connect_work_fn(struct work_struct *work) */ static void usb_disconnect(struct diag_usb_info *ch) { - if (!ch) - return; - - if (!atomic_read(&ch->connected) && - driver->usb_connected && diag_mask_param()) - diag_clear_masks(0); - if (ch && ch->ops && ch->ops->close) ch->ops->close(ch->ctxt, DIAG_USB_MODE); } @@ -231,6 +224,14 @@ static void usb_disconnect_work_fn(struct work_struct *work) { struct diag_usb_info *ch = container_of(work, struct diag_usb_info, disconnect_work); + + if (!ch) + return; + + if (!atomic_read(&ch->connected) && + driver->usb_connected && diag_mask_param()) + diag_clear_masks(0); + usb_disconnect(ch); }