Loading drivers/char/diag/diagchar_core.c +21 −0 Original line number Diff line number Diff line Loading @@ -1390,6 +1390,27 @@ static ssize_t diagchar_read(struct file *file, char __user *buf, size_t count, /* place holder for number of data field */ ret += 4; spin_lock_irqsave(&driver->rsp_buf_busy_lock, flags); if (driver->rsp_write_ptr->length > 0) { if (copy_to_user(buf+ret, (void *)&(driver->rsp_write_ptr->length), sizeof(int))) goto drop_rsp; ret += sizeof(int); if (copy_to_user(buf+ret, (void *)(driver->rsp_write_ptr->buf), driver->rsp_write_ptr->length)) { ret -= sizeof(int); goto drop_rsp; } num_data++; ret += driver->rsp_write_ptr->length; drop_rsp: driver->rsp_write_ptr->length = 0; driver->rsp_buf_busy = 0; } spin_unlock_irqrestore(&driver->rsp_buf_busy_lock, flags); for (i = 0; i < driver->buf_tbl_size; i++) { if (driver->buf_tbl[i].length > 0) { #ifdef DIAG_DEBUG Loading drivers/char/diag/diagfwd.c +3 −1 Original line number Diff line number Diff line Loading @@ -876,7 +876,8 @@ void encode_rsp_and_send(int buf_length) diag_hdlc_encode(&send, &enc); driver->rsp_write_ptr->buf = rsp_ptr; driver->rsp_write_ptr->length = (int)(enc.dest - (void *)rsp_ptr); err = diag_write_to_usb(driver->legacy_ch, driver->rsp_write_ptr); /* Set data type as Modem Data as the flow is guaranteed */ err = diag_device_write(rsp_ptr, MODEM_DATA, driver->rsp_write_ptr); if (err) { pr_err("diag: In %s, Unable to write to device, err: %d\n", __func__, err); Loading Loading @@ -2045,6 +2046,7 @@ int diagfwd_write_complete(struct diag_request *diag_write_ptr) found_it = 1; spin_lock_irqsave(&driver->rsp_buf_busy_lock, flags); driver->rsp_buf_busy = 0; driver->rsp_write_ptr->length = 0; spin_unlock_irqrestore(&driver->rsp_buf_busy_lock, flags); } Loading Loading
drivers/char/diag/diagchar_core.c +21 −0 Original line number Diff line number Diff line Loading @@ -1390,6 +1390,27 @@ static ssize_t diagchar_read(struct file *file, char __user *buf, size_t count, /* place holder for number of data field */ ret += 4; spin_lock_irqsave(&driver->rsp_buf_busy_lock, flags); if (driver->rsp_write_ptr->length > 0) { if (copy_to_user(buf+ret, (void *)&(driver->rsp_write_ptr->length), sizeof(int))) goto drop_rsp; ret += sizeof(int); if (copy_to_user(buf+ret, (void *)(driver->rsp_write_ptr->buf), driver->rsp_write_ptr->length)) { ret -= sizeof(int); goto drop_rsp; } num_data++; ret += driver->rsp_write_ptr->length; drop_rsp: driver->rsp_write_ptr->length = 0; driver->rsp_buf_busy = 0; } spin_unlock_irqrestore(&driver->rsp_buf_busy_lock, flags); for (i = 0; i < driver->buf_tbl_size; i++) { if (driver->buf_tbl[i].length > 0) { #ifdef DIAG_DEBUG Loading
drivers/char/diag/diagfwd.c +3 −1 Original line number Diff line number Diff line Loading @@ -876,7 +876,8 @@ void encode_rsp_and_send(int buf_length) diag_hdlc_encode(&send, &enc); driver->rsp_write_ptr->buf = rsp_ptr; driver->rsp_write_ptr->length = (int)(enc.dest - (void *)rsp_ptr); err = diag_write_to_usb(driver->legacy_ch, driver->rsp_write_ptr); /* Set data type as Modem Data as the flow is guaranteed */ err = diag_device_write(rsp_ptr, MODEM_DATA, driver->rsp_write_ptr); if (err) { pr_err("diag: In %s, Unable to write to device, err: %d\n", __func__, err); Loading Loading @@ -2045,6 +2046,7 @@ int diagfwd_write_complete(struct diag_request *diag_write_ptr) found_it = 1; spin_lock_irqsave(&driver->rsp_buf_busy_lock, flags); driver->rsp_buf_busy = 0; driver->rsp_write_ptr->length = 0; spin_unlock_irqrestore(&driver->rsp_buf_busy_lock, flags); } Loading