Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit e5708ab2 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "diag: Fix for sending responses in all modes"

parents 6c908ea9 04b773be
Loading
Loading
Loading
Loading
+21 −0
Original line number Diff line number Diff line
@@ -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
+3 −1
Original line number Diff line number Diff line
@@ -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);
@@ -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);
	}