* [PATCH v2 1/7] usb: mtu3: give back request when rx error happens
@ 2023-04-07 8:29 Chunfeng Yun
2023-04-07 8:29 ` [PATCH v2 2/7] usb: mtu3: use boolean return value Chunfeng Yun
` (5 more replies)
0 siblings, 6 replies; 10+ messages in thread
From: Chunfeng Yun @ 2023-04-07 8:29 UTC (permalink / raw)
To: Greg Kroah-Hartman, Rob Herring
Cc: Chunfeng Yun, Krzysztof Kozlowski, Matthias Brugger,
AngeloGioacchino Del Regno, linux-usb, linux-arm-kernel,
linux-mediatek, devicetree, linux-kernel, Tianping Fang
When the Rx enconnter errors, currently, only print error logs, that
may cause class driver's RX halt, shall give back the request with
error status meanwhile.
Signed-off-by: Chunfeng Yun <chunfeng.yun@mediatek.com>
---
v2: remove @req suggested by AngeloGioacchino
---
drivers/usb/mtu3/mtu3_qmu.c | 37 ++++++++++++++++++++++++++++++++++++-
1 file changed, 36 insertions(+), 1 deletion(-)
diff --git a/drivers/usb/mtu3/mtu3_qmu.c b/drivers/usb/mtu3/mtu3_qmu.c
index a2fdab8b63b2..a4da1af0b2c0 100644
--- a/drivers/usb/mtu3/mtu3_qmu.c
+++ b/drivers/usb/mtu3/mtu3_qmu.c
@@ -466,6 +466,37 @@ static void qmu_tx_zlp_error_handler(struct mtu3 *mtu, u8 epnum)
mtu3_qmu_resume(mep);
}
+/*
+ * when rx error happens (except zlperr), QMU will stop, and RQCPR saves
+ * the GPD encountered error, Done irq will arise after resuming QMU again.
+ */
+static void qmu_error_rx(struct mtu3 *mtu, u8 epnum)
+{
+ struct mtu3_ep *mep = mtu->out_eps + epnum;
+ struct mtu3_gpd_ring *ring = &mep->gpd_ring;
+ struct qmu_gpd *gpd_current = NULL;
+ struct mtu3_request *mreq;
+ dma_addr_t cur_gpd_dma;
+
+ cur_gpd_dma = read_rxq_cur_addr(mtu->mac_base, epnum);
+ gpd_current = gpd_dma_to_virt(ring, cur_gpd_dma);
+
+ mreq = next_request(mep);
+ if (!mreq || mreq->gpd != gpd_current) {
+ dev_err(mtu->dev, "no correct RX req is found\n");
+ return;
+ }
+
+ mreq->request.status = -EAGAIN;
+
+ /* by pass the current GDP */
+ gpd_current->dw0_info |= cpu_to_le32(GPD_FLAGS_BPS | GPD_FLAGS_HWO);
+ mtu3_qmu_resume(mep);
+
+ dev_dbg(mtu->dev, "%s EP%d, current=%p, req=%p\n",
+ __func__, epnum, gpd_current, mreq);
+}
+
/*
* NOTE: request list maybe is already empty as following case:
* queue_tx --> qmu_interrupt(clear interrupt pending, schedule tasklet)-->
@@ -571,14 +602,18 @@ static void qmu_exception_isr(struct mtu3 *mtu, u32 qmu_status)
if ((qmu_status & RXQ_CSERR_INT) || (qmu_status & RXQ_LENERR_INT)) {
errval = mtu3_readl(mbase, U3D_RQERRIR0);
+ mtu3_writel(mbase, U3D_RQERRIR0, errval);
+
for (i = 1; i < mtu->num_eps; i++) {
if (errval & QMU_RX_CS_ERR(i))
dev_err(mtu->dev, "Rx %d CS error!\n", i);
if (errval & QMU_RX_LEN_ERR(i))
dev_err(mtu->dev, "RX %d Length error\n", i);
+
+ if (errval & (QMU_RX_CS_ERR(i) | QMU_RX_LEN_ERR(i)))
+ qmu_error_rx(mtu, i);
}
- mtu3_writel(mbase, U3D_RQERRIR0, errval);
}
if (qmu_status & RXQ_ZLPERR_INT) {
--
2.18.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v2 2/7] usb: mtu3: use boolean return value
2023-04-07 8:29 [PATCH v2 1/7] usb: mtu3: give back request when rx error happens Chunfeng Yun
@ 2023-04-07 8:29 ` Chunfeng Yun
2023-04-07 8:29 ` [PATCH v2 3/7] usb: mtu3: fix kernel panic at qmu transfer done irq handler Chunfeng Yun
` (4 subsequent siblings)
5 siblings, 0 replies; 10+ messages in thread
From: Chunfeng Yun @ 2023-04-07 8:29 UTC (permalink / raw)
To: Greg Kroah-Hartman, Rob Herring
Cc: Chunfeng Yun, Krzysztof Kozlowski, Matthias Brugger,
AngeloGioacchino Del Regno, linux-usb, linux-arm-kernel,
linux-mediatek, devicetree, linux-kernel, Tianping Fang
Prefer to use boolean value due to gpd_ring_empty() return true or false.
See "16) Function return values and names" in coding-style.rst
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Signed-off-by: Chunfeng Yun <chunfeng.yun@mediatek.com>
---
v2: add Reviewed-by AngeloGioacchino
---
drivers/usb/mtu3/mtu3_qmu.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/usb/mtu3/mtu3_qmu.c b/drivers/usb/mtu3/mtu3_qmu.c
index a4da1af0b2c0..6be4977a5db5 100644
--- a/drivers/usb/mtu3/mtu3_qmu.c
+++ b/drivers/usb/mtu3/mtu3_qmu.c
@@ -221,7 +221,7 @@ static struct qmu_gpd *advance_deq_gpd(struct mtu3_gpd_ring *ring)
}
/* check if a ring is emtpy */
-static int gpd_ring_empty(struct mtu3_gpd_ring *ring)
+static bool gpd_ring_empty(struct mtu3_gpd_ring *ring)
{
struct qmu_gpd *enq = ring->enqueue;
struct qmu_gpd *next;
--
2.18.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v2 3/7] usb: mtu3: fix kernel panic at qmu transfer done irq handler
2023-04-07 8:29 [PATCH v2 1/7] usb: mtu3: give back request when rx error happens Chunfeng Yun
2023-04-07 8:29 ` [PATCH v2 2/7] usb: mtu3: use boolean return value Chunfeng Yun
@ 2023-04-07 8:29 ` Chunfeng Yun
2023-04-07 9:09 ` AngeloGioacchino Del Regno
2023-04-07 8:29 ` [PATCH v2 4/7] usb: mtu3: unlock @mtu->lock just before giving back request Chunfeng Yun
` (3 subsequent siblings)
5 siblings, 1 reply; 10+ messages in thread
From: Chunfeng Yun @ 2023-04-07 8:29 UTC (permalink / raw)
To: Greg Kroah-Hartman, Rob Herring
Cc: Chunfeng Yun, Krzysztof Kozlowski, Matthias Brugger,
AngeloGioacchino Del Regno, linux-usb, linux-arm-kernel,
linux-mediatek, devicetree, linux-kernel, Tianping Fang
When handle qmu transfer irq, it will unlock @mtu->lock before give back
request, if another thread handle disconnect event at the same time, and
try to disable ep, it may lock @mtu->lock and free qmu ring, then qmu
irq hanlder may get a NULL gpd, avoid the KE by checking gpd's value before
handling it.
e.g.
qmu done irq on cpu0 thread running on cpu1
qmu_done_tx()
handle gpd [0]
mtu3_requ_complete() mtu3_gadget_ep_disable()
unlock @mtu->lock
give back request lock @mtu->lock
mtu3_ep_disable()
mtu3_gpd_ring_free()
unlock @mtu->lock
lock @mtu->lock
get next gpd [1]
[1]: goto [0] to handle next gpd, and next gpd may be NULL.
Signed-off-by: Chunfeng Yun <chunfeng.yun@mediatek.com>
---
v2: fix typo suggested by AngeloGioacchino
---
drivers/usb/mtu3/mtu3_qmu.c | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/drivers/usb/mtu3/mtu3_qmu.c b/drivers/usb/mtu3/mtu3_qmu.c
index 6be4977a5db5..3d77408e3133 100644
--- a/drivers/usb/mtu3/mtu3_qmu.c
+++ b/drivers/usb/mtu3/mtu3_qmu.c
@@ -210,6 +210,7 @@ static struct qmu_gpd *advance_enq_gpd(struct mtu3_gpd_ring *ring)
return ring->enqueue;
}
+/* @dequeue may be NULL if ring is unallocated or freed */
static struct qmu_gpd *advance_deq_gpd(struct mtu3_gpd_ring *ring)
{
if (ring->dequeue < ring->end)
@@ -522,7 +523,7 @@ static void qmu_done_tx(struct mtu3 *mtu, u8 epnum)
dev_dbg(mtu->dev, "%s EP%d, last=%p, current=%p, enq=%p\n",
__func__, epnum, gpd, gpd_current, ring->enqueue);
- while (gpd != gpd_current && !GET_GPD_HWO(gpd)) {
+ while (gpd && gpd != gpd_current && !GET_GPD_HWO(gpd)) {
mreq = next_request(mep);
@@ -561,7 +562,7 @@ static void qmu_done_rx(struct mtu3 *mtu, u8 epnum)
dev_dbg(mtu->dev, "%s EP%d, last=%p, current=%p, enq=%p\n",
__func__, epnum, gpd, gpd_current, ring->enqueue);
- while (gpd != gpd_current && !GET_GPD_HWO(gpd)) {
+ while (gpd && gpd != gpd_current && !GET_GPD_HWO(gpd)) {
mreq = next_request(mep);
--
2.18.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v2 4/7] usb: mtu3: unlock @mtu->lock just before giving back request
2023-04-07 8:29 [PATCH v2 1/7] usb: mtu3: give back request when rx error happens Chunfeng Yun
2023-04-07 8:29 ` [PATCH v2 2/7] usb: mtu3: use boolean return value Chunfeng Yun
2023-04-07 8:29 ` [PATCH v2 3/7] usb: mtu3: fix kernel panic at qmu transfer done irq handler Chunfeng Yun
@ 2023-04-07 8:29 ` Chunfeng Yun
2023-04-07 8:29 ` [PATCH v2 5/7] usb: mtu3: expose role-switch control to userspace Chunfeng Yun
` (2 subsequent siblings)
5 siblings, 0 replies; 10+ messages in thread
From: Chunfeng Yun @ 2023-04-07 8:29 UTC (permalink / raw)
To: Greg Kroah-Hartman, Rob Herring
Cc: Chunfeng Yun, Krzysztof Kozlowski, Matthias Brugger,
AngeloGioacchino Del Regno, linux-usb, linux-arm-kernel,
linux-mediatek, devicetree, linux-kernel, Tianping Fang
No need unlock @mtu->lock when unmap request, unlock it just before
giving back request, due to we do not lock this spinlock when map
the request.
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Signed-off-by: Chunfeng Yun <chunfeng.yun@mediatek.com>
---
v2: add Reviewed-by AngeloGioacchino
---
drivers/usb/mtu3/mtu3_gadget.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/usb/mtu3/mtu3_gadget.c b/drivers/usb/mtu3/mtu3_gadget.c
index c0264d5426bf..ad0eeac4332d 100644
--- a/drivers/usb/mtu3/mtu3_gadget.c
+++ b/drivers/usb/mtu3/mtu3_gadget.c
@@ -23,7 +23,6 @@ __acquires(mep->mtu->lock)
req->status = status;
trace_mtu3_req_complete(mreq);
- spin_unlock(&mtu->lock);
/* ep0 makes use of PIO, needn't unmap it */
if (mep->epnum)
@@ -32,6 +31,7 @@ __acquires(mep->mtu->lock)
dev_dbg(mtu->dev, "%s complete req: %p, sts %d, %d/%d\n",
mep->name, req, req->status, req->actual, req->length);
+ spin_unlock(&mtu->lock);
usb_gadget_giveback_request(&mep->ep, req);
spin_lock(&mtu->lock);
}
--
2.18.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v2 5/7] usb: mtu3: expose role-switch control to userspace
2023-04-07 8:29 [PATCH v2 1/7] usb: mtu3: give back request when rx error happens Chunfeng Yun
` (2 preceding siblings ...)
2023-04-07 8:29 ` [PATCH v2 4/7] usb: mtu3: unlock @mtu->lock just before giving back request Chunfeng Yun
@ 2023-04-07 8:29 ` Chunfeng Yun
2023-04-07 8:29 ` [PATCH v2 6/7] dt-bindings: usb: mtu3: add two optional clocks Chunfeng Yun
2023-04-07 8:29 ` [PATCH v2 7/7] usb: mtu3: add optional clock xhci_ck and frmcnt_ck Chunfeng Yun
5 siblings, 0 replies; 10+ messages in thread
From: Chunfeng Yun @ 2023-04-07 8:29 UTC (permalink / raw)
To: Greg Kroah-Hartman, Rob Herring
Cc: Chunfeng Yun, Krzysztof Kozlowski, Matthias Brugger,
AngeloGioacchino Del Regno, linux-usb, linux-arm-kernel,
linux-mediatek, devicetree, linux-kernel, Tianping Fang
The allow_userspace_control flag enables manual role switch from userspace,
turn this feature on like several other USB DRD controller drivers.
Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Signed-off-by: Chunfeng Yun <chunfeng.yun@mediatek.com>
---
v2: add Reviewed-by AngeloGioacchino
---
drivers/usb/mtu3/mtu3_dr.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/usb/mtu3/mtu3_dr.c b/drivers/usb/mtu3/mtu3_dr.c
index 9b8aded3d95e..8191b7ed3852 100644
--- a/drivers/usb/mtu3/mtu3_dr.c
+++ b/drivers/usb/mtu3/mtu3_dr.c
@@ -294,6 +294,7 @@ static int ssusb_role_sw_register(struct otg_switch_mtk *otg_sx)
role_sx_desc.get = ssusb_role_sw_get;
role_sx_desc.fwnode = dev_fwnode(dev);
role_sx_desc.driver_data = ssusb;
+ role_sx_desc.allow_userspace_control = true;
otg_sx->role_sw = usb_role_switch_register(dev, &role_sx_desc);
if (IS_ERR(otg_sx->role_sw))
return PTR_ERR(otg_sx->role_sw);
--
2.18.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v2 6/7] dt-bindings: usb: mtu3: add two optional clocks
2023-04-07 8:29 [PATCH v2 1/7] usb: mtu3: give back request when rx error happens Chunfeng Yun
` (3 preceding siblings ...)
2023-04-07 8:29 ` [PATCH v2 5/7] usb: mtu3: expose role-switch control to userspace Chunfeng Yun
@ 2023-04-07 8:29 ` Chunfeng Yun
2023-04-12 14:54 ` Rob Herring
2023-04-07 8:29 ` [PATCH v2 7/7] usb: mtu3: add optional clock xhci_ck and frmcnt_ck Chunfeng Yun
5 siblings, 1 reply; 10+ messages in thread
From: Chunfeng Yun @ 2023-04-07 8:29 UTC (permalink / raw)
To: Greg Kroah-Hartman, Rob Herring
Cc: Chunfeng Yun, Krzysztof Kozlowski, Matthias Brugger,
AngeloGioacchino Del Regno, linux-usb, linux-arm-kernel,
linux-mediatek, devicetree, linux-kernel, Tianping Fang
Add optional clock 'xhci_ck' and 'frmcnt_ck';
Add optional property "assigned-clock" and "assigned-clock-parents";
Signed-off-by: Chunfeng Yun <chunfeng.yun@mediatek.com>
---
v2: remove assigned-clocks* properties suggested by Rob
---
Documentation/devicetree/bindings/usb/mediatek,mtu3.yaml | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/Documentation/devicetree/bindings/usb/mediatek,mtu3.yaml b/Documentation/devicetree/bindings/usb/mediatek,mtu3.yaml
index d2655173e108..3d403d944453 100644
--- a/Documentation/devicetree/bindings/usb/mediatek,mtu3.yaml
+++ b/Documentation/devicetree/bindings/usb/mediatek,mtu3.yaml
@@ -66,6 +66,8 @@ properties:
- description: Reference clock used by low power mode etc
- description: Mcu bus clock for register access
- description: DMA bus clock for data transfer
+ - description: DRD controller clock
+ - description: Frame count clock
clock-names:
minItems: 1
@@ -74,6 +76,8 @@ properties:
- const: ref_ck
- const: mcu_ck
- const: dma_ck
+ - const: xhci_ck
+ - const: frmcnt_ck
phys:
description:
--
2.18.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [PATCH v2 7/7] usb: mtu3: add optional clock xhci_ck and frmcnt_ck
2023-04-07 8:29 [PATCH v2 1/7] usb: mtu3: give back request when rx error happens Chunfeng Yun
` (4 preceding siblings ...)
2023-04-07 8:29 ` [PATCH v2 6/7] dt-bindings: usb: mtu3: add two optional clocks Chunfeng Yun
@ 2023-04-07 8:29 ` Chunfeng Yun
5 siblings, 0 replies; 10+ messages in thread
From: Chunfeng Yun @ 2023-04-07 8:29 UTC (permalink / raw)
To: Greg Kroah-Hartman, Rob Herring
Cc: Chunfeng Yun, Krzysztof Kozlowski, Matthias Brugger,
AngeloGioacchino Del Regno, linux-usb, linux-arm-kernel,
linux-mediatek, devicetree, linux-kernel, Tianping Fang
Add optional clock 'xhci_ck' which is usually the same as sys_ck, but
some SoC use two separated clocks when the controller supports dual
role mode;
Add optional clock 'frmcnt_ck' used on 4nm or advanced process SoC.
Signed-off-by: Chunfeng Yun <chunfeng.yun@mediatek.com>
---
v2: no changes
---
drivers/usb/mtu3/mtu3.h | 2 +-
drivers/usb/mtu3/mtu3_plat.c | 2 ++
2 files changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/usb/mtu3/mtu3.h b/drivers/usb/mtu3/mtu3.h
index 2d7b57e07eee..b4a7662dded5 100644
--- a/drivers/usb/mtu3/mtu3.h
+++ b/drivers/usb/mtu3/mtu3.h
@@ -90,7 +90,7 @@ struct mtu3_request;
*/
#define EP0_RESPONSE_BUF 6
-#define BULK_CLKS_CNT 4
+#define BULK_CLKS_CNT 6
/* device operated link and speed got from DEVICE_CONF register */
enum mtu3_speed {
diff --git a/drivers/usb/mtu3/mtu3_plat.c b/drivers/usb/mtu3/mtu3_plat.c
index d78ae52b4e26..6f264b129243 100644
--- a/drivers/usb/mtu3/mtu3_plat.c
+++ b/drivers/usb/mtu3/mtu3_plat.c
@@ -234,6 +234,8 @@ static int get_ssusb_rscs(struct platform_device *pdev, struct ssusb_mtk *ssusb)
clks[1].id = "ref_ck";
clks[2].id = "mcu_ck";
clks[3].id = "dma_ck";
+ clks[4].id = "xhci_ck";
+ clks[5].id = "frmcnt_ck";
ret = devm_clk_bulk_get_optional(dev, BULK_CLKS_CNT, clks);
if (ret)
return ret;
--
2.18.0
^ permalink raw reply related [flat|nested] 10+ messages in thread
* Re: [PATCH v2 3/7] usb: mtu3: fix kernel panic at qmu transfer done irq handler
2023-04-07 8:29 ` [PATCH v2 3/7] usb: mtu3: fix kernel panic at qmu transfer done irq handler Chunfeng Yun
@ 2023-04-07 9:09 ` AngeloGioacchino Del Regno
2023-04-17 1:50 ` Chunfeng Yun (云春峰)
0 siblings, 1 reply; 10+ messages in thread
From: AngeloGioacchino Del Regno @ 2023-04-07 9:09 UTC (permalink / raw)
To: Chunfeng Yun, Greg Kroah-Hartman, Rob Herring
Cc: Krzysztof Kozlowski, Matthias Brugger, linux-usb,
linux-arm-kernel, linux-mediatek, devicetree, linux-kernel,
Tianping Fang
Il 07/04/23 10:29, Chunfeng Yun ha scritto:
> When handle qmu transfer irq, it will unlock @mtu->lock before give back
> request, if another thread handle disconnect event at the same time, and
> try to disable ep, it may lock @mtu->lock and free qmu ring, then qmu
> irq hanlder may get a NULL gpd, avoid the KE by checking gpd's value before
> handling it.
>
> e.g.
> qmu done irq on cpu0 thread running on cpu1
>
> qmu_done_tx()
> handle gpd [0]
> mtu3_requ_complete() mtu3_gadget_ep_disable()
> unlock @mtu->lock
> give back request lock @mtu->lock
> mtu3_ep_disable()
> mtu3_gpd_ring_free()
> unlock @mtu->lock
> lock @mtu->lock
> get next gpd [1]
>
> [1]: goto [0] to handle next gpd, and next gpd may be NULL.
>
> Signed-off-by: Chunfeng Yun <chunfeng.yun@mediatek.com>
NACK. You still miss the Fixes tag.
Regards,
Angelo
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 6/7] dt-bindings: usb: mtu3: add two optional clocks
2023-04-07 8:29 ` [PATCH v2 6/7] dt-bindings: usb: mtu3: add two optional clocks Chunfeng Yun
@ 2023-04-12 14:54 ` Rob Herring
0 siblings, 0 replies; 10+ messages in thread
From: Rob Herring @ 2023-04-12 14:54 UTC (permalink / raw)
To: Chunfeng Yun
Cc: linux-arm-kernel, linux-usb, Tianping Fang, Greg Kroah-Hartman,
Krzysztof Kozlowski, linux-kernel, Matthias Brugger, Rob Herring,
linux-mediatek, devicetree, AngeloGioacchino Del Regno
On Fri, 07 Apr 2023 16:29:36 +0800, Chunfeng Yun wrote:
> Add optional clock 'xhci_ck' and 'frmcnt_ck';
> Add optional property "assigned-clock" and "assigned-clock-parents";
>
> Signed-off-by: Chunfeng Yun <chunfeng.yun@mediatek.com>
> ---
> v2: remove assigned-clocks* properties suggested by Rob
> ---
> Documentation/devicetree/bindings/usb/mediatek,mtu3.yaml | 4 ++++
> 1 file changed, 4 insertions(+)
>
Reviewed-by: Rob Herring <robh@kernel.org>
^ permalink raw reply [flat|nested] 10+ messages in thread
* Re: [PATCH v2 3/7] usb: mtu3: fix kernel panic at qmu transfer done irq handler
2023-04-07 9:09 ` AngeloGioacchino Del Regno
@ 2023-04-17 1:50 ` Chunfeng Yun (云春峰)
0 siblings, 0 replies; 10+ messages in thread
From: Chunfeng Yun (云春峰) @ 2023-04-17 1:50 UTC (permalink / raw)
To: angelogioacchino.delregno@collabora.com,
gregkh@linuxfoundation.org, robh+dt@kernel.org
Cc: linux-mediatek@lists.infradead.org, linux-kernel@vger.kernel.org,
linux-usb@vger.kernel.org, devicetree@vger.kernel.org,
Tianping Fang (方天平),
linux-arm-kernel@lists.infradead.org,
krzysztof.kozlowski+dt@linaro.org, matthias.bgg@gmail.com
On Fri, 2023-04-07 at 11:09 +0200, AngeloGioacchino Del Regno wrote:
> External email : Please do not click links or open attachments until
> you have verified the sender or the content.
>
>
> Il 07/04/23 10:29, Chunfeng Yun ha scritto:
> > When handle qmu transfer irq, it will unlock @mtu->lock before give
> > back
> > request, if another thread handle disconnect event at the same
> > time, and
> > try to disable ep, it may lock @mtu->lock and free qmu ring, then
> > qmu
> > irq hanlder may get a NULL gpd, avoid the KE by checking gpd's
> > value before
> > handling it.
> >
> > e.g.
> > qmu done irq on cpu0 thread running on cpu1
> >
> > qmu_done_tx()
> > handle gpd [0]
> > mtu3_requ_complete() mtu3_gadget_ep_disable()
> > unlock @mtu->lock
> > give back request lock @mtu->lock
> > mtu3_ep_disable()
> > mtu3_gpd_ring_free()
> > unlock @mtu->lock
> > lock @mtu->lock
> > get next gpd [1]
> >
> > [1]: goto [0] to handle next gpd, and next gpd may be NULL.
> >
> > Signed-off-by: Chunfeng Yun <chunfeng.yun@mediatek.com>
>
> NACK. You still miss the Fixes tag.
Ok, I'll add it, thanks
>
> Regards,
> Angelo
>
^ permalink raw reply [flat|nested] 10+ messages in thread
end of thread, other threads:[~2023-04-17 2:00 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-04-07 8:29 [PATCH v2 1/7] usb: mtu3: give back request when rx error happens Chunfeng Yun
2023-04-07 8:29 ` [PATCH v2 2/7] usb: mtu3: use boolean return value Chunfeng Yun
2023-04-07 8:29 ` [PATCH v2 3/7] usb: mtu3: fix kernel panic at qmu transfer done irq handler Chunfeng Yun
2023-04-07 9:09 ` AngeloGioacchino Del Regno
2023-04-17 1:50 ` Chunfeng Yun (云春峰)
2023-04-07 8:29 ` [PATCH v2 4/7] usb: mtu3: unlock @mtu->lock just before giving back request Chunfeng Yun
2023-04-07 8:29 ` [PATCH v2 5/7] usb: mtu3: expose role-switch control to userspace Chunfeng Yun
2023-04-07 8:29 ` [PATCH v2 6/7] dt-bindings: usb: mtu3: add two optional clocks Chunfeng Yun
2023-04-12 14:54 ` Rob Herring
2023-04-07 8:29 ` [PATCH v2 7/7] usb: mtu3: add optional clock xhci_ck and frmcnt_ck Chunfeng Yun
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).