Merge "diag: dci: Process DCI packet during USB disconnect"
diff --git a/drivers/char/diag/diag_dci.c b/drivers/char/diag/diag_dci.c
index 1c9f968..6ae5d03 100644
--- a/drivers/char/diag/diag_dci.c
+++ b/drivers/char/diag/diag_dci.c
@@ -359,7 +359,6 @@
if (stat)
pr_err("diag: Err sending dci signal to client, signal data: 0x%x, stat: %d\n",
info.si_int, stat);
- break;
}
} /* end of loop for all DCI clients */
}
@@ -933,6 +932,7 @@
mutex_lock(&driver->diag_cntl_mutex);
for (i = 0; i < 16; i++) {
+ retry_count = 0;
driver->log_mask->cmd_type = DIAG_CTRL_MSG_LOG_MASK;
driver->log_mask->num_items = 512;
driver->log_mask->data_len = 11 + 512;
@@ -954,8 +954,9 @@
break;
}
if (wr_size != header_size + 512) {
- pr_err("diag: dci log mask update failed %d, tried %d",
- wr_size, header_size + 512);
+ pr_err("diag: dci log mask update failed %d, tried %d for equip_id %d\n",
+ wr_size, header_size + 512,
+ driver->log_mask->equip_id);
ret = DIAG_DCI_SEND_DATA_FAIL;
} else {
diff --git a/drivers/char/diag/diagchar_core.c b/drivers/char/diag/diagchar_core.c
index 2809900..3e3d8fd 100644
--- a/drivers/char/diag/diagchar_core.c
+++ b/drivers/char/diag/diagchar_core.c
@@ -1179,13 +1179,7 @@
struct diag_hdlc_dest_type enc = { NULL, NULL, 0 };
void *buf_copy = NULL;
unsigned int payload_size;
-#ifdef CONFIG_DIAG_OVER_USB
- if (((driver->logging_mode == USB_MODE) && (!driver->usb_connected)) ||
- (driver->logging_mode == NO_LOGGING_MODE)) {
- /*Drop the diag payload */
- return -EIO;
- }
-#endif /* DIAG over USB */
+
index = 0;
/* Get the packet type F3/log/event/Pkt response */
err = copy_from_user((&pkt_type), buf, 4);
@@ -1201,6 +1195,14 @@
driver->dropped_count++;
return -EBADMSG;
}
+#ifdef CONFIG_DIAG_OVER_USB
+ if (((pkt_type != DCI_DATA_TYPE) && (driver->logging_mode == USB_MODE)
+ && (!driver->usb_connected)) ||
+ (driver->logging_mode == NO_LOGGING_MODE)) {
+ /*Drop the diag payload */
+ return -EIO;
+ }
+#endif /* DIAG over USB */
if (pkt_type == DCI_DATA_TYPE) {
err = copy_from_user(driver->user_space_data, buf + 4,
payload_size);