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

Commit 255ac1dd authored by Katish Paran's avatar Katish Paran Committed by Gerrit - the friendly Code Review server
Browse files

diag: Rectify wait condition while reading over peripherals



While reading data over smd leads to infinite looping due to
incorrect wait condition. Also, there is no need to queue a
read until DATA event notification is received from smd.

Change-Id: Ibbd4d44f32adce362e9d44fc392c40543965403b
Signed-off-by: default avatarKatish Paran <kparan@codeaurora.org>
parent 186138d8
Loading
Loading
Loading
Loading
+1 −5
Original line number Diff line number Diff line
@@ -354,8 +354,6 @@ static void diagfwd_cntl_read_done(struct diagfwd_info *fwd_info,
		atomic_set(&fwd_info->buf_1->in_busy, 0);

	diagfwd_queue_read(fwd_info);
	diagfwd_queue_read(&peripheral_info[TYPE_DATA][fwd_info->peripheral]);
	diagfwd_queue_read(&peripheral_info[TYPE_CMD][fwd_info->peripheral]);
}

static void diagfwd_dci_read_done(struct diagfwd_info *fwd_info,
@@ -701,8 +699,6 @@ static void __diag_fwd_open(struct diagfwd_info *fwd_info)

	if (fwd_info->p_ops && fwd_info->p_ops->open)
		fwd_info->p_ops->open(fwd_info->ctxt);

	diagfwd_queue_read(fwd_info);
}

void diagfwd_early_open(uint8_t peripheral)
@@ -781,7 +777,7 @@ int diagfwd_channel_open(struct diagfwd_info *fwd_info)
	diagfwd_buffers_init(fwd_info);
	if (fwd_info && fwd_info->c_ops && fwd_info->c_ops->open)
		fwd_info->c_ops->open(fwd_info);
	diagfwd_queue_read(fwd_info);

	DIAG_LOG(DIAG_DEBUG_PERIPHERALS, "p: %d t: %d considered opened\n",
		 fwd_info->peripheral, fwd_info->type);

+3 −4
Original line number Diff line number Diff line
@@ -752,18 +752,17 @@ static int diag_smd_read(void *ctxt, unsigned char *buf, int buf_len)
			read_len = smd_read_avail(smd_info->hdl);
			if (!read_len) {
				wait_event(smd_info->read_wait_q,
					   (!(atomic_read(&smd_info->opened)) ||
					   ((atomic_read(&smd_info->opened)) &&
					    smd_read_avail(smd_info->hdl)));

				if (smd_info->hdl ||
				if (!smd_info->hdl ||
				    !atomic_read(&smd_info->opened)) {
					DIAG_LOG(DIAG_DEBUG_PERIPHERALS,
						"%s exiting from wait",
						smd_info->name);
					continue;
				} else
					goto fail_return;
				}
			}

			if (pkt_len < read_len)
				goto fail_return;