|
Jiri Slaby |
ef7db2 |
From: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
|
|
Jiri Slaby |
ef7db2 |
Date: Wed, 28 Dec 2022 21:47:01 +0530
|
|
Jiri Slaby |
ef7db2 |
Subject: [PATCH] bus: mhi: ep: Only send -ENOTCONN status if client driver is
|
|
Jiri Slaby |
ef7db2 |
available
|
|
Jiri Slaby |
ef7db2 |
References: bsc#1012628
|
|
Jiri Slaby |
ef7db2 |
Patch-mainline: 6.2.3
|
|
Jiri Slaby |
ef7db2 |
Git-commit: e6cebcc27519dcf1652e604c73b9fd4f416987c0
|
|
Jiri Slaby |
ef7db2 |
|
|
Jiri Slaby |
ef7db2 |
commit e6cebcc27519dcf1652e604c73b9fd4f416987c0 upstream.
|
|
Jiri Slaby |
ef7db2 |
|
|
Jiri Slaby |
ef7db2 |
For the STOP and RESET commands, only send the channel disconnect status
|
|
Jiri Slaby |
ef7db2 |
-ENOTCONN if client driver is available. Otherwise, it will result in
|
|
Jiri Slaby |
ef7db2 |
null pointer dereference.
|
|
Jiri Slaby |
ef7db2 |
|
|
Jiri Slaby |
ef7db2 |
Cc: <stable@vger.kernel.org> # 5.19
|
|
Jiri Slaby |
ef7db2 |
Fixes: e827569062a8 ("bus: mhi: ep: Add support for processing command rings")
|
|
Jiri Slaby |
ef7db2 |
Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
|
|
Jiri Slaby |
ef7db2 |
Reviewed-by: Jeffrey Hugo <quic_jhugo@quicinc.com>
|
|
Jiri Slaby |
ef7db2 |
Link: https://lore.kernel.org/r/20221228161704.255268-4-manivannan.sadhasivam@linaro.org
|
|
Jiri Slaby |
ef7db2 |
Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
|
|
Jiri Slaby |
ef7db2 |
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
|
|
Jiri Slaby |
ef7db2 |
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
|
|
Jiri Slaby |
ef7db2 |
---
|
|
Jiri Slaby |
ef7db2 |
drivers/bus/mhi/ep/main.c | 16 ++++++++++------
|
|
Jiri Slaby |
ef7db2 |
1 file changed, 10 insertions(+), 6 deletions(-)
|
|
Jiri Slaby |
ef7db2 |
|
|
Jiri Slaby |
ef7db2 |
diff --git a/drivers/bus/mhi/ep/main.c b/drivers/bus/mhi/ep/main.c
|
|
Jiri Slaby |
ef7db2 |
index 1dc8a355..2b3a3b56 100644
|
|
Jiri Slaby |
ef7db2 |
--- a/drivers/bus/mhi/ep/main.c
|
|
Jiri Slaby |
ef7db2 |
+++ b/drivers/bus/mhi/ep/main.c
|
|
Jiri Slaby |
ef7db2 |
@@ -196,9 +196,11 @@ static int mhi_ep_process_cmd_ring(struct mhi_ep_ring *ring, struct mhi_ring_ele
|
|
Jiri Slaby |
ef7db2 |
mhi_ep_mmio_disable_chdb(mhi_cntrl, ch_id);
|
|
Jiri Slaby |
ef7db2 |
|
|
Jiri Slaby |
ef7db2 |
/* Send channel disconnect status to client drivers */
|
|
Jiri Slaby |
ef7db2 |
- result.transaction_status = -ENOTCONN;
|
|
Jiri Slaby |
ef7db2 |
- result.bytes_xferd = 0;
|
|
Jiri Slaby |
ef7db2 |
- mhi_chan->xfer_cb(mhi_chan->mhi_dev, &result);
|
|
Jiri Slaby |
ef7db2 |
+ if (mhi_chan->xfer_cb) {
|
|
Jiri Slaby |
ef7db2 |
+ result.transaction_status = -ENOTCONN;
|
|
Jiri Slaby |
ef7db2 |
+ result.bytes_xferd = 0;
|
|
Jiri Slaby |
ef7db2 |
+ mhi_chan->xfer_cb(mhi_chan->mhi_dev, &result);
|
|
Jiri Slaby |
ef7db2 |
+ }
|
|
Jiri Slaby |
ef7db2 |
|
|
Jiri Slaby |
ef7db2 |
/* Set channel state to STOP */
|
|
Jiri Slaby |
ef7db2 |
mhi_chan->state = MHI_CH_STATE_STOP;
|
|
Jiri Slaby |
ef7db2 |
@@ -228,9 +230,11 @@ static int mhi_ep_process_cmd_ring(struct mhi_ep_ring *ring, struct mhi_ring_ele
|
|
Jiri Slaby |
ef7db2 |
mhi_ep_ring_reset(mhi_cntrl, ch_ring);
|
|
Jiri Slaby |
ef7db2 |
|
|
Jiri Slaby |
ef7db2 |
/* Send channel disconnect status to client driver */
|
|
Jiri Slaby |
ef7db2 |
- result.transaction_status = -ENOTCONN;
|
|
Jiri Slaby |
ef7db2 |
- result.bytes_xferd = 0;
|
|
Jiri Slaby |
ef7db2 |
- mhi_chan->xfer_cb(mhi_chan->mhi_dev, &result);
|
|
Jiri Slaby |
ef7db2 |
+ if (mhi_chan->xfer_cb) {
|
|
Jiri Slaby |
ef7db2 |
+ result.transaction_status = -ENOTCONN;
|
|
Jiri Slaby |
ef7db2 |
+ result.bytes_xferd = 0;
|
|
Jiri Slaby |
ef7db2 |
+ mhi_chan->xfer_cb(mhi_chan->mhi_dev, &result);
|
|
Jiri Slaby |
ef7db2 |
+ }
|
|
Jiri Slaby |
ef7db2 |
|
|
Jiri Slaby |
ef7db2 |
/* Set channel state to DISABLED */
|
|
Jiri Slaby |
ef7db2 |
mhi_chan->state = MHI_CH_STATE_DISABLED;
|
|
Jiri Slaby |
ef7db2 |
--
|
|
Jiri Slaby |
ef7db2 |
2.35.3
|
|
Jiri Slaby |
ef7db2 |
|