From: Sasha Levin Date: Fri, 4 Nov 2022 14:54:40 +0000 (-0400) Subject: Fixes for 6.0 X-Git-Tag: v4.9.333~94 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=5f22116631ab5d8b3fe4b2dae8d43fef5a216275;p=thirdparty%2Fkernel%2Fstable-queue.git Fixes for 6.0 Signed-off-by: Sasha Levin --- diff --git a/queue-6.0/drm-i915-gvt-add-missing-vfio_unregister_group_dev-c.patch b/queue-6.0/drm-i915-gvt-add-missing-vfio_unregister_group_dev-c.patch new file mode 100644 index 00000000000..097747ee22b --- /dev/null +++ b/queue-6.0/drm-i915-gvt-add-missing-vfio_unregister_group_dev-c.patch @@ -0,0 +1,43 @@ +From 9df747c58f96b4595e835824008f2a2974ba7723 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Thu, 29 Sep 2022 14:48:35 -0300 +Subject: drm/i915/gvt: Add missing vfio_unregister_group_dev() call + +From: Jason Gunthorpe + +[ Upstream commit f423fa1bc9fe1978e6b9f54927411b62cb43eb04 ] + +When converting to directly create the vfio_device the mdev driver has to +put a vfio_register_emulated_iommu_dev() in the probe() and a pairing +vfio_unregister_group_dev() in the remove. + +This was missed for gvt, add it. + +Cc: stable@vger.kernel.org +Fixes: 978cf586ac35 ("drm/i915/gvt: convert to use vfio_register_emulated_iommu_dev") +Reported-by: Alex Williamson +Signed-off-by: Jason Gunthorpe +Reviewed-by: Kevin Tian +Reviewed-by: Christoph Hellwig +Link: https://lore.kernel.org/r/0-v1-013609965fe8+9d-vfio_gvt_unregister_jgg@nvidia.com +Signed-off-by: Alex Williamson +Signed-off-by: Sasha Levin +--- + drivers/gpu/drm/i915/gvt/kvmgt.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/drivers/gpu/drm/i915/gvt/kvmgt.c b/drivers/gpu/drm/i915/gvt/kvmgt.c +index e3cd58946477..dacd57732dbe 100644 +--- a/drivers/gpu/drm/i915/gvt/kvmgt.c ++++ b/drivers/gpu/drm/i915/gvt/kvmgt.c +@@ -1595,6 +1595,7 @@ static void intel_vgpu_remove(struct mdev_device *mdev) + + if (WARN_ON_ONCE(vgpu->attached)) + return; ++ vfio_unregister_group_dev(&vgpu->vfio_device); + intel_gvt_destroy_vgpu(vgpu); + } + +-- +2.35.1 + diff --git a/queue-6.0/scsi-qla2xxx-define-static-symbols.patch b/queue-6.0/scsi-qla2xxx-define-static-symbols.patch new file mode 100644 index 00000000000..86e1201653b --- /dev/null +++ b/queue-6.0/scsi-qla2xxx-define-static-symbols.patch @@ -0,0 +1,54 @@ +From 0c2f78df3c253cc0662f2c3e1d9a849aed3d11ef Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 26 Aug 2022 03:25:58 -0700 +Subject: scsi: qla2xxx: Define static symbols + +From: Nilesh Javali + +[ Upstream commit 2c57d0defa22b2339c06364a275bcc9048a77255 ] + +drivers/scsi/qla2xxx/qla_os.c:40:20: warning: symbol 'qla_trc_array' +was not declared. Should it be static? +drivers/scsi/qla2xxx/qla_os.c:345:5: warning: symbol +'ql2xdelay_before_pci_error_handling' was not declared. +Should it be static? + +Define qla_trc_array and ql2xdelay_before_pci_error_handling as static to +fix sparse warnings. + +Link: https://lore.kernel.org/r/20220826102559.17474-7-njavali@marvell.com +Cc: stable@vger.kernel.org +Reported-by: kernel test robot +Reviewed-by: Himanshu Madhani +Signed-off-by: Nilesh Javali +Signed-off-by: Martin K. Petersen +Signed-off-by: Sasha Levin +--- + drivers/scsi/qla2xxx/qla_os.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c +index 4a55c1e81327..46c281b55c63 100644 +--- a/drivers/scsi/qla2xxx/qla_os.c ++++ b/drivers/scsi/qla2xxx/qla_os.c +@@ -37,7 +37,7 @@ static int apidev_major; + */ + struct kmem_cache *srb_cachep; + +-struct trace_array *qla_trc_array; ++static struct trace_array *qla_trc_array; + + int ql2xfulldump_on_mpifail; + module_param(ql2xfulldump_on_mpifail, int, S_IRUGO | S_IWUSR); +@@ -342,7 +342,7 @@ MODULE_PARM_DESC(ql2xabts_wait_nvme, + "To wait for ABTS response on I/O timeouts for NVMe. (default: 1)"); + + +-u32 ql2xdelay_before_pci_error_handling = 5; ++static u32 ql2xdelay_before_pci_error_handling = 5; + module_param(ql2xdelay_before_pci_error_handling, uint, 0644); + MODULE_PARM_DESC(ql2xdelay_before_pci_error_handling, + "Number of seconds delayed before qla begin PCI error self-handling (default: 5).\n"); +-- +2.35.1 + diff --git a/queue-6.0/scsi-qla2xxx-enhance-driver-tracing-with-separate-tu.patch b/queue-6.0/scsi-qla2xxx-enhance-driver-tracing-with-separate-tu.patch new file mode 100644 index 00000000000..8ab1e2ef8db --- /dev/null +++ b/queue-6.0/scsi-qla2xxx-enhance-driver-tracing-with-separate-tu.patch @@ -0,0 +1,341 @@ +From 9fd4ed7bfae4063cbd22b06edf693bbce058be5c Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Fri, 26 Aug 2022 03:25:57 -0700 +Subject: scsi: qla2xxx: Enhance driver tracing with separate tunable and more + +From: Arun Easi + +[ Upstream commit 8bfc149ba24cb985d593c0b2ddcf03ce42febe0c ] + +Older tracing of driver messages was to: + + - log only debug messages to kernel main trace buffer; and + + - log only if extended logging bits corresponding to this message is + off + +This has been modified and extended as follows: + + - Tracing is now controlled via ql2xextended_error_logging_ktrace + module parameter. Bit usages same as ql2xextended_error_logging. + + - Tracing uses "qla2xxx" trace instance, unless instance creation have + issues. + + - Tracing is enabled (compile time tunable). + + - All driver messages, include debug and log messages are now traced in + kernel trace buffer. + +Trace messages can be viewed by looking at the qla2xxx instance at: + + /sys/kernel/tracing/instances/qla2xxx/trace + +Trace tunable that takes the same bit mask as ql2xextended_error_logging +is: + + ql2xextended_error_logging_ktrace (default=1) + +Link: https://lore.kernel.org/r/20220826102559.17474-6-njavali@marvell.com +Suggested-by: Daniel Wagner +Suggested-by: Steven Rostedt +Tested-by: Himanshu Madhani +Reviewed-by: Himanshu Madhani +Reviewed-by: Daniel Wagner +Signed-off-by: Arun Easi +Signed-off-by: Nilesh Javali +Signed-off-by: Martin K. Petersen +Stable-dep-of: 2c57d0defa22 ("scsi: qla2xxx: Define static symbols") +Signed-off-by: Sasha Levin +--- + drivers/scsi/qla2xxx/qla_dbg.c | 50 ++++++++++++++++++++++++---------- + drivers/scsi/qla2xxx/qla_dbg.h | 43 +++++++++++++++++++++++++++++ + drivers/scsi/qla2xxx/qla_gbl.h | 1 + + drivers/scsi/qla2xxx/qla_os.c | 35 ++++++++++++++++++++++++ + 4 files changed, 115 insertions(+), 14 deletions(-) + +diff --git a/drivers/scsi/qla2xxx/qla_dbg.c b/drivers/scsi/qla2xxx/qla_dbg.c +index 7cf1f78cbaee..d7e8454304ce 100644 +--- a/drivers/scsi/qla2xxx/qla_dbg.c ++++ b/drivers/scsi/qla2xxx/qla_dbg.c +@@ -2455,7 +2455,7 @@ qla83xx_fw_dump(scsi_qla_host_t *vha) + /****************************************************************************/ + + /* Write the debug message prefix into @pbuf. */ +-static void ql_dbg_prefix(char *pbuf, int pbuf_size, ++static void ql_dbg_prefix(char *pbuf, int pbuf_size, struct pci_dev *pdev, + const scsi_qla_host_t *vha, uint msg_id) + { + if (vha) { +@@ -2464,6 +2464,9 @@ static void ql_dbg_prefix(char *pbuf, int pbuf_size, + /* []-:: */ + snprintf(pbuf, pbuf_size, "%s [%s]-%04x:%lu: ", QL_MSGHDR, + dev_name(&(pdev->dev)), msg_id, vha->host_no); ++ } else if (pdev) { ++ snprintf(pbuf, pbuf_size, "%s [%s]-%04x: : ", QL_MSGHDR, ++ dev_name(&pdev->dev), msg_id); + } else { + /* []-: : */ + snprintf(pbuf, pbuf_size, "%s [%s]-%04x: : ", QL_MSGHDR, +@@ -2491,20 +2494,20 @@ ql_dbg(uint level, scsi_qla_host_t *vha, uint id, const char *fmt, ...) + struct va_format vaf; + char pbuf[64]; + +- if (!ql_mask_match(level) && !trace_ql_dbg_log_enabled()) ++ ql_ktrace(1, level, pbuf, NULL, vha, id, fmt); ++ ++ if (!ql_mask_match(level)) + return; + ++ if (!pbuf[0]) /* set by ql_ktrace */ ++ ql_dbg_prefix(pbuf, ARRAY_SIZE(pbuf), NULL, vha, id); ++ + va_start(va, fmt); + + vaf.fmt = fmt; + vaf.va = &va; + +- ql_dbg_prefix(pbuf, ARRAY_SIZE(pbuf), vha, id); +- +- if (!ql_mask_match(level)) +- trace_ql_dbg_log(pbuf, &vaf); +- else +- pr_warn("%s%pV", pbuf, &vaf); ++ pr_warn("%s%pV", pbuf, &vaf); + + va_end(va); + +@@ -2533,6 +2536,9 @@ ql_dbg_pci(uint level, struct pci_dev *pdev, uint id, const char *fmt, ...) + + if (pdev == NULL) + return; ++ ++ ql_ktrace(1, level, pbuf, pdev, NULL, id, fmt); ++ + if (!ql_mask_match(level)) + return; + +@@ -2541,7 +2547,9 @@ ql_dbg_pci(uint level, struct pci_dev *pdev, uint id, const char *fmt, ...) + vaf.fmt = fmt; + vaf.va = &va; + +- ql_dbg_prefix(pbuf, ARRAY_SIZE(pbuf), NULL, id + ql_dbg_offset); ++ if (!pbuf[0]) /* set by ql_ktrace */ ++ ql_dbg_prefix(pbuf, ARRAY_SIZE(pbuf), pdev, NULL, ++ id + ql_dbg_offset); + pr_warn("%s%pV", pbuf, &vaf); + + va_end(va); +@@ -2570,7 +2578,10 @@ ql_log(uint level, scsi_qla_host_t *vha, uint id, const char *fmt, ...) + if (level > ql_errlev) + return; + +- ql_dbg_prefix(pbuf, ARRAY_SIZE(pbuf), vha, id); ++ ql_ktrace(0, level, pbuf, NULL, vha, id, fmt); ++ ++ if (!pbuf[0]) /* set by ql_ktrace */ ++ ql_dbg_prefix(pbuf, ARRAY_SIZE(pbuf), NULL, vha, id); + + va_start(va, fmt); + +@@ -2621,7 +2632,10 @@ ql_log_pci(uint level, struct pci_dev *pdev, uint id, const char *fmt, ...) + if (level > ql_errlev) + return; + +- ql_dbg_prefix(pbuf, ARRAY_SIZE(pbuf), NULL, id); ++ ql_ktrace(0, level, pbuf, pdev, NULL, id, fmt); ++ ++ if (!pbuf[0]) /* set by ql_ktrace */ ++ ql_dbg_prefix(pbuf, ARRAY_SIZE(pbuf), pdev, NULL, id); + + va_start(va, fmt); + +@@ -2716,7 +2730,11 @@ ql_log_qp(uint32_t level, struct qla_qpair *qpair, int32_t id, + if (level > ql_errlev) + return; + +- ql_dbg_prefix(pbuf, ARRAY_SIZE(pbuf), qpair ? qpair->vha : NULL, id); ++ ql_ktrace(0, level, pbuf, NULL, qpair ? qpair->vha : NULL, id, fmt); ++ ++ if (!pbuf[0]) /* set by ql_ktrace */ ++ ql_dbg_prefix(pbuf, ARRAY_SIZE(pbuf), NULL, ++ qpair ? qpair->vha : NULL, id); + + va_start(va, fmt); + +@@ -2762,6 +2780,8 @@ ql_dbg_qp(uint32_t level, struct qla_qpair *qpair, int32_t id, + struct va_format vaf; + char pbuf[128]; + ++ ql_ktrace(1, level, pbuf, NULL, qpair ? qpair->vha : NULL, id, fmt); ++ + if (!ql_mask_match(level)) + return; + +@@ -2770,8 +2790,10 @@ ql_dbg_qp(uint32_t level, struct qla_qpair *qpair, int32_t id, + vaf.fmt = fmt; + vaf.va = &va; + +- ql_dbg_prefix(pbuf, ARRAY_SIZE(pbuf), qpair ? qpair->vha : NULL, +- id + ql_dbg_offset); ++ if (!pbuf[0]) /* set by ql_ktrace */ ++ ql_dbg_prefix(pbuf, ARRAY_SIZE(pbuf), NULL, ++ qpair ? qpair->vha : NULL, id + ql_dbg_offset); ++ + pr_warn("%s%pV", pbuf, &vaf); + + va_end(va); +diff --git a/drivers/scsi/qla2xxx/qla_dbg.h b/drivers/scsi/qla2xxx/qla_dbg.h +index feeb1666227f..70482b55d240 100644 +--- a/drivers/scsi/qla2xxx/qla_dbg.h ++++ b/drivers/scsi/qla2xxx/qla_dbg.h +@@ -385,3 +385,46 @@ ql_mask_match(uint level) + + return level && ((level & ql2xextended_error_logging) == level); + } ++ ++static inline int ++ql_mask_match_ext(uint level, int *log_tunable) ++{ ++ if (*log_tunable == 1) ++ *log_tunable = QL_DBG_DEFAULT1_MASK; ++ ++ return (level & *log_tunable) == level; ++} ++ ++/* Assumes local variable pbuf and pbuf_ready present. */ ++#define ql_ktrace(dbg_msg, level, pbuf, pdev, vha, id, fmt) do { \ ++ struct va_format _vaf; \ ++ va_list _va; \ ++ u32 dbg_off = dbg_msg ? ql_dbg_offset : 0; \ ++ \ ++ pbuf[0] = 0; \ ++ if (!trace_ql_dbg_log_enabled()) \ ++ break; \ ++ \ ++ if (dbg_msg && !ql_mask_match_ext(level, \ ++ &ql2xextended_error_logging_ktrace)) \ ++ break; \ ++ \ ++ ql_dbg_prefix(pbuf, ARRAY_SIZE(pbuf), pdev, vha, id + dbg_off); \ ++ \ ++ va_start(_va, fmt); \ ++ _vaf.fmt = fmt; \ ++ _vaf.va = &_va; \ ++ \ ++ trace_ql_dbg_log(pbuf, &_vaf); \ ++ \ ++ va_end(_va); \ ++} while (0) ++ ++#define QLA_ENABLE_KERNEL_TRACING ++ ++#ifdef QLA_ENABLE_KERNEL_TRACING ++#define QLA_TRACE_ENABLE(_tr) \ ++ trace_array_set_clr_event(_tr, "qla", NULL, true) ++#else /* QLA_ENABLE_KERNEL_TRACING */ ++#define QLA_TRACE_ENABLE(_tr) ++#endif /* QLA_ENABLE_KERNEL_TRACING */ +diff --git a/drivers/scsi/qla2xxx/qla_gbl.h b/drivers/scsi/qla2xxx/qla_gbl.h +index bb69fa8b956a..2fc280e61306 100644 +--- a/drivers/scsi/qla2xxx/qla_gbl.h ++++ b/drivers/scsi/qla2xxx/qla_gbl.h +@@ -163,6 +163,7 @@ extern int ql2xrdpenable; + extern int ql2xsmartsan; + extern int ql2xallocfwdump; + extern int ql2xextended_error_logging; ++extern int ql2xextended_error_logging_ktrace; + extern int ql2xiidmaenable; + extern int ql2xmqsupport; + extern int ql2xfwloadbin; +diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c +index 1c7fb6484db2..4a55c1e81327 100644 +--- a/drivers/scsi/qla2xxx/qla_os.c ++++ b/drivers/scsi/qla2xxx/qla_os.c +@@ -15,6 +15,8 @@ + #include + #include + #include ++#include ++#include + + #include + #include +@@ -35,6 +37,8 @@ static int apidev_major; + */ + struct kmem_cache *srb_cachep; + ++struct trace_array *qla_trc_array; ++ + int ql2xfulldump_on_mpifail; + module_param(ql2xfulldump_on_mpifail, int, S_IRUGO | S_IWUSR); + MODULE_PARM_DESC(ql2xfulldump_on_mpifail, +@@ -117,6 +121,11 @@ MODULE_PARM_DESC(ql2xextended_error_logging, + "ql2xextended_error_logging=1).\n" + "\t\tDo LOGICAL OR of the value to enable more than one level"); + ++int ql2xextended_error_logging_ktrace = 1; ++module_param(ql2xextended_error_logging_ktrace, int, S_IRUGO|S_IWUSR); ++MODULE_PARM_DESC(ql2xextended_error_logging_ktrace, ++ "Same BIT definiton as ql2xextended_error_logging, but used to control logging to kernel trace buffer (default=1).\n"); ++ + int ql2xshiftctondsd = 6; + module_param(ql2xshiftctondsd, int, S_IRUGO); + MODULE_PARM_DESC(ql2xshiftctondsd, +@@ -2839,6 +2848,27 @@ static void qla2x00_iocb_work_fn(struct work_struct *work) + spin_unlock_irqrestore(&vha->work_lock, flags); + } + ++static void ++qla_trace_init(void) ++{ ++ qla_trc_array = trace_array_get_by_name("qla2xxx"); ++ if (!qla_trc_array) { ++ ql_log(ql_log_fatal, NULL, 0x0001, ++ "Unable to create qla2xxx trace instance, instance logging will be disabled.\n"); ++ return; ++ } ++ ++ QLA_TRACE_ENABLE(qla_trc_array); ++} ++ ++static void ++qla_trace_uninit(void) ++{ ++ if (!qla_trc_array) ++ return; ++ trace_array_put(qla_trc_array); ++} ++ + /* + * PCI driver interface + */ +@@ -8181,6 +8211,8 @@ qla2x00_module_init(void) + BUILD_BUG_ON(sizeof(sw_info_t) != 32); + BUILD_BUG_ON(sizeof(target_id_t) != 2); + ++ qla_trace_init(); ++ + /* Allocate cache for SRBs. */ + srb_cachep = kmem_cache_create("qla2xxx_srbs", sizeof(srb_t), 0, + SLAB_HWCACHE_ALIGN, NULL); +@@ -8259,6 +8291,8 @@ qla2x00_module_init(void) + + destroy_cache: + kmem_cache_destroy(srb_cachep); ++ ++ qla_trace_uninit(); + return ret; + } + +@@ -8277,6 +8311,7 @@ qla2x00_module_exit(void) + fc_release_transport(qla2xxx_transport_template); + qlt_exit(); + kmem_cache_destroy(srb_cachep); ++ qla_trace_uninit(); + } + + module_init(qla2x00_module_init); +-- +2.35.1 + diff --git a/queue-6.0/series b/queue-6.0/series new file mode 100644 index 00000000000..0bafa0a7971 --- /dev/null +++ b/queue-6.0/series @@ -0,0 +1,5 @@ +usb-dwc3-gadget-force-sending-delayed-status-during-.patch +usb-dwc3-gadget-don-t-delay-end-transfer-on-delayed_.patch +scsi-qla2xxx-enhance-driver-tracing-with-separate-tu.patch +scsi-qla2xxx-define-static-symbols.patch +drm-i915-gvt-add-missing-vfio_unregister_group_dev-c.patch diff --git a/queue-6.0/usb-dwc3-gadget-don-t-delay-end-transfer-on-delayed_.patch b/queue-6.0/usb-dwc3-gadget-don-t-delay-end-transfer-on-delayed_.patch new file mode 100644 index 00000000000..0a30ca3a71f --- /dev/null +++ b/queue-6.0/usb-dwc3-gadget-don-t-delay-end-transfer-on-delayed_.patch @@ -0,0 +1,44 @@ +From e95380a1117c49f11285c85c1e387ead62ff9f30 Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Tue, 18 Oct 2022 19:39:01 -0700 +Subject: usb: dwc3: gadget: Don't delay End Transfer on delayed_status + +From: Thinh Nguyen + +commit 4db0fbb601361767144e712beb96704b966339f5 upstream. + +The gadget driver may wait on the request completion when it sets the +USB_GADGET_DELAYED_STATUS. Make sure that the End Transfer command can +go through if the dwc->delayed_status is set so that the request can +complete. When the delayed_status is set, the Setup packet is already +processed, and the next phase should be either Data or Status. It's +unlikely that the host would cancel the control transfer and send a new +Setup packet during End Transfer command. But if that's the case, we can +try again when ep0state returns to EP0_SETUP_PHASE. + +Fixes: e1ee843488d5 ("usb: dwc3: gadget: Force sending delayed status during soft disconnect") +Cc: stable@vger.kernel.org +Signed-off-by: Thinh Nguyen +Link: https://lore.kernel.org/r/3f9f59e5d74efcbaee444cf4b30ef639cc7b124e.1666146954.git.Thinh.Nguyen@synopsys.com +Signed-off-by: Greg Kroah-Hartman +Signed-off-by: Sasha Levin +--- + drivers/usb/dwc3/gadget.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c +index 530ef3232418..0ed9826a4c47 100644 +--- a/drivers/usb/dwc3/gadget.c ++++ b/drivers/usb/dwc3/gadget.c +@@ -3712,7 +3712,7 @@ void dwc3_stop_active_transfer(struct dwc3_ep *dep, bool force, + * timeout. Delay issuing the End Transfer command until the Setup TRB is + * prepared. + */ +- if (dwc->ep0state != EP0_SETUP_PHASE) { ++ if (dwc->ep0state != EP0_SETUP_PHASE && !dwc->delayed_status) { + dep->flags |= DWC3_EP_DELAY_STOP; + return; + } +-- +2.35.1 + diff --git a/queue-6.0/usb-dwc3-gadget-force-sending-delayed-status-during-.patch b/queue-6.0/usb-dwc3-gadget-force-sending-delayed-status-during-.patch new file mode 100644 index 00000000000..728ce2c6708 --- /dev/null +++ b/queue-6.0/usb-dwc3-gadget-force-sending-delayed-status-during-.patch @@ -0,0 +1,45 @@ +From 1b6d02428877ef89250a58c61c458363226898eb Mon Sep 17 00:00:00 2001 +From: Sasha Levin +Date: Wed, 17 Aug 2022 11:23:52 -0700 +Subject: usb: dwc3: gadget: Force sending delayed status during soft + disconnect + +From: Wesley Cheng + +commit e1ee843488d58099a89979627ef85d5bd6c5cacd upstream. + +If any function drivers request for a delayed status phase, this leads to a +SETUP transfer timeout error, since the function may take longer to process +the DATA stage. This eventually results in end transfer timeouts, as there +is a pending SETUP transaction. + +In addition, allow the DWC3_EP_DELAY_STOP to be set for if there is a +delayed status requested. Ocasionally, a host may abort the current SETUP +transaction, by issuing a subsequent SETUP token. In those situations, it +would result in an endxfer timeout as well. + +Reviewed-by: Thinh Nguyen +Signed-off-by: Wesley Cheng +Link: https://lore.kernel.org/r/20220817182359.13550-3-quic_wcheng@quicinc.com +Signed-off-by: Greg Kroah-Hartman +Signed-off-by: Sasha Levin +--- + drivers/usb/dwc3/gadget.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c +index 0ed9826a4c47..530ef3232418 100644 +--- a/drivers/usb/dwc3/gadget.c ++++ b/drivers/usb/dwc3/gadget.c +@@ -3712,7 +3712,7 @@ void dwc3_stop_active_transfer(struct dwc3_ep *dep, bool force, + * timeout. Delay issuing the End Transfer command until the Setup TRB is + * prepared. + */ +- if (dwc->ep0state != EP0_SETUP_PHASE && !dwc->delayed_status) { ++ if (dwc->ep0state != EP0_SETUP_PHASE) { + dep->flags |= DWC3_EP_DELAY_STOP; + return; + } +-- +2.35.1 +