Re: [PATCH] xhci: dbc: Fix STALL transfer event handling

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



[ Sasha's backport helper bot ]

Hi,

The upstream commit SHA1 provided is correct: 9044ad57b60b0556d42b6f8aa218a68865e810a4


Status in newer kernel trees:
6.12.y | Present (exact SHA1)

Note: The patch differs from the upstream commit:
---
--- -	2024-11-22 11:40:04.900767226 -0500
+++ /tmp/tmp.eypkTL84u1	2024-11-22 11:40:04.892785429 -0500
@@ -28,18 +28,16 @@
 Closes: https://lore.kernel.org/linux-usb/20240725074857.623299-1-ukaszb@xxxxxxxxxxxx/
 Tested-by: Łukasz Bartosik <ukaszb@xxxxxxxxxxxx>
 Signed-off-by: Mathias Nyman <mathias.nyman@xxxxxxxxxxxxxxx>
-Link: https://lore.kernel.org/r/20240905143300.1959279-2-mathias.nyman@xxxxxxxxxxxxxxx
-Signed-off-by: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx>
 ---
- drivers/usb/host/xhci-dbgcap.c | 133 ++++++++++++++++++++-------------
+ drivers/usb/host/xhci-dbgcap.c | 132 ++++++++++++++++++++-------------
  drivers/usb/host/xhci-dbgcap.h |   2 +-
- 2 files changed, 83 insertions(+), 52 deletions(-)
+ 2 files changed, 83 insertions(+), 51 deletions(-)
 
 diff --git a/drivers/usb/host/xhci-dbgcap.c b/drivers/usb/host/xhci-dbgcap.c
-index 161c09953c4e0..241d7aa1fbc20 100644
+index b40d9238d447..69067015f0d5 100644
 --- a/drivers/usb/host/xhci-dbgcap.c
 +++ b/drivers/usb/host/xhci-dbgcap.c
-@@ -173,16 +173,18 @@ static void xhci_dbc_giveback(struct dbc_request *req, int status)
+@@ -158,16 +158,18 @@ static void xhci_dbc_giveback(struct dbc_request *req, int status)
  	spin_lock(&dbc->lock);
  }
  
@@ -61,7 +59,7 @@
  	xhci_dbc_giveback(req, -ESHUTDOWN);
  }
  
-@@ -649,7 +651,6 @@ static void xhci_dbc_stop(struct xhci_dbc *dbc)
+@@ -637,7 +639,6 @@ static void xhci_dbc_stop(struct xhci_dbc *dbc)
  	case DS_DISABLED:
  		return;
  	case DS_CONFIGURED:
@@ -69,8 +67,8 @@
  		if (dbc->driver->disconnect)
  			dbc->driver->disconnect(dbc);
  		break;
-@@ -669,6 +670,23 @@ static void xhci_dbc_stop(struct xhci_dbc *dbc)
- 	pm_runtime_put_sync(dbc->dev); /* note, was self.controller */
+@@ -657,6 +658,23 @@ static void xhci_dbc_stop(struct xhci_dbc *dbc)
+ 	}
  }
  
 +static void
@@ -93,7 +91,7 @@
  static void
  dbc_handle_port_status(struct xhci_dbc *dbc, union xhci_trb *event)
  {
-@@ -697,6 +715,7 @@ static void dbc_handle_xfer_event(struct xhci_dbc *dbc, union xhci_trb *event)
+@@ -685,6 +703,7 @@ static void dbc_handle_xfer_event(struct xhci_dbc *dbc, union xhci_trb *event)
  	struct xhci_ring	*ring;
  	int			ep_id;
  	int			status;
@@ -101,7 +99,7 @@
  	u32			comp_code;
  	size_t			remain_length;
  	struct dbc_request	*req = NULL, *r;
-@@ -706,8 +725,30 @@ static void dbc_handle_xfer_event(struct xhci_dbc *dbc, union xhci_trb *event)
+@@ -694,8 +713,30 @@ static void dbc_handle_xfer_event(struct xhci_dbc *dbc, union xhci_trb *event)
  	ep_id		= TRB_TO_EP_ID(le32_to_cpu(event->generic.field[3]));
  	dep		= (ep_id == EPID_OUT) ?
  				get_out_ep(dbc) : get_in_ep(dbc);
@@ -132,7 +130,7 @@
  	switch (comp_code) {
  	case COMP_SUCCESS:
  		remain_length = 0;
-@@ -718,31 +759,49 @@ static void dbc_handle_xfer_event(struct xhci_dbc *dbc, union xhci_trb *event)
+@@ -706,31 +747,49 @@ static void dbc_handle_xfer_event(struct xhci_dbc *dbc, union xhci_trb *event)
  	case COMP_TRB_ERROR:
  	case COMP_BABBLE_DETECTED_ERROR:
  	case COMP_USB_TRANSACTION_ERROR:
@@ -198,7 +196,7 @@
  	ring->num_trbs_free++;
  	req->actual = req->length - remain_length;
  	xhci_dbc_giveback(req, status);
-@@ -762,7 +821,6 @@ static void inc_evt_deq(struct xhci_ring *ring)
+@@ -750,7 +809,6 @@ static void inc_evt_deq(struct xhci_ring *ring)
  static enum evtreturn xhci_dbc_do_handle_events(struct xhci_dbc *dbc)
  {
  	dma_addr_t		deq;
@@ -206,7 +204,7 @@
  	union xhci_trb		*evt;
  	u32			ctrl, portsc;
  	bool			update_erdp = false;
-@@ -814,43 +872,17 @@ static enum evtreturn xhci_dbc_do_handle_events(struct xhci_dbc *dbc)
+@@ -802,43 +860,17 @@ static enum evtreturn xhci_dbc_do_handle_events(struct xhci_dbc *dbc)
  			return EVT_DISC;
  		}
  
@@ -253,16 +251,8 @@
  	default:
  		dev_err(dbc->dev, "Unknown DbC state %d\n", dbc->state);
  		break;
-@@ -939,7 +971,6 @@ static const char * const dbc_state_strings[DS_MAX] = {
- 	[DS_ENABLED] = "enabled",
- 	[DS_CONNECTED] = "connected",
- 	[DS_CONFIGURED] = "configured",
--	[DS_STALLED] = "stalled",
- };
- 
- static ssize_t dbc_show(struct device *dev,
 diff --git a/drivers/usb/host/xhci-dbgcap.h b/drivers/usb/host/xhci-dbgcap.h
-index 0118c6288a3cc..97c5dc290138b 100644
+index 76170d7a7e7c..2de0dc49a3e9 100644
 --- a/drivers/usb/host/xhci-dbgcap.h
 +++ b/drivers/usb/host/xhci-dbgcap.h
 @@ -81,7 +81,6 @@ enum dbc_state {
@@ -270,10 +260,10 @@
  	DS_CONNECTED,
  	DS_CONFIGURED,
 -	DS_STALLED,
- 	DS_MAX
  };
  
-@@ -90,6 +89,7 @@ struct dbc_ep {
+ struct dbc_ep {
+@@ -89,6 +88,7 @@ struct dbc_ep {
  	struct list_head		list_pending;
  	struct xhci_ring		*ring;
  	unsigned int			direction:1;
@@ -281,3 +271,6 @@
  };
  
  #define DBC_QUEUE_SIZE			16
+-- 
+2.25.1
+
---

Results of testing on various branches:

| Branch                    | Patch Apply | Build Test |
|---------------------------|-------------|------------|
| stable/linux-6.12.y       |  Failed     |  N/A       |
| stable/linux-6.11.y       |  Failed     |  N/A       |
| stable/linux-6.6.y        |  Success    |  Failed    |
| stable/linux-6.1.y        |  Success    |  Failed    |
| stable/linux-5.15.y       |  Success    |  Failed    |
| stable/linux-5.10.y       |  Success    |  Failed    |
| stable/linux-5.4.y        |  Failed     |  N/A       |
| stable/linux-4.19.y       |  Failed     |  N/A       |

Build Errors:
Build error for stable/linux-6.6.y:
    lib/test_dhry.o: warning: objtool: dhry() falls through to next function dhry_run_set.cold()
    drivers/usb/host/xhci-dbgcap.c: In function 'dbc_show':
    drivers/usb/host/xhci-dbgcap.c:976:14: error: 'DS_STALLED' undeclared (first use in this function); did you mean 'DS_ENABLED'?
      976 |         case DS_STALLED:
          |              ^~~~~~~~~~
          |              DS_ENABLED
    drivers/usb/host/xhci-dbgcap.c:976:14: note: each undeclared identifier is reported only once for each function it appears in
    make[5]: *** [scripts/Makefile.build:243: drivers/usb/host/xhci-dbgcap.o] Error 1
    make[5]: Target 'drivers/usb/host/' not remade because of errors.
    make[4]: *** [scripts/Makefile.build:480: drivers/usb/host] Error 2
    make[4]: Target 'drivers/usb/' not remade because of errors.
    make[3]: *** [scripts/Makefile.build:480: drivers/usb] Error 2
    make[3]: Target 'drivers/' not remade because of errors.
    make[2]: *** [scripts/Makefile.build:480: drivers] Error 2
    make[2]: Target './' not remade because of errors.
    make[1]: *** [/home/sasha/build/linus-next/Makefile:1921: .] Error 2
    make[1]: Target '__all' not remade because of errors.
    make: *** [Makefile:234: __sub-make] Error 2
    make: Target '__all' not remade because of errors.

Build error for stable/linux-6.1.y:
    drivers/usb/host/xhci-dbgcap.c: In function 'dbc_show':
    drivers/usb/host/xhci-dbgcap.c:976:14: error: 'DS_STALLED' undeclared (first use in this function); did you mean 'DS_ENABLED'?
      976 |         case DS_STALLED:
          |              ^~~~~~~~~~
          |              DS_ENABLED
    drivers/usb/host/xhci-dbgcap.c:976:14: note: each undeclared identifier is reported only once for each function it appears in
    make[4]: *** [scripts/Makefile.build:250: drivers/usb/host/xhci-dbgcap.o] Error 1
    make[4]: Target 'drivers/usb/host/' not remade because of errors.
    make[3]: *** [scripts/Makefile.build:503: drivers/usb/host] Error 2
    make[3]: Target 'drivers/usb/' not remade because of errors.
    make[2]: *** [scripts/Makefile.build:503: drivers/usb] Error 2
    make[2]: Target 'drivers/' not remade because of errors.
    make[1]: *** [scripts/Makefile.build:503: drivers] Error 2
    make[1]: Target './' not remade because of errors.
    make: *** [Makefile:2009: .] Error 2
    make: Target '__all' not remade because of errors.

Build error for stable/linux-5.15.y:
    drivers/usb/host/xhci-dbgcap.c: In function 'dbc_show':
    drivers/usb/host/xhci-dbgcap.c:976:14: error: 'DS_STALLED' undeclared (first use in this function); did you mean 'DS_ENABLED'?
      976 |         case DS_STALLED:
          |              ^~~~~~~~~~
          |              DS_ENABLED
    drivers/usb/host/xhci-dbgcap.c:976:14: note: each undeclared identifier is reported only once for each function it appears in
    make[3]: *** [scripts/Makefile.build:289: drivers/usb/host/xhci-dbgcap.o] Error 1
    make[3]: Target '__build' not remade because of errors.
    make[2]: *** [scripts/Makefile.build:552: drivers/usb/host] Error 2
    make[2]: Target '__build' not remade because of errors.
    make[1]: *** [scripts/Makefile.build:552: drivers/usb] Error 2
    make[1]: Target '__build' not remade because of errors.
    make: *** [Makefile:1906: drivers] Error 2
    make: Target '__all' not remade because of errors.

Build error for stable/linux-5.10.y:
    In file included from ./include/linux/kernel.h:15,
                     from ./include/linux/list.h:9,
                     from ./include/linux/kobject.h:19,
                     from ./include/linux/of.h:17,
                     from ./include/linux/clk-provider.h:9,
                     from drivers/clk/qcom/clk-rpmh.c:6:
    drivers/clk/qcom/clk-rpmh.c: In function 'clk_rpmh_bcm_send_cmd':
    ./include/linux/minmax.h:20:35: warning: comparison of distinct pointer types lacks a cast [-Wcompare-distinct-pointer-types]
       20 |         (!!(sizeof((typeof(x) *)1 == (typeof(y) *)1)))
          |                                   ^~
    ./include/linux/minmax.h:26:18: note: in expansion of macro '__typecheck'
       26 |                 (__typecheck(x, y) && __no_side_effects(x, y))
          |                  ^~~~~~~~~~~
    ./include/linux/minmax.h:36:31: note: in expansion of macro '__safe_cmp'
       36 |         __builtin_choose_expr(__safe_cmp(x, y), \
          |                               ^~~~~~~~~~
    ./include/linux/minmax.h:45:25: note: in expansion of macro '__careful_cmp'
       45 | #define min(x, y)       __careful_cmp(x, y, <)
          |                         ^~~~~~~~~~~~~
    drivers/clk/qcom/clk-rpmh.c:273:21: note: in expansion of macro 'min'
      273 |         cmd_state = min(cmd_state, BCM_TCS_CMD_VOTE_MASK);
          |                     ^~~
    In file included from ./include/linux/mm.h:30,
                     from ./include/linux/pagemap.h:8,
                     from ./include/linux/buffer_head.h:14,
                     from fs/udf/udfdecl.h:12,
                     from fs/udf/super.c:41:
    fs/udf/super.c: In function 'udf_fill_partdesc_info':
    ./include/linux/overflow.h:70:22: warning: comparison of distinct pointer types lacks a cast [-Wcompare-distinct-pointer-types]
       70 |         (void) (&__a == &__b);                  \
          |                      ^~
    fs/udf/super.c:1155:21: note: in expansion of macro 'check_add_overflow'
     1155 |                 if (check_add_overflow(map->s_partition_len,
          |                     ^~~~~~~~~~~~~~~~~~
    drivers/usb/host/xhci-dbgcap.c: In function 'dbc_show':
    drivers/usb/host/xhci-dbgcap.c:1029:14: error: 'DS_STALLED' undeclared (first use in this function); did you mean 'DS_ENABLED'?
     1029 |         case DS_STALLED:
          |              ^~~~~~~~~~
          |              DS_ENABLED
    drivers/usb/host/xhci-dbgcap.c:1029:14: note: each undeclared identifier is reported only once for each function it appears in
    make[3]: *** [scripts/Makefile.build:286: drivers/usb/host/xhci-dbgcap.o] Error 1
    make[3]: Target '__build' not remade because of errors.
    make[2]: *** [scripts/Makefile.build:503: drivers/usb/host] Error 2
    make[2]: Target '__build' not remade because of errors.
    make[1]: *** [scripts/Makefile.build:503: drivers/usb] Error 2
    make[1]: Target '__build' not remade because of errors.
    make: *** [Makefile:1832: drivers] Error 2
    make: Target '__all' not remade because of errors.




[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux