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

Commit db786c4d authored by Yuanfang Zhang's avatar Yuanfang Zhang Committed by Gerrit - the friendly Code Review server
Browse files

qdss_bridge: fix stuck issue when driver remove



Only the memory written to usb needs to wait for write complete
when removed driver or modem ssr happened. The "used" member is
used to mark the state of memory written to usb.

Change-Id: Ia1755a6c38f8419c5282347744a3d8f3d3b58ad7
Signed-off-by: default avatarYuanfang Zhang <zhangyuanfang@codeaurora.org>
parent 4413a8e8
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -151,7 +151,8 @@ static int qdss_check_entry(struct qdss_bridge_drvdata *drvdata)
	int ret = 0;

	list_for_each_entry(entry, &drvdata->buf_tbl, link) {
		if (atomic_read(&entry->available) == 0) {
		if (atomic_read(&entry->available) == 0
			&& atomic_read(&entry->used) == 1) {
			ret = 1;
			return ret;
		}
@@ -199,6 +200,7 @@ static void qdss_buf_tbl_remove(struct qdss_bridge_drvdata *drvdata,
		if (entry->buf != buf)
			continue;
		atomic_set(&entry->available, 1);
		atomic_set(&entry->used, 0);
		spin_unlock_bh(&drvdata->lock);
		return;
	}
@@ -382,6 +384,7 @@ static int usb_write(struct qdss_bridge_drvdata *drvdata,

	entry->usb_req->buf = buf;
	entry->usb_req->length = len;
	atomic_set(&entry->used, 1);
	ret = usb_qdss_write(drvdata->usb_ch, entry->usb_req);

	return ret;
+2 −1
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0-only */
/*
 * Copyright (c) 2017-2020, The Linux Foundation. All rights reserved.
 * Copyright (c) 2017-2021, The Linux Foundation. All rights reserved.
 */

#ifndef _QDSS_BRIDGE_H
@@ -11,6 +11,7 @@ struct qdss_buf_tbl_lst {
	unsigned char *buf;
	struct qdss_request *usb_req;
	atomic_t available;
	atomic_t used;
};

struct qdss_mhi_buf_tbl_t {