All of lore.kernel.org
 help / color / mirror / Atom feed
* [android-common:android15-6.6 28/33] drivers/usb/host/xhci-ring.c:2751:27-34: ERROR: ep_ring is NULL but dereferenced.
@ 2024-10-25 21:58 kernel test robot
  0 siblings, 0 replies; 2+ messages in thread
From: kernel test robot @ 2024-10-25 21:58 UTC (permalink / raw)
  To: oe-kbuild; +Cc: lkp, Julia Lawall

BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
TO: cros-kernel-buildreports@googlegroups.com

tree:   https://android.googlesource.com/kernel/common android15-6.6
head:   c133cb65f0527b861e88dbc4bc1bc271b3f16a8a
commit: b7a1562e2e151612ea31c7ebbb4478a1fe01c064 [28/33] UPSTREAM: xhci: simplify event ring dequeue tracking for transfer events
:::::: branch date: 4 hours ago
:::::: commit date: 9 months ago
config: arm-randconfig-r063-20241025 (https://download.01.org/0day-ci/archive/20241026/202410260519.PidYSJR8-lkp@intel.com/config)
compiler: arm-linux-gnueabi-gcc (GCC) 14.1.0

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Julia Lawall <julia.lawall@inria.fr>
| Closes: https://lore.kernel.org/r/202410260519.PidYSJR8-lkp@intel.com/

cocci warnings: (new ones prefixed by >>)
>> drivers/usb/host/xhci-ring.c:2751:27-34: ERROR: ep_ring is NULL but dereferenced.

vim +2751 drivers/usb/host/xhci-ring.c

22405ed2e1bd8d Andiry Xu        2010-07-22  2535  
d0e96f5a71a032 Sarah Sharp      2009-04-27  2536  /*
d0e96f5a71a032 Sarah Sharp      2009-04-27  2537   * If this function returns an error condition, it means it got a Transfer
d0e96f5a71a032 Sarah Sharp      2009-04-27  2538   * event with a corrupted Slot ID, Endpoint ID, or TRB DMA address.
d0e96f5a71a032 Sarah Sharp      2009-04-27  2539   * At this point, the host controller is probably hosed and should be reset.
d0e96f5a71a032 Sarah Sharp      2009-04-27  2540   */
d0e96f5a71a032 Sarah Sharp      2009-04-27  2541  static int handle_tx_event(struct xhci_hcd *xhci,
b17a57f89f6906 Mathias Nyman    2023-02-02  2542  			   struct xhci_interrupter *ir,
d0e96f5a71a032 Sarah Sharp      2009-04-27  2543  			   struct xhci_transfer_event *event)
d0e96f5a71a032 Sarah Sharp      2009-04-27  2544  {
63a0d9abd18cdc Sarah Sharp      2009-09-04  2545  	struct xhci_virt_ep *ep;
d0e96f5a71a032 Sarah Sharp      2009-04-27  2546  	struct xhci_ring *ep_ring;
82d1009f537c2a Sarah Sharp      2009-08-07  2547  	unsigned int slot_id;
d0e96f5a71a032 Sarah Sharp      2009-04-27  2548  	int ep_index;
326b4810cc9952 Randy Dunlap     2010-04-19  2549  	struct xhci_td *td = NULL;
f97c08ae329bcf Mathias Nyman    2016-11-11  2550  	dma_addr_t ep_trb_dma;
f97c08ae329bcf Mathias Nyman    2016-11-11  2551  	struct xhci_segment *ep_seg;
f97c08ae329bcf Mathias Nyman    2016-11-11  2552  	union xhci_trb *ep_trb;
d0e96f5a71a032 Sarah Sharp      2009-04-27  2553  	int status = -EINPROGRESS;
d115b04818e57b John Youn        2009-07-27  2554  	struct xhci_ep_ctx *ep_ctx;
66d1eebce5cca9 Sarah Sharp      2009-08-27  2555  	u32 trb_comp_code;
c2d7b49f42f50d Andiry Xu        2011-09-19  2556  	int td_num = 0;
3b4739b8951d65 Mathias Nyman    2015-10-12  2557  	bool handling_skipped_tds = false;
d0e96f5a71a032 Sarah Sharp      2009-04-27  2558  
28ccd2962c6655 Matt Evans       2011-03-29  2559  	slot_id = TRB_TO_SLOT_ID(le32_to_cpu(event->flags));
b3368382efe6e9 Mathias Nyman    2017-06-15  2560  	ep_index = TRB_TO_EP_ID(le32_to_cpu(event->flags)) - 1;
b3368382efe6e9 Mathias Nyman    2017-06-15  2561  	trb_comp_code = GET_COMP_CODE(le32_to_cpu(event->transfer_len));
b3368382efe6e9 Mathias Nyman    2017-06-15  2562  	ep_trb_dma = le64_to_cpu(event->buffer);
b3368382efe6e9 Mathias Nyman    2017-06-15  2563  
b1adc42d440df3 Mathias Nyman    2021-01-29  2564  	ep = xhci_get_virt_ep(xhci, slot_id, ep_index);
b1adc42d440df3 Mathias Nyman    2021-01-29  2565  	if (!ep) {
b1adc42d440df3 Mathias Nyman    2021-01-29  2566  		xhci_err(xhci, "ERROR Invalid Transfer event\n");
b3368382efe6e9 Mathias Nyman    2017-06-15  2567  		goto err_out;
d0e96f5a71a032 Sarah Sharp      2009-04-27  2568  	}
d0e96f5a71a032 Sarah Sharp      2009-04-27  2569  
b3368382efe6e9 Mathias Nyman    2017-06-15  2570  	ep_ring = xhci_dma_to_transfer_ring(ep, ep_trb_dma);
b1adc42d440df3 Mathias Nyman    2021-01-29  2571  	ep_ctx = xhci_get_ep_ctx(xhci, ep->vdev->out_ctx, ep_index);
b3368382efe6e9 Mathias Nyman    2017-06-15  2572  
ade2e3a148a174 Mathias Nyman    2017-06-15  2573  	if (GET_EP_CTX_STATE(ep_ctx) == EP_STATE_DISABLED) {
b7f769ae1b1260 Zhengjun Xing    2017-04-07  2574  		xhci_err(xhci,
ade2e3a148a174 Mathias Nyman    2017-06-15  2575  			 "ERROR Transfer event for disabled endpoint slot %u ep %u\n",
b7f769ae1b1260 Zhengjun Xing    2017-04-07  2576  			  slot_id, ep_index);
b3368382efe6e9 Mathias Nyman    2017-06-15  2577  		goto err_out;
d0e96f5a71a032 Sarah Sharp      2009-04-27  2578  	}
d0e96f5a71a032 Sarah Sharp      2009-04-27  2579  
ade2e3a148a174 Mathias Nyman    2017-06-15  2580  	/* Some transfer events don't always point to a trb, see xhci 4.17.4 */
ade2e3a148a174 Mathias Nyman    2017-06-15  2581  	if (!ep_ring) {
ade2e3a148a174 Mathias Nyman    2017-06-15  2582  		switch (trb_comp_code) {
ade2e3a148a174 Mathias Nyman    2017-06-15  2583  		case COMP_STALL_ERROR:
ade2e3a148a174 Mathias Nyman    2017-06-15  2584  		case COMP_USB_TRANSACTION_ERROR:
ade2e3a148a174 Mathias Nyman    2017-06-15  2585  		case COMP_INVALID_STREAM_TYPE_ERROR:
ade2e3a148a174 Mathias Nyman    2017-06-15  2586  		case COMP_INVALID_STREAM_ID_ERROR:
a1575120972ecd Mathias Nyman    2022-11-30  2587  			xhci_dbg(xhci, "Stream transaction error ep %u no id\n",
a1575120972ecd Mathias Nyman    2022-11-30  2588  				 ep_index);
a1575120972ecd Mathias Nyman    2022-11-30  2589  			if (ep->err_count++ > MAX_SOFT_RETRY)
7428a253315cef Mathias Nyman    2022-11-30  2590  				xhci_handle_halted_endpoint(xhci, ep, NULL,
a1575120972ecd Mathias Nyman    2022-11-30  2591  							    EP_HARD_RESET);
a1575120972ecd Mathias Nyman    2022-11-30  2592  			else
7428a253315cef Mathias Nyman    2022-11-30  2593  				xhci_handle_halted_endpoint(xhci, ep, NULL,
d70f4231b81eeb Mathias Nyman    2021-01-29  2594  							    EP_SOFT_RESET);
ade2e3a148a174 Mathias Nyman    2017-06-15  2595  			goto cleanup;
ade2e3a148a174 Mathias Nyman    2017-06-15  2596  		case COMP_RING_UNDERRUN:
ade2e3a148a174 Mathias Nyman    2017-06-15  2597  		case COMP_RING_OVERRUN:
d9193efba84fe4 Sandeep Singh    2018-11-09  2598  		case COMP_STOPPED_LENGTH_INVALID:
ade2e3a148a174 Mathias Nyman    2017-06-15  2599  			goto cleanup;
ade2e3a148a174 Mathias Nyman    2017-06-15  2600  		default:
ade2e3a148a174 Mathias Nyman    2017-06-15  2601  			xhci_err(xhci, "ERROR Transfer event for unknown stream ring slot %u ep %u\n",
ade2e3a148a174 Mathias Nyman    2017-06-15  2602  				 slot_id, ep_index);
ade2e3a148a174 Mathias Nyman    2017-06-15  2603  			goto err_out;
ade2e3a148a174 Mathias Nyman    2017-06-15  2604  		}
ade2e3a148a174 Mathias Nyman    2017-06-15  2605  	}
ade2e3a148a174 Mathias Nyman    2017-06-15  2606  
c2d7b49f42f50d Andiry Xu        2011-09-19  2607  	/* Count current td numbers if ep->skip is set */
5220cb493bf418 Andy Shevchenko  2022-11-30  2608  	if (ep->skip)
5220cb493bf418 Andy Shevchenko  2022-11-30  2609  		td_num += list_count_nodes(&ep_ring->td_list);
c2d7b49f42f50d Andiry Xu        2011-09-19  2610  
986a92d44810ca Andiry Xu        2010-07-22  2611  	/* Look for common error cases */
66d1eebce5cca9 Sarah Sharp      2009-08-27  2612  	switch (trb_comp_code) {
b10de142119a67 Sarah Sharp      2009-04-27  2613  	/* Skip codes that require special handling depending on
b10de142119a67 Sarah Sharp      2009-04-27  2614  	 * transfer type
b10de142119a67 Sarah Sharp      2009-04-27  2615  	 */
b10de142119a67 Sarah Sharp      2009-04-27  2616  	case COMP_SUCCESS:
1c11a172cb3049 Vivek Gautam     2013-03-21  2617  		if (EVENT_TRB_LEN(le32_to_cpu(event->transfer_len)) == 0)
1530bbc6272d9d Sarah Sharp      2012-05-08  2618  			break;
7ff11162808cc2 Mathias Nyman    2019-12-11  2619  		if (xhci->quirks & XHCI_TRUST_TX_LENGTH ||
7ff11162808cc2 Mathias Nyman    2019-12-11  2620  		    ep_ring->last_td_was_short)
0b7c105a04ca79 Felipe Balbi     2017-01-23  2621  			trb_comp_code = COMP_SHORT_PACKET;
1530bbc6272d9d Sarah Sharp      2012-05-08  2622  		else
8202ce2e292194 Sarah Sharp      2012-07-25  2623  			xhci_warn_ratelimited(xhci,
b7f769ae1b1260 Zhengjun Xing    2017-04-07  2624  					      "WARN Successful completion on short TX for slot %u ep %u: needs XHCI_TRUST_TX_LENGTH quirk?\n",
b7f769ae1b1260 Zhengjun Xing    2017-04-07  2625  					      slot_id, ep_index);
1d6903a617a221 Nick Desaulniers 2020-11-10  2626  		break;
0b7c105a04ca79 Felipe Balbi     2017-01-23  2627  	case COMP_SHORT_PACKET:
b10de142119a67 Sarah Sharp      2009-04-27  2628  		break;
b3368382efe6e9 Mathias Nyman    2017-06-15  2629  	/* Completion codes for endpoint stopped state */
0b7c105a04ca79 Felipe Balbi     2017-01-23  2630  	case COMP_STOPPED:
b7f769ae1b1260 Zhengjun Xing    2017-04-07  2631  		xhci_dbg(xhci, "Stopped on Transfer TRB for slot %u ep %u\n",
b7f769ae1b1260 Zhengjun Xing    2017-04-07  2632  			 slot_id, ep_index);
ae636747146ea9 Sarah Sharp      2009-04-29  2633  		break;
0b7c105a04ca79 Felipe Balbi     2017-01-23  2634  	case COMP_STOPPED_LENGTH_INVALID:
b7f769ae1b1260 Zhengjun Xing    2017-04-07  2635  		xhci_dbg(xhci,
b7f769ae1b1260 Zhengjun Xing    2017-04-07  2636  			 "Stopped on No-op or Link TRB for slot %u ep %u\n",
b7f769ae1b1260 Zhengjun Xing    2017-04-07  2637  			 slot_id, ep_index);
ae636747146ea9 Sarah Sharp      2009-04-29  2638  		break;
0b7c105a04ca79 Felipe Balbi     2017-01-23  2639  	case COMP_STOPPED_SHORT_PACKET:
b7f769ae1b1260 Zhengjun Xing    2017-04-07  2640  		xhci_dbg(xhci,
b7f769ae1b1260 Zhengjun Xing    2017-04-07  2641  			 "Stopped with short packet transfer detected for slot %u ep %u\n",
b7f769ae1b1260 Zhengjun Xing    2017-04-07  2642  			 slot_id, ep_index);
40a3b775f49c27 Lu Baolu         2015-08-06  2643  		break;
b3368382efe6e9 Mathias Nyman    2017-06-15  2644  	/* Completion codes for endpoint halted state */
0b7c105a04ca79 Felipe Balbi     2017-01-23  2645  	case COMP_STALL_ERROR:
b7f769ae1b1260 Zhengjun Xing    2017-04-07  2646  		xhci_dbg(xhci, "Stalled endpoint for slot %u ep %u\n", slot_id,
b7f769ae1b1260 Zhengjun Xing    2017-04-07  2647  			 ep_index);
b10de142119a67 Sarah Sharp      2009-04-27  2648  		status = -EPIPE;
b10de142119a67 Sarah Sharp      2009-04-27  2649  		break;
0b7c105a04ca79 Felipe Balbi     2017-01-23  2650  	case COMP_SPLIT_TRANSACTION_ERROR:
76eac5d21a7164 Mathias Nyman    2020-03-12  2651  		xhci_dbg(xhci, "Split transaction error for slot %u ep %u\n",
76eac5d21a7164 Mathias Nyman    2020-03-12  2652  			 slot_id, ep_index);
76eac5d21a7164 Mathias Nyman    2020-03-12  2653  		status = -EPROTO;
76eac5d21a7164 Mathias Nyman    2020-03-12  2654  		break;
0b7c105a04ca79 Felipe Balbi     2017-01-23  2655  	case COMP_USB_TRANSACTION_ERROR:
b7f769ae1b1260 Zhengjun Xing    2017-04-07  2656  		xhci_dbg(xhci, "Transfer error for slot %u ep %u on endpoint\n",
b7f769ae1b1260 Zhengjun Xing    2017-04-07  2657  			 slot_id, ep_index);
b10de142119a67 Sarah Sharp      2009-04-27  2658  		status = -EPROTO;
b10de142119a67 Sarah Sharp      2009-04-27  2659  		break;
0b7c105a04ca79 Felipe Balbi     2017-01-23  2660  	case COMP_BABBLE_DETECTED_ERROR:
b7f769ae1b1260 Zhengjun Xing    2017-04-07  2661  		xhci_dbg(xhci, "Babble error for slot %u ep %u on endpoint\n",
b7f769ae1b1260 Zhengjun Xing    2017-04-07  2662  			 slot_id, ep_index);
4a73143ced4678 Sarah Sharp      2009-07-27  2663  		status = -EOVERFLOW;
4a73143ced4678 Sarah Sharp      2009-07-27  2664  		break;
b3368382efe6e9 Mathias Nyman    2017-06-15  2665  	/* Completion codes for endpoint error state */
b3368382efe6e9 Mathias Nyman    2017-06-15  2666  	case COMP_TRB_ERROR:
b3368382efe6e9 Mathias Nyman    2017-06-15  2667  		xhci_warn(xhci,
b3368382efe6e9 Mathias Nyman    2017-06-15  2668  			  "WARN: TRB error for slot %u ep %u on endpoint\n",
b3368382efe6e9 Mathias Nyman    2017-06-15  2669  			  slot_id, ep_index);
b3368382efe6e9 Mathias Nyman    2017-06-15  2670  		status = -EILSEQ;
b3368382efe6e9 Mathias Nyman    2017-06-15  2671  		break;
b3368382efe6e9 Mathias Nyman    2017-06-15  2672  	/* completion codes not indicating endpoint state change */
0b7c105a04ca79 Felipe Balbi     2017-01-23  2673  	case COMP_DATA_BUFFER_ERROR:
b7f769ae1b1260 Zhengjun Xing    2017-04-07  2674  		xhci_warn(xhci,
b7f769ae1b1260 Zhengjun Xing    2017-04-07  2675  			  "WARN: HC couldn't access mem fast enough for slot %u ep %u\n",
b7f769ae1b1260 Zhengjun Xing    2017-04-07  2676  			  slot_id, ep_index);
b10de142119a67 Sarah Sharp      2009-04-27  2677  		status = -ENOSR;
b10de142119a67 Sarah Sharp      2009-04-27  2678  		break;
0b7c105a04ca79 Felipe Balbi     2017-01-23  2679  	case COMP_BANDWIDTH_OVERRUN_ERROR:
b7f769ae1b1260 Zhengjun Xing    2017-04-07  2680  		xhci_warn(xhci,
b7f769ae1b1260 Zhengjun Xing    2017-04-07  2681  			  "WARN: bandwidth overrun event for slot %u ep %u on endpoint\n",
b7f769ae1b1260 Zhengjun Xing    2017-04-07  2682  			  slot_id, ep_index);
986a92d44810ca Andiry Xu        2010-07-22  2683  		break;
0b7c105a04ca79 Felipe Balbi     2017-01-23  2684  	case COMP_ISOCH_BUFFER_OVERRUN:
b7f769ae1b1260 Zhengjun Xing    2017-04-07  2685  		xhci_warn(xhci,
b7f769ae1b1260 Zhengjun Xing    2017-04-07  2686  			  "WARN: buffer overrun event for slot %u ep %u on endpoint",
b7f769ae1b1260 Zhengjun Xing    2017-04-07  2687  			  slot_id, ep_index);
986a92d44810ca Andiry Xu        2010-07-22  2688  		break;
0b7c105a04ca79 Felipe Balbi     2017-01-23  2689  	case COMP_RING_UNDERRUN:
986a92d44810ca Andiry Xu        2010-07-22  2690  		/*
986a92d44810ca Andiry Xu        2010-07-22  2691  		 * When the Isoch ring is empty, the xHC will generate
986a92d44810ca Andiry Xu        2010-07-22  2692  		 * a Ring Overrun Event for IN Isoch endpoint or Ring
986a92d44810ca Andiry Xu        2010-07-22  2693  		 * Underrun Event for OUT Isoch endpoint.
986a92d44810ca Andiry Xu        2010-07-22  2694  		 */
986a92d44810ca Andiry Xu        2010-07-22  2695  		xhci_dbg(xhci, "underrun event on endpoint\n");
986a92d44810ca Andiry Xu        2010-07-22  2696  		if (!list_empty(&ep_ring->td_list))
986a92d44810ca Andiry Xu        2010-07-22  2697  			xhci_dbg(xhci, "Underrun Event for slot %d ep %d "
986a92d44810ca Andiry Xu        2010-07-22  2698  					"still with TDs queued?\n",
28ccd2962c6655 Matt Evans       2011-03-29  2699  				 TRB_TO_SLOT_ID(le32_to_cpu(event->flags)),
28ccd2962c6655 Matt Evans       2011-03-29  2700  				 ep_index);
986a92d44810ca Andiry Xu        2010-07-22  2701  		goto cleanup;
0b7c105a04ca79 Felipe Balbi     2017-01-23  2702  	case COMP_RING_OVERRUN:
986a92d44810ca Andiry Xu        2010-07-22  2703  		xhci_dbg(xhci, "overrun event on endpoint\n");
986a92d44810ca Andiry Xu        2010-07-22  2704  		if (!list_empty(&ep_ring->td_list))
986a92d44810ca Andiry Xu        2010-07-22  2705  			xhci_dbg(xhci, "Overrun Event for slot %d ep %d "
986a92d44810ca Andiry Xu        2010-07-22  2706  					"still with TDs queued?\n",
28ccd2962c6655 Matt Evans       2011-03-29  2707  				 TRB_TO_SLOT_ID(le32_to_cpu(event->flags)),
28ccd2962c6655 Matt Evans       2011-03-29  2708  				 ep_index);
986a92d44810ca Andiry Xu        2010-07-22  2709  		goto cleanup;
0b7c105a04ca79 Felipe Balbi     2017-01-23  2710  	case COMP_MISSED_SERVICE_ERROR:
d18240db797ed7 Andiry Xu        2010-07-22  2711  		/*
d18240db797ed7 Andiry Xu        2010-07-22  2712  		 * When encounter missed service error, one or more isoc tds
d18240db797ed7 Andiry Xu        2010-07-22  2713  		 * may be missed by xHC.
d18240db797ed7 Andiry Xu        2010-07-22  2714  		 * Set skip flag of the ep_ring; Complete the missed tds as
d18240db797ed7 Andiry Xu        2010-07-22  2715  		 * short transfer when process the ep_ring next time.
d18240db797ed7 Andiry Xu        2010-07-22  2716  		 */
d18240db797ed7 Andiry Xu        2010-07-22  2717  		ep->skip = true;
b7f769ae1b1260 Zhengjun Xing    2017-04-07  2718  		xhci_dbg(xhci,
b7f769ae1b1260 Zhengjun Xing    2017-04-07  2719  			 "Miss service interval error for slot %u ep %u, set skip flag\n",
b7f769ae1b1260 Zhengjun Xing    2017-04-07  2720  			 slot_id, ep_index);
d18240db797ed7 Andiry Xu        2010-07-22  2721  		goto cleanup;
0b7c105a04ca79 Felipe Balbi     2017-01-23  2722  	case COMP_NO_PING_RESPONSE_ERROR:
3b4739b8951d65 Mathias Nyman    2015-10-12  2723  		ep->skip = true;
b7f769ae1b1260 Zhengjun Xing    2017-04-07  2724  		xhci_dbg(xhci,
b7f769ae1b1260 Zhengjun Xing    2017-04-07  2725  			 "No Ping response error for slot %u ep %u, Skip one Isoc TD\n",
b7f769ae1b1260 Zhengjun Xing    2017-04-07  2726  			 slot_id, ep_index);
3b4739b8951d65 Mathias Nyman    2015-10-12  2727  		goto cleanup;
b3368382efe6e9 Mathias Nyman    2017-06-15  2728  
b3368382efe6e9 Mathias Nyman    2017-06-15  2729  	case COMP_INCOMPATIBLE_DEVICE_ERROR:
b3368382efe6e9 Mathias Nyman    2017-06-15  2730  		/* needs disable slot command to recover */
b3368382efe6e9 Mathias Nyman    2017-06-15  2731  		xhci_warn(xhci,
b3368382efe6e9 Mathias Nyman    2017-06-15  2732  			  "WARN: detect an incompatible device for slot %u ep %u",
b3368382efe6e9 Mathias Nyman    2017-06-15  2733  			  slot_id, ep_index);
b3368382efe6e9 Mathias Nyman    2017-06-15  2734  		status = -EPROTO;
b3368382efe6e9 Mathias Nyman    2017-06-15  2735  		break;
b10de142119a67 Sarah Sharp      2009-04-27  2736  	default:
b45b5069112470 Sarah Sharp      2009-12-09  2737  		if (xhci_is_vendor_info_code(xhci, trb_comp_code)) {
5ad6a529c28db3 Sarah Sharp      2009-11-11  2738  			status = 0;
5ad6a529c28db3 Sarah Sharp      2009-11-11  2739  			break;
5ad6a529c28db3 Sarah Sharp      2009-11-11  2740  		}
b7f769ae1b1260 Zhengjun Xing    2017-04-07  2741  		xhci_warn(xhci,
b7f769ae1b1260 Zhengjun Xing    2017-04-07  2742  			  "ERROR Unknown event condition %u for slot %u ep %u , HC probably busted\n",
b7f769ae1b1260 Zhengjun Xing    2017-04-07  2743  			  trb_comp_code, slot_id, ep_index);
986a92d44810ca Andiry Xu        2010-07-22  2744  		goto cleanup;
986a92d44810ca Andiry Xu        2010-07-22  2745  	}
986a92d44810ca Andiry Xu        2010-07-22  2746  
d18240db797ed7 Andiry Xu        2010-07-22  2747  	do {
d18240db797ed7 Andiry Xu        2010-07-22  2748  		/* This TRB should be in the TD at the head of this ring's
d18240db797ed7 Andiry Xu        2010-07-22  2749  		 * TD list.
d18240db797ed7 Andiry Xu        2010-07-22  2750  		 */
986a92d44810ca Andiry Xu        2010-07-22 @2751  		if (list_empty(&ep_ring->td_list)) {
a83d6755814e46 Sarah Sharp      2013-03-18  2752  			/*
e4ec40ec4b260e Mathias Nyman    2017-12-01  2753  			 * Don't print wanings if it's due to a stopped endpoint
e4ec40ec4b260e Mathias Nyman    2017-12-01  2754  			 * generating an extra completion event if the device
e4ec40ec4b260e Mathias Nyman    2017-12-01  2755  			 * was suspended. Or, a event for the last TRB of a
e4ec40ec4b260e Mathias Nyman    2017-12-01  2756  			 * short TD we already got a short event for.
e4ec40ec4b260e Mathias Nyman    2017-12-01  2757  			 * The short TD is already removed from the TD list.
a83d6755814e46 Sarah Sharp      2013-03-18  2758  			 */
e4ec40ec4b260e Mathias Nyman    2017-12-01  2759  
0b7c105a04ca79 Felipe Balbi     2017-01-23  2760  			if (!(trb_comp_code == COMP_STOPPED ||
e4ec40ec4b260e Mathias Nyman    2017-12-01  2761  			      trb_comp_code == COMP_STOPPED_LENGTH_INVALID ||
e4ec40ec4b260e Mathias Nyman    2017-12-01  2762  			      ep_ring->last_td_was_short)) {
a83d6755814e46 Sarah Sharp      2013-03-18  2763  				xhci_warn(xhci, "WARN Event TRB for slot %d ep %d with no TDs queued?\n",
28ccd2962c6655 Matt Evans       2011-03-29  2764  						TRB_TO_SLOT_ID(le32_to_cpu(event->flags)),
28ccd2962c6655 Matt Evans       2011-03-29  2765  						ep_index);
a83d6755814e46 Sarah Sharp      2013-03-18  2766  			}
d18240db797ed7 Andiry Xu        2010-07-22  2767  			if (ep->skip) {
d18240db797ed7 Andiry Xu        2010-07-22  2768  				ep->skip = false;
b7f769ae1b1260 Zhengjun Xing    2017-04-07  2769  				xhci_dbg(xhci, "td_list is empty while skip flag set. Clear skip flag for slot %u ep %u.\n",
b7f769ae1b1260 Zhengjun Xing    2017-04-07  2770  					 slot_id, ep_index);
d18240db797ed7 Andiry Xu        2010-07-22  2771  			}
93ceaa808e8def Mathias Nyman    2020-04-21  2772  			if (trb_comp_code == COMP_STALL_ERROR ||
93ceaa808e8def Mathias Nyman    2020-04-21  2773  			    xhci_requires_manual_halt_cleanup(xhci, ep_ctx,
93ceaa808e8def Mathias Nyman    2020-04-21  2774  							      trb_comp_code)) {
7428a253315cef Mathias Nyman    2022-11-30  2775  				xhci_handle_halted_endpoint(xhci, ep, NULL,
93ceaa808e8def Mathias Nyman    2020-04-21  2776  							    EP_HARD_RESET);
93ceaa808e8def Mathias Nyman    2020-04-21  2777  			}
b10de142119a67 Sarah Sharp      2009-04-27  2778  			goto cleanup;
b10de142119a67 Sarah Sharp      2009-04-27  2779  		}
986a92d44810ca Andiry Xu        2010-07-22  2780  
c2d7b49f42f50d Andiry Xu        2011-09-19  2781  		/* We've skipped all the TDs on the ep ring when ep->skip set */
c2d7b49f42f50d Andiry Xu        2011-09-19  2782  		if (ep->skip && td_num == 0) {
c2d7b49f42f50d Andiry Xu        2011-09-19  2783  			ep->skip = false;
b7f769ae1b1260 Zhengjun Xing    2017-04-07  2784  			xhci_dbg(xhci, "All tds on the ep_ring skipped. Clear skip flag for slot %u ep %u.\n",
b7f769ae1b1260 Zhengjun Xing    2017-04-07  2785  				 slot_id, ep_index);
c2d7b49f42f50d Andiry Xu        2011-09-19  2786  			goto cleanup;
c2d7b49f42f50d Andiry Xu        2011-09-19  2787  		}
c2d7b49f42f50d Andiry Xu        2011-09-19  2788  
04861f83367eaa Felipe Balbi     2017-01-23  2789  		td = list_first_entry(&ep_ring->td_list, struct xhci_td,
04861f83367eaa Felipe Balbi     2017-01-23  2790  				      td_list);
c2d7b49f42f50d Andiry Xu        2011-09-19  2791  		if (ep->skip)
c2d7b49f42f50d Andiry Xu        2011-09-19  2792  			td_num--;
926008c9386dde Dmitry Torokhov  2011-03-23  2793  
986a92d44810ca Andiry Xu        2010-07-22  2794  		/* Is this a TRB in the currently executing TD? */
f97c08ae329bcf Mathias Nyman    2016-11-11  2795  		ep_seg = trb_in_td(xhci, ep_ring->deq_seg, ep_ring->dequeue,
f97c08ae329bcf Mathias Nyman    2016-11-11  2796  				td->last_trb, ep_trb_dma, false);
e1cf486d881d85 Alex He          2011-06-03  2797  
e1cf486d881d85 Alex He          2011-06-03  2798  		/*
e1cf486d881d85 Alex He          2011-06-03  2799  		 * Skip the Force Stopped Event. The event_trb(event_dma) of FSE
e1cf486d881d85 Alex He          2011-06-03  2800  		 * is not in the current TD pointed by ep_ring->dequeue because
e1cf486d881d85 Alex He          2011-06-03  2801  		 * that the hardware dequeue pointer still at the previous TRB
e1cf486d881d85 Alex He          2011-06-03  2802  		 * of the current TD. The previous TRB maybe a Link TD or the
e1cf486d881d85 Alex He          2011-06-03  2803  		 * last TRB of the previous TD. The command completion handle
e1cf486d881d85 Alex He          2011-06-03  2804  		 * will take care the rest.
e1cf486d881d85 Alex He          2011-06-03  2805  		 */
0b7c105a04ca79 Felipe Balbi     2017-01-23  2806  		if (!ep_seg && (trb_comp_code == COMP_STOPPED ||
0b7c105a04ca79 Felipe Balbi     2017-01-23  2807  			   trb_comp_code == COMP_STOPPED_LENGTH_INVALID)) {
e1cf486d881d85 Alex He          2011-06-03  2808  			goto cleanup;
e1cf486d881d85 Alex He          2011-06-03  2809  		}
e1cf486d881d85 Alex He          2011-06-03  2810  
f97c08ae329bcf Mathias Nyman    2016-11-11  2811  		if (!ep_seg) {
926008c9386dde Dmitry Torokhov  2011-03-23  2812  			if (!ep->skip ||
926008c9386dde Dmitry Torokhov  2011-03-23  2813  			    !usb_endpoint_xfer_isoc(&td->urb->ep->desc)) {
ad808333d8201d Sarah Sharp      2011-05-25  2814  				/* Some host controllers give a spurious
ad808333d8201d Sarah Sharp      2011-05-25  2815  				 * successful event after a short transfer.
ad808333d8201d Sarah Sharp      2011-05-25  2816  				 * Ignore it.
ad808333d8201d Sarah Sharp      2011-05-25  2817  				 */
ad808333d8201d Sarah Sharp      2011-05-25  2818  				if ((xhci->quirks & XHCI_SPURIOUS_SUCCESS) &&
ad808333d8201d Sarah Sharp      2011-05-25  2819  						ep_ring->last_td_was_short) {
ad808333d8201d Sarah Sharp      2011-05-25  2820  					ep_ring->last_td_was_short = false;
ad808333d8201d Sarah Sharp      2011-05-25  2821  					goto cleanup;
ad808333d8201d Sarah Sharp      2011-05-25  2822  				}
986a92d44810ca Andiry Xu        2010-07-22  2823  				/* HC is busted, give up! */
926008c9386dde Dmitry Torokhov  2011-03-23  2824  				xhci_err(xhci,
926008c9386dde Dmitry Torokhov  2011-03-23  2825  					"ERROR Transfer event TRB DMA ptr not "
cffb9be80f8a6d Hans de Goede    2014-08-20  2826  					"part of current TD ep_index %d "
cffb9be80f8a6d Hans de Goede    2014-08-20  2827  					"comp_code %u\n", ep_index,
cffb9be80f8a6d Hans de Goede    2014-08-20  2828  					trb_comp_code);
cffb9be80f8a6d Hans de Goede    2014-08-20  2829  				trb_in_td(xhci, ep_ring->deq_seg,
cffb9be80f8a6d Hans de Goede    2014-08-20  2830  					  ep_ring->dequeue, td->last_trb,
f97c08ae329bcf Mathias Nyman    2016-11-11  2831  					  ep_trb_dma, true);
986a92d44810ca Andiry Xu        2010-07-22  2832  				return -ESHUTDOWN;
986a92d44810ca Andiry Xu        2010-07-22  2833  			}
986a92d44810ca Andiry Xu        2010-07-22  2834  
a6ccd1fd4bd4fc Mathias Nyman    2021-01-29  2835  			skip_isoc_td(xhci, td, ep, status);
926008c9386dde Dmitry Torokhov  2011-03-23  2836  			goto cleanup;
926008c9386dde Dmitry Torokhov  2011-03-23  2837  		}
0b7c105a04ca79 Felipe Balbi     2017-01-23  2838  		if (trb_comp_code == COMP_SHORT_PACKET)
ad808333d8201d Sarah Sharp      2011-05-25  2839  			ep_ring->last_td_was_short = true;
ad808333d8201d Sarah Sharp      2011-05-25  2840  		else
ad808333d8201d Sarah Sharp      2011-05-25  2841  			ep_ring->last_td_was_short = false;
926008c9386dde Dmitry Torokhov  2011-03-23  2842  
926008c9386dde Dmitry Torokhov  2011-03-23  2843  		if (ep->skip) {
b7f769ae1b1260 Zhengjun Xing    2017-04-07  2844  			xhci_dbg(xhci,
b7f769ae1b1260 Zhengjun Xing    2017-04-07  2845  				 "Found td. Clear skip flag for slot %u ep %u.\n",
b7f769ae1b1260 Zhengjun Xing    2017-04-07  2846  				 slot_id, ep_index);
926008c9386dde Dmitry Torokhov  2011-03-23  2847  			ep->skip = false;
926008c9386dde Dmitry Torokhov  2011-03-23  2848  		}
926008c9386dde Dmitry Torokhov  2011-03-23  2849  
f97c08ae329bcf Mathias Nyman    2016-11-11  2850  		ep_trb = &ep_seg->trbs[(ep_trb_dma - ep_seg->dma) /
f97c08ae329bcf Mathias Nyman    2016-11-11  2851  						sizeof(*ep_trb)];
a37c3f76e6a6b5 Felipe Balbi     2017-01-23  2852  
a37c3f76e6a6b5 Felipe Balbi     2017-01-23  2853  		trace_xhci_handle_transfer(ep_ring,
a37c3f76e6a6b5 Felipe Balbi     2017-01-23  2854  				(struct xhci_generic_trb *) ep_trb);
a37c3f76e6a6b5 Felipe Balbi     2017-01-23  2855  
d18240db797ed7 Andiry Xu        2010-07-22  2856  		/*
810a624bd1b64b Lu Baolu         2017-10-06  2857  		 * No-op TRB could trigger interrupts in a case where
810a624bd1b64b Lu Baolu         2017-10-06  2858  		 * a URB was killed and a STALL_ERROR happens right
810a624bd1b64b Lu Baolu         2017-10-06  2859  		 * after the endpoint ring stopped. Reset the halted
810a624bd1b64b Lu Baolu         2017-10-06  2860  		 * endpoint. Otherwise, the endpoint remains stalled
810a624bd1b64b Lu Baolu         2017-10-06  2861  		 * indefinitely.
d18240db797ed7 Andiry Xu        2010-07-22  2862  		 */
a6ccd1fd4bd4fc Mathias Nyman    2021-01-29  2863  
f97c08ae329bcf Mathias Nyman    2016-11-11  2864  		if (trb_is_noop(ep_trb)) {
810a624bd1b64b Lu Baolu         2017-10-06  2865  			if (trb_comp_code == COMP_STALL_ERROR ||
810a624bd1b64b Lu Baolu         2017-10-06  2866  			    xhci_requires_manual_halt_cleanup(xhci, ep_ctx,
810a624bd1b64b Lu Baolu         2017-10-06  2867  							      trb_comp_code))
7428a253315cef Mathias Nyman    2022-11-30  2868  				xhci_handle_halted_endpoint(xhci, ep, td,
7428a253315cef Mathias Nyman    2022-11-30  2869  							    EP_HARD_RESET);
d18240db797ed7 Andiry Xu        2010-07-22  2870  			goto cleanup;
d18240db797ed7 Andiry Xu        2010-07-22  2871  		}
d18240db797ed7 Andiry Xu        2010-07-22  2872  
a6ccd1fd4bd4fc Mathias Nyman    2021-01-29  2873  		td->status = status;
a6ccd1fd4bd4fc Mathias Nyman    2021-01-29  2874  
0c03d89d0c7172 Mathias Nyman    2016-11-11  2875  		/* update the urb's actual_length and give back to the core */
22405ed2e1bd8d Andiry Xu        2010-07-22  2876  		if (usb_endpoint_xfer_control(&td->urb->ep->desc))
e9fcb07704fcef Mathias Nyman    2021-04-06  2877  			process_ctrl_td(xhci, ep, ep_ring, td, ep_trb, event);
04e51901dd44f4 Andiry Xu        2010-07-22  2878  		else if (usb_endpoint_xfer_isoc(&td->urb->ep->desc))
e9fcb07704fcef Mathias Nyman    2021-04-06  2879  			process_isoc_td(xhci, ep, ep_ring, td, ep_trb, event);
2f697f6cbff155 Sarah Sharp      2009-08-28  2880  		else
e9fcb07704fcef Mathias Nyman    2021-04-06  2881  			process_bulk_intr_td(xhci, ep, ep_ring, td, ep_trb, event);
4422da61550b2f Andiry Xu        2010-07-22  2882  cleanup:
3b4739b8951d65 Mathias Nyman    2015-10-12  2883  		handling_skipped_tds = ep->skip &&
0b7c105a04ca79 Felipe Balbi     2017-01-23  2884  			trb_comp_code != COMP_MISSED_SERVICE_ERROR &&
0b7c105a04ca79 Felipe Balbi     2017-01-23  2885  			trb_comp_code != COMP_NO_PING_RESPONSE_ERROR;
3b4739b8951d65 Mathias Nyman    2015-10-12  2886  
d18240db797ed7 Andiry Xu        2010-07-22  2887  	/*
d18240db797ed7 Andiry Xu        2010-07-22  2888  	 * If ep->skip is set, it means there are missed tds on the
d18240db797ed7 Andiry Xu        2010-07-22  2889  	 * endpoint ring need to take care of.
d18240db797ed7 Andiry Xu        2010-07-22  2890  	 * Process them as short transfer until reach the td pointed by
d18240db797ed7 Andiry Xu        2010-07-22  2891  	 * the event.
d18240db797ed7 Andiry Xu        2010-07-22  2892  	 */
3b4739b8951d65 Mathias Nyman    2015-10-12  2893  	} while (handling_skipped_tds);
d18240db797ed7 Andiry Xu        2010-07-22  2894  
d0e96f5a71a032 Sarah Sharp      2009-04-27  2895  	return 0;
b3368382efe6e9 Mathias Nyman    2017-06-15  2896  
b3368382efe6e9 Mathias Nyman    2017-06-15  2897  err_out:
b3368382efe6e9 Mathias Nyman    2017-06-15  2898  	xhci_err(xhci, "@%016llx %08x %08x %08x %08x\n",
b3368382efe6e9 Mathias Nyman    2017-06-15  2899  		 (unsigned long long) xhci_trb_virt_to_dma(
b17a57f89f6906 Mathias Nyman    2023-02-02  2900  			 ir->event_ring->deq_seg,
b17a57f89f6906 Mathias Nyman    2023-02-02  2901  			 ir->event_ring->dequeue),
b3368382efe6e9 Mathias Nyman    2017-06-15  2902  		 lower_32_bits(le64_to_cpu(event->buffer)),
b3368382efe6e9 Mathias Nyman    2017-06-15  2903  		 upper_32_bits(le64_to_cpu(event->buffer)),
b3368382efe6e9 Mathias Nyman    2017-06-15  2904  		 le32_to_cpu(event->transfer_len),
b3368382efe6e9 Mathias Nyman    2017-06-15  2905  		 le32_to_cpu(event->flags));
b3368382efe6e9 Mathias Nyman    2017-06-15  2906  	return -ENODEV;
d0e96f5a71a032 Sarah Sharp      2009-04-27  2907  }
d0e96f5a71a032 Sarah Sharp      2009-04-27  2908  

:::::: The code at line 2751 was first introduced by commit
:::::: 986a92d44810cad915279fdc942e2fd2c2857499 USB: xHCI: adds new cases to trb_comp_code switch

:::::: TO: Andiry Xu <andiry.xu@amd.com>
:::::: CC: Greg Kroah-Hartman <gregkh@suse.de>

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] 2+ messages in thread
* [android-common:android15-6.6 28/33] drivers/usb/host/xhci-ring.c:2751:27-34: ERROR: ep_ring is NULL but dereferenced.
@ 2024-12-13 23:53 kernel test robot
  0 siblings, 0 replies; 2+ messages in thread
From: kernel test robot @ 2024-12-13 23:53 UTC (permalink / raw)
  To: oe-kbuild; +Cc: lkp, Julia Lawall

BCC: lkp@intel.com
CC: oe-kbuild-all@lists.linux.dev
TO: cros-kernel-buildreports@googlegroups.com

tree:   https://android.googlesource.com/kernel/common android15-6.6
head:   daaec5035152cdd32538725d8361a20b05434942
commit: b7a1562e2e151612ea31c7ebbb4478a1fe01c064 [28/33] UPSTREAM: xhci: simplify event ring dequeue tracking for transfer events
:::::: branch date: 2 hours ago
:::::: commit date: 10 months ago
config: x86_64-randconfig-102-20241214 (https://download.01.org/0day-ci/archive/20241214/202412140711.EJbOrcYa-lkp@intel.com/config)
compiler: clang version 19.1.3 (https://github.com/llvm/llvm-project ab51eccf88f5321e7c60591c5546b254b6afab99)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Julia Lawall <julia.lawall@inria.fr>
| Closes: https://lore.kernel.org/r/202412140711.EJbOrcYa-lkp@intel.com/

cocci warnings: (new ones prefixed by >>)
>> drivers/usb/host/xhci-ring.c:2751:27-34: ERROR: ep_ring is NULL but dereferenced.

vim +2751 drivers/usb/host/xhci-ring.c

22405ed2e1bd8d2 Andiry Xu        2010-07-22  2535  
d0e96f5a71a032c Sarah Sharp      2009-04-27  2536  /*
d0e96f5a71a032c Sarah Sharp      2009-04-27  2537   * If this function returns an error condition, it means it got a Transfer
d0e96f5a71a032c Sarah Sharp      2009-04-27  2538   * event with a corrupted Slot ID, Endpoint ID, or TRB DMA address.
d0e96f5a71a032c Sarah Sharp      2009-04-27  2539   * At this point, the host controller is probably hosed and should be reset.
d0e96f5a71a032c Sarah Sharp      2009-04-27  2540   */
d0e96f5a71a032c Sarah Sharp      2009-04-27  2541  static int handle_tx_event(struct xhci_hcd *xhci,
b17a57f89f69069 Mathias Nyman    2023-02-02  2542  			   struct xhci_interrupter *ir,
d0e96f5a71a032c Sarah Sharp      2009-04-27  2543  			   struct xhci_transfer_event *event)
d0e96f5a71a032c Sarah Sharp      2009-04-27  2544  {
63a0d9abd18cdcf Sarah Sharp      2009-09-04  2545  	struct xhci_virt_ep *ep;
d0e96f5a71a032c Sarah Sharp      2009-04-27  2546  	struct xhci_ring *ep_ring;
82d1009f537c2a4 Sarah Sharp      2009-08-07  2547  	unsigned int slot_id;
d0e96f5a71a032c Sarah Sharp      2009-04-27  2548  	int ep_index;
326b4810cc99520 Randy Dunlap     2010-04-19  2549  	struct xhci_td *td = NULL;
f97c08ae329bcf0 Mathias Nyman    2016-11-11  2550  	dma_addr_t ep_trb_dma;
f97c08ae329bcf0 Mathias Nyman    2016-11-11  2551  	struct xhci_segment *ep_seg;
f97c08ae329bcf0 Mathias Nyman    2016-11-11  2552  	union xhci_trb *ep_trb;
d0e96f5a71a032c Sarah Sharp      2009-04-27  2553  	int status = -EINPROGRESS;
d115b04818e57bd John Youn        2009-07-27  2554  	struct xhci_ep_ctx *ep_ctx;
66d1eebce5cca91 Sarah Sharp      2009-08-27  2555  	u32 trb_comp_code;
c2d7b49f42f50d7 Andiry Xu        2011-09-19  2556  	int td_num = 0;
3b4739b8951d650 Mathias Nyman    2015-10-12  2557  	bool handling_skipped_tds = false;
d0e96f5a71a032c Sarah Sharp      2009-04-27  2558  
28ccd2962c66556 Matt Evans       2011-03-29  2559  	slot_id = TRB_TO_SLOT_ID(le32_to_cpu(event->flags));
b3368382efe6e98 Mathias Nyman    2017-06-15  2560  	ep_index = TRB_TO_EP_ID(le32_to_cpu(event->flags)) - 1;
b3368382efe6e98 Mathias Nyman    2017-06-15  2561  	trb_comp_code = GET_COMP_CODE(le32_to_cpu(event->transfer_len));
b3368382efe6e98 Mathias Nyman    2017-06-15  2562  	ep_trb_dma = le64_to_cpu(event->buffer);
b3368382efe6e98 Mathias Nyman    2017-06-15  2563  
b1adc42d440df32 Mathias Nyman    2021-01-29  2564  	ep = xhci_get_virt_ep(xhci, slot_id, ep_index);
b1adc42d440df32 Mathias Nyman    2021-01-29  2565  	if (!ep) {
b1adc42d440df32 Mathias Nyman    2021-01-29  2566  		xhci_err(xhci, "ERROR Invalid Transfer event\n");
b3368382efe6e98 Mathias Nyman    2017-06-15  2567  		goto err_out;
d0e96f5a71a032c Sarah Sharp      2009-04-27  2568  	}
d0e96f5a71a032c Sarah Sharp      2009-04-27  2569  
b3368382efe6e98 Mathias Nyman    2017-06-15  2570  	ep_ring = xhci_dma_to_transfer_ring(ep, ep_trb_dma);
b1adc42d440df32 Mathias Nyman    2021-01-29  2571  	ep_ctx = xhci_get_ep_ctx(xhci, ep->vdev->out_ctx, ep_index);
b3368382efe6e98 Mathias Nyman    2017-06-15  2572  
ade2e3a148a1740 Mathias Nyman    2017-06-15  2573  	if (GET_EP_CTX_STATE(ep_ctx) == EP_STATE_DISABLED) {
b7f769ae1b12608 Zhengjun Xing    2017-04-07  2574  		xhci_err(xhci,
ade2e3a148a1740 Mathias Nyman    2017-06-15  2575  			 "ERROR Transfer event for disabled endpoint slot %u ep %u\n",
b7f769ae1b12608 Zhengjun Xing    2017-04-07  2576  			  slot_id, ep_index);
b3368382efe6e98 Mathias Nyman    2017-06-15  2577  		goto err_out;
d0e96f5a71a032c Sarah Sharp      2009-04-27  2578  	}
d0e96f5a71a032c Sarah Sharp      2009-04-27  2579  
ade2e3a148a1740 Mathias Nyman    2017-06-15  2580  	/* Some transfer events don't always point to a trb, see xhci 4.17.4 */
ade2e3a148a1740 Mathias Nyman    2017-06-15  2581  	if (!ep_ring) {
ade2e3a148a1740 Mathias Nyman    2017-06-15  2582  		switch (trb_comp_code) {
ade2e3a148a1740 Mathias Nyman    2017-06-15  2583  		case COMP_STALL_ERROR:
ade2e3a148a1740 Mathias Nyman    2017-06-15  2584  		case COMP_USB_TRANSACTION_ERROR:
ade2e3a148a1740 Mathias Nyman    2017-06-15  2585  		case COMP_INVALID_STREAM_TYPE_ERROR:
ade2e3a148a1740 Mathias Nyman    2017-06-15  2586  		case COMP_INVALID_STREAM_ID_ERROR:
a1575120972ecd7 Mathias Nyman    2022-11-30  2587  			xhci_dbg(xhci, "Stream transaction error ep %u no id\n",
a1575120972ecd7 Mathias Nyman    2022-11-30  2588  				 ep_index);
a1575120972ecd7 Mathias Nyman    2022-11-30  2589  			if (ep->err_count++ > MAX_SOFT_RETRY)
7428a253315cefa Mathias Nyman    2022-11-30  2590  				xhci_handle_halted_endpoint(xhci, ep, NULL,
a1575120972ecd7 Mathias Nyman    2022-11-30  2591  							    EP_HARD_RESET);
a1575120972ecd7 Mathias Nyman    2022-11-30  2592  			else
7428a253315cefa Mathias Nyman    2022-11-30  2593  				xhci_handle_halted_endpoint(xhci, ep, NULL,
d70f4231b81eeb6 Mathias Nyman    2021-01-29  2594  							    EP_SOFT_RESET);
ade2e3a148a1740 Mathias Nyman    2017-06-15  2595  			goto cleanup;
ade2e3a148a1740 Mathias Nyman    2017-06-15  2596  		case COMP_RING_UNDERRUN:
ade2e3a148a1740 Mathias Nyman    2017-06-15  2597  		case COMP_RING_OVERRUN:
d9193efba84fe4c Sandeep Singh    2018-11-09  2598  		case COMP_STOPPED_LENGTH_INVALID:
ade2e3a148a1740 Mathias Nyman    2017-06-15  2599  			goto cleanup;
ade2e3a148a1740 Mathias Nyman    2017-06-15  2600  		default:
ade2e3a148a1740 Mathias Nyman    2017-06-15  2601  			xhci_err(xhci, "ERROR Transfer event for unknown stream ring slot %u ep %u\n",
ade2e3a148a1740 Mathias Nyman    2017-06-15  2602  				 slot_id, ep_index);
ade2e3a148a1740 Mathias Nyman    2017-06-15  2603  			goto err_out;
ade2e3a148a1740 Mathias Nyman    2017-06-15  2604  		}
ade2e3a148a1740 Mathias Nyman    2017-06-15  2605  	}
ade2e3a148a1740 Mathias Nyman    2017-06-15  2606  
c2d7b49f42f50d7 Andiry Xu        2011-09-19  2607  	/* Count current td numbers if ep->skip is set */
5220cb493bf418c Andy Shevchenko  2022-11-30  2608  	if (ep->skip)
5220cb493bf418c Andy Shevchenko  2022-11-30  2609  		td_num += list_count_nodes(&ep_ring->td_list);
c2d7b49f42f50d7 Andiry Xu        2011-09-19  2610  
986a92d44810cad Andiry Xu        2010-07-22  2611  	/* Look for common error cases */
66d1eebce5cca91 Sarah Sharp      2009-08-27  2612  	switch (trb_comp_code) {
b10de142119a676 Sarah Sharp      2009-04-27  2613  	/* Skip codes that require special handling depending on
b10de142119a676 Sarah Sharp      2009-04-27  2614  	 * transfer type
b10de142119a676 Sarah Sharp      2009-04-27  2615  	 */
b10de142119a676 Sarah Sharp      2009-04-27  2616  	case COMP_SUCCESS:
1c11a172cb30492 Vivek Gautam     2013-03-21  2617  		if (EVENT_TRB_LEN(le32_to_cpu(event->transfer_len)) == 0)
1530bbc6272d9da Sarah Sharp      2012-05-08  2618  			break;
7ff11162808cc2e Mathias Nyman    2019-12-11  2619  		if (xhci->quirks & XHCI_TRUST_TX_LENGTH ||
7ff11162808cc2e Mathias Nyman    2019-12-11  2620  		    ep_ring->last_td_was_short)
0b7c105a04ca793 Felipe Balbi     2017-01-23  2621  			trb_comp_code = COMP_SHORT_PACKET;
1530bbc6272d9da Sarah Sharp      2012-05-08  2622  		else
8202ce2e2921941 Sarah Sharp      2012-07-25  2623  			xhci_warn_ratelimited(xhci,
b7f769ae1b12608 Zhengjun Xing    2017-04-07  2624  					      "WARN Successful completion on short TX for slot %u ep %u: needs XHCI_TRUST_TX_LENGTH quirk?\n",
b7f769ae1b12608 Zhengjun Xing    2017-04-07  2625  					      slot_id, ep_index);
1d6903a617a221f Nick Desaulniers 2020-11-10  2626  		break;
0b7c105a04ca793 Felipe Balbi     2017-01-23  2627  	case COMP_SHORT_PACKET:
b10de142119a676 Sarah Sharp      2009-04-27  2628  		break;
b3368382efe6e98 Mathias Nyman    2017-06-15  2629  	/* Completion codes for endpoint stopped state */
0b7c105a04ca793 Felipe Balbi     2017-01-23  2630  	case COMP_STOPPED:
b7f769ae1b12608 Zhengjun Xing    2017-04-07  2631  		xhci_dbg(xhci, "Stopped on Transfer TRB for slot %u ep %u\n",
b7f769ae1b12608 Zhengjun Xing    2017-04-07  2632  			 slot_id, ep_index);
ae636747146ea97 Sarah Sharp      2009-04-29  2633  		break;
0b7c105a04ca793 Felipe Balbi     2017-01-23  2634  	case COMP_STOPPED_LENGTH_INVALID:
b7f769ae1b12608 Zhengjun Xing    2017-04-07  2635  		xhci_dbg(xhci,
b7f769ae1b12608 Zhengjun Xing    2017-04-07  2636  			 "Stopped on No-op or Link TRB for slot %u ep %u\n",
b7f769ae1b12608 Zhengjun Xing    2017-04-07  2637  			 slot_id, ep_index);
ae636747146ea97 Sarah Sharp      2009-04-29  2638  		break;
0b7c105a04ca793 Felipe Balbi     2017-01-23  2639  	case COMP_STOPPED_SHORT_PACKET:
b7f769ae1b12608 Zhengjun Xing    2017-04-07  2640  		xhci_dbg(xhci,
b7f769ae1b12608 Zhengjun Xing    2017-04-07  2641  			 "Stopped with short packet transfer detected for slot %u ep %u\n",
b7f769ae1b12608 Zhengjun Xing    2017-04-07  2642  			 slot_id, ep_index);
40a3b775f49c278 Lu Baolu         2015-08-06  2643  		break;
b3368382efe6e98 Mathias Nyman    2017-06-15  2644  	/* Completion codes for endpoint halted state */
0b7c105a04ca793 Felipe Balbi     2017-01-23  2645  	case COMP_STALL_ERROR:
b7f769ae1b12608 Zhengjun Xing    2017-04-07  2646  		xhci_dbg(xhci, "Stalled endpoint for slot %u ep %u\n", slot_id,
b7f769ae1b12608 Zhengjun Xing    2017-04-07  2647  			 ep_index);
b10de142119a676 Sarah Sharp      2009-04-27  2648  		status = -EPIPE;
b10de142119a676 Sarah Sharp      2009-04-27  2649  		break;
0b7c105a04ca793 Felipe Balbi     2017-01-23  2650  	case COMP_SPLIT_TRANSACTION_ERROR:
76eac5d21a7164a Mathias Nyman    2020-03-12  2651  		xhci_dbg(xhci, "Split transaction error for slot %u ep %u\n",
76eac5d21a7164a Mathias Nyman    2020-03-12  2652  			 slot_id, ep_index);
76eac5d21a7164a Mathias Nyman    2020-03-12  2653  		status = -EPROTO;
76eac5d21a7164a Mathias Nyman    2020-03-12  2654  		break;
0b7c105a04ca793 Felipe Balbi     2017-01-23  2655  	case COMP_USB_TRANSACTION_ERROR:
b7f769ae1b12608 Zhengjun Xing    2017-04-07  2656  		xhci_dbg(xhci, "Transfer error for slot %u ep %u on endpoint\n",
b7f769ae1b12608 Zhengjun Xing    2017-04-07  2657  			 slot_id, ep_index);
b10de142119a676 Sarah Sharp      2009-04-27  2658  		status = -EPROTO;
b10de142119a676 Sarah Sharp      2009-04-27  2659  		break;
0b7c105a04ca793 Felipe Balbi     2017-01-23  2660  	case COMP_BABBLE_DETECTED_ERROR:
b7f769ae1b12608 Zhengjun Xing    2017-04-07  2661  		xhci_dbg(xhci, "Babble error for slot %u ep %u on endpoint\n",
b7f769ae1b12608 Zhengjun Xing    2017-04-07  2662  			 slot_id, ep_index);
4a73143ced46786 Sarah Sharp      2009-07-27  2663  		status = -EOVERFLOW;
4a73143ced46786 Sarah Sharp      2009-07-27  2664  		break;
b3368382efe6e98 Mathias Nyman    2017-06-15  2665  	/* Completion codes for endpoint error state */
b3368382efe6e98 Mathias Nyman    2017-06-15  2666  	case COMP_TRB_ERROR:
b3368382efe6e98 Mathias Nyman    2017-06-15  2667  		xhci_warn(xhci,
b3368382efe6e98 Mathias Nyman    2017-06-15  2668  			  "WARN: TRB error for slot %u ep %u on endpoint\n",
b3368382efe6e98 Mathias Nyman    2017-06-15  2669  			  slot_id, ep_index);
b3368382efe6e98 Mathias Nyman    2017-06-15  2670  		status = -EILSEQ;
b3368382efe6e98 Mathias Nyman    2017-06-15  2671  		break;
b3368382efe6e98 Mathias Nyman    2017-06-15  2672  	/* completion codes not indicating endpoint state change */
0b7c105a04ca793 Felipe Balbi     2017-01-23  2673  	case COMP_DATA_BUFFER_ERROR:
b7f769ae1b12608 Zhengjun Xing    2017-04-07  2674  		xhci_warn(xhci,
b7f769ae1b12608 Zhengjun Xing    2017-04-07  2675  			  "WARN: HC couldn't access mem fast enough for slot %u ep %u\n",
b7f769ae1b12608 Zhengjun Xing    2017-04-07  2676  			  slot_id, ep_index);
b10de142119a676 Sarah Sharp      2009-04-27  2677  		status = -ENOSR;
b10de142119a676 Sarah Sharp      2009-04-27  2678  		break;
0b7c105a04ca793 Felipe Balbi     2017-01-23  2679  	case COMP_BANDWIDTH_OVERRUN_ERROR:
b7f769ae1b12608 Zhengjun Xing    2017-04-07  2680  		xhci_warn(xhci,
b7f769ae1b12608 Zhengjun Xing    2017-04-07  2681  			  "WARN: bandwidth overrun event for slot %u ep %u on endpoint\n",
b7f769ae1b12608 Zhengjun Xing    2017-04-07  2682  			  slot_id, ep_index);
986a92d44810cad Andiry Xu        2010-07-22  2683  		break;
0b7c105a04ca793 Felipe Balbi     2017-01-23  2684  	case COMP_ISOCH_BUFFER_OVERRUN:
b7f769ae1b12608 Zhengjun Xing    2017-04-07  2685  		xhci_warn(xhci,
b7f769ae1b12608 Zhengjun Xing    2017-04-07  2686  			  "WARN: buffer overrun event for slot %u ep %u on endpoint",
b7f769ae1b12608 Zhengjun Xing    2017-04-07  2687  			  slot_id, ep_index);
986a92d44810cad Andiry Xu        2010-07-22  2688  		break;
0b7c105a04ca793 Felipe Balbi     2017-01-23  2689  	case COMP_RING_UNDERRUN:
986a92d44810cad Andiry Xu        2010-07-22  2690  		/*
986a92d44810cad Andiry Xu        2010-07-22  2691  		 * When the Isoch ring is empty, the xHC will generate
986a92d44810cad Andiry Xu        2010-07-22  2692  		 * a Ring Overrun Event for IN Isoch endpoint or Ring
986a92d44810cad Andiry Xu        2010-07-22  2693  		 * Underrun Event for OUT Isoch endpoint.
986a92d44810cad Andiry Xu        2010-07-22  2694  		 */
986a92d44810cad Andiry Xu        2010-07-22  2695  		xhci_dbg(xhci, "underrun event on endpoint\n");
986a92d44810cad Andiry Xu        2010-07-22  2696  		if (!list_empty(&ep_ring->td_list))
986a92d44810cad Andiry Xu        2010-07-22  2697  			xhci_dbg(xhci, "Underrun Event for slot %d ep %d "
986a92d44810cad Andiry Xu        2010-07-22  2698  					"still with TDs queued?\n",
28ccd2962c66556 Matt Evans       2011-03-29  2699  				 TRB_TO_SLOT_ID(le32_to_cpu(event->flags)),
28ccd2962c66556 Matt Evans       2011-03-29  2700  				 ep_index);
986a92d44810cad Andiry Xu        2010-07-22  2701  		goto cleanup;
0b7c105a04ca793 Felipe Balbi     2017-01-23  2702  	case COMP_RING_OVERRUN:
986a92d44810cad Andiry Xu        2010-07-22  2703  		xhci_dbg(xhci, "overrun event on endpoint\n");
986a92d44810cad Andiry Xu        2010-07-22  2704  		if (!list_empty(&ep_ring->td_list))
986a92d44810cad Andiry Xu        2010-07-22  2705  			xhci_dbg(xhci, "Overrun Event for slot %d ep %d "
986a92d44810cad Andiry Xu        2010-07-22  2706  					"still with TDs queued?\n",
28ccd2962c66556 Matt Evans       2011-03-29  2707  				 TRB_TO_SLOT_ID(le32_to_cpu(event->flags)),
28ccd2962c66556 Matt Evans       2011-03-29  2708  				 ep_index);
986a92d44810cad Andiry Xu        2010-07-22  2709  		goto cleanup;
0b7c105a04ca793 Felipe Balbi     2017-01-23  2710  	case COMP_MISSED_SERVICE_ERROR:
d18240db797ed74 Andiry Xu        2010-07-22  2711  		/*
d18240db797ed74 Andiry Xu        2010-07-22  2712  		 * When encounter missed service error, one or more isoc tds
d18240db797ed74 Andiry Xu        2010-07-22  2713  		 * may be missed by xHC.
d18240db797ed74 Andiry Xu        2010-07-22  2714  		 * Set skip flag of the ep_ring; Complete the missed tds as
d18240db797ed74 Andiry Xu        2010-07-22  2715  		 * short transfer when process the ep_ring next time.
d18240db797ed74 Andiry Xu        2010-07-22  2716  		 */
d18240db797ed74 Andiry Xu        2010-07-22  2717  		ep->skip = true;
b7f769ae1b12608 Zhengjun Xing    2017-04-07  2718  		xhci_dbg(xhci,
b7f769ae1b12608 Zhengjun Xing    2017-04-07  2719  			 "Miss service interval error for slot %u ep %u, set skip flag\n",
b7f769ae1b12608 Zhengjun Xing    2017-04-07  2720  			 slot_id, ep_index);
d18240db797ed74 Andiry Xu        2010-07-22  2721  		goto cleanup;
0b7c105a04ca793 Felipe Balbi     2017-01-23  2722  	case COMP_NO_PING_RESPONSE_ERROR:
3b4739b8951d650 Mathias Nyman    2015-10-12  2723  		ep->skip = true;
b7f769ae1b12608 Zhengjun Xing    2017-04-07  2724  		xhci_dbg(xhci,
b7f769ae1b12608 Zhengjun Xing    2017-04-07  2725  			 "No Ping response error for slot %u ep %u, Skip one Isoc TD\n",
b7f769ae1b12608 Zhengjun Xing    2017-04-07  2726  			 slot_id, ep_index);
3b4739b8951d650 Mathias Nyman    2015-10-12  2727  		goto cleanup;
b3368382efe6e98 Mathias Nyman    2017-06-15  2728  
b3368382efe6e98 Mathias Nyman    2017-06-15  2729  	case COMP_INCOMPATIBLE_DEVICE_ERROR:
b3368382efe6e98 Mathias Nyman    2017-06-15  2730  		/* needs disable slot command to recover */
b3368382efe6e98 Mathias Nyman    2017-06-15  2731  		xhci_warn(xhci,
b3368382efe6e98 Mathias Nyman    2017-06-15  2732  			  "WARN: detect an incompatible device for slot %u ep %u",
b3368382efe6e98 Mathias Nyman    2017-06-15  2733  			  slot_id, ep_index);
b3368382efe6e98 Mathias Nyman    2017-06-15  2734  		status = -EPROTO;
b3368382efe6e98 Mathias Nyman    2017-06-15  2735  		break;
b10de142119a676 Sarah Sharp      2009-04-27  2736  	default:
b45b50691124700 Sarah Sharp      2009-12-09  2737  		if (xhci_is_vendor_info_code(xhci, trb_comp_code)) {
5ad6a529c28db36 Sarah Sharp      2009-11-11  2738  			status = 0;
5ad6a529c28db36 Sarah Sharp      2009-11-11  2739  			break;
5ad6a529c28db36 Sarah Sharp      2009-11-11  2740  		}
b7f769ae1b12608 Zhengjun Xing    2017-04-07  2741  		xhci_warn(xhci,
b7f769ae1b12608 Zhengjun Xing    2017-04-07  2742  			  "ERROR Unknown event condition %u for slot %u ep %u , HC probably busted\n",
b7f769ae1b12608 Zhengjun Xing    2017-04-07  2743  			  trb_comp_code, slot_id, ep_index);
986a92d44810cad Andiry Xu        2010-07-22  2744  		goto cleanup;
986a92d44810cad Andiry Xu        2010-07-22  2745  	}
986a92d44810cad Andiry Xu        2010-07-22  2746  
d18240db797ed74 Andiry Xu        2010-07-22  2747  	do {
d18240db797ed74 Andiry Xu        2010-07-22  2748  		/* This TRB should be in the TD at the head of this ring's
d18240db797ed74 Andiry Xu        2010-07-22  2749  		 * TD list.
d18240db797ed74 Andiry Xu        2010-07-22  2750  		 */
986a92d44810cad Andiry Xu        2010-07-22 @2751  		if (list_empty(&ep_ring->td_list)) {
a83d6755814e461 Sarah Sharp      2013-03-18  2752  			/*
e4ec40ec4b260ef Mathias Nyman    2017-12-01  2753  			 * Don't print wanings if it's due to a stopped endpoint
e4ec40ec4b260ef Mathias Nyman    2017-12-01  2754  			 * generating an extra completion event if the device
e4ec40ec4b260ef Mathias Nyman    2017-12-01  2755  			 * was suspended. Or, a event for the last TRB of a
e4ec40ec4b260ef Mathias Nyman    2017-12-01  2756  			 * short TD we already got a short event for.
e4ec40ec4b260ef Mathias Nyman    2017-12-01  2757  			 * The short TD is already removed from the TD list.
a83d6755814e461 Sarah Sharp      2013-03-18  2758  			 */
e4ec40ec4b260ef Mathias Nyman    2017-12-01  2759  
0b7c105a04ca793 Felipe Balbi     2017-01-23  2760  			if (!(trb_comp_code == COMP_STOPPED ||
e4ec40ec4b260ef Mathias Nyman    2017-12-01  2761  			      trb_comp_code == COMP_STOPPED_LENGTH_INVALID ||
e4ec40ec4b260ef Mathias Nyman    2017-12-01  2762  			      ep_ring->last_td_was_short)) {
a83d6755814e461 Sarah Sharp      2013-03-18  2763  				xhci_warn(xhci, "WARN Event TRB for slot %d ep %d with no TDs queued?\n",
28ccd2962c66556 Matt Evans       2011-03-29  2764  						TRB_TO_SLOT_ID(le32_to_cpu(event->flags)),
28ccd2962c66556 Matt Evans       2011-03-29  2765  						ep_index);
a83d6755814e461 Sarah Sharp      2013-03-18  2766  			}
d18240db797ed74 Andiry Xu        2010-07-22  2767  			if (ep->skip) {
d18240db797ed74 Andiry Xu        2010-07-22  2768  				ep->skip = false;
b7f769ae1b12608 Zhengjun Xing    2017-04-07  2769  				xhci_dbg(xhci, "td_list is empty while skip flag set. Clear skip flag for slot %u ep %u.\n",
b7f769ae1b12608 Zhengjun Xing    2017-04-07  2770  					 slot_id, ep_index);
d18240db797ed74 Andiry Xu        2010-07-22  2771  			}
93ceaa808e8defc Mathias Nyman    2020-04-21  2772  			if (trb_comp_code == COMP_STALL_ERROR ||
93ceaa808e8defc Mathias Nyman    2020-04-21  2773  			    xhci_requires_manual_halt_cleanup(xhci, ep_ctx,
93ceaa808e8defc Mathias Nyman    2020-04-21  2774  							      trb_comp_code)) {
7428a253315cefa Mathias Nyman    2022-11-30  2775  				xhci_handle_halted_endpoint(xhci, ep, NULL,
93ceaa808e8defc Mathias Nyman    2020-04-21  2776  							    EP_HARD_RESET);
93ceaa808e8defc Mathias Nyman    2020-04-21  2777  			}
b10de142119a676 Sarah Sharp      2009-04-27  2778  			goto cleanup;
b10de142119a676 Sarah Sharp      2009-04-27  2779  		}
986a92d44810cad Andiry Xu        2010-07-22  2780  
c2d7b49f42f50d7 Andiry Xu        2011-09-19  2781  		/* We've skipped all the TDs on the ep ring when ep->skip set */
c2d7b49f42f50d7 Andiry Xu        2011-09-19  2782  		if (ep->skip && td_num == 0) {
c2d7b49f42f50d7 Andiry Xu        2011-09-19  2783  			ep->skip = false;
b7f769ae1b12608 Zhengjun Xing    2017-04-07  2784  			xhci_dbg(xhci, "All tds on the ep_ring skipped. Clear skip flag for slot %u ep %u.\n",
b7f769ae1b12608 Zhengjun Xing    2017-04-07  2785  				 slot_id, ep_index);
c2d7b49f42f50d7 Andiry Xu        2011-09-19  2786  			goto cleanup;
c2d7b49f42f50d7 Andiry Xu        2011-09-19  2787  		}
c2d7b49f42f50d7 Andiry Xu        2011-09-19  2788  
04861f83367eaa3 Felipe Balbi     2017-01-23  2789  		td = list_first_entry(&ep_ring->td_list, struct xhci_td,
04861f83367eaa3 Felipe Balbi     2017-01-23  2790  				      td_list);
c2d7b49f42f50d7 Andiry Xu        2011-09-19  2791  		if (ep->skip)
c2d7b49f42f50d7 Andiry Xu        2011-09-19  2792  			td_num--;
926008c9386dde0 Dmitry Torokhov  2011-03-23  2793  
986a92d44810cad Andiry Xu        2010-07-22  2794  		/* Is this a TRB in the currently executing TD? */
f97c08ae329bcf0 Mathias Nyman    2016-11-11  2795  		ep_seg = trb_in_td(xhci, ep_ring->deq_seg, ep_ring->dequeue,
f97c08ae329bcf0 Mathias Nyman    2016-11-11  2796  				td->last_trb, ep_trb_dma, false);
e1cf486d881d853 Alex He          2011-06-03  2797  
e1cf486d881d853 Alex He          2011-06-03  2798  		/*
e1cf486d881d853 Alex He          2011-06-03  2799  		 * Skip the Force Stopped Event. The event_trb(event_dma) of FSE
e1cf486d881d853 Alex He          2011-06-03  2800  		 * is not in the current TD pointed by ep_ring->dequeue because
e1cf486d881d853 Alex He          2011-06-03  2801  		 * that the hardware dequeue pointer still at the previous TRB
e1cf486d881d853 Alex He          2011-06-03  2802  		 * of the current TD. The previous TRB maybe a Link TD or the
e1cf486d881d853 Alex He          2011-06-03  2803  		 * last TRB of the previous TD. The command completion handle
e1cf486d881d853 Alex He          2011-06-03  2804  		 * will take care the rest.
e1cf486d881d853 Alex He          2011-06-03  2805  		 */
0b7c105a04ca793 Felipe Balbi     2017-01-23  2806  		if (!ep_seg && (trb_comp_code == COMP_STOPPED ||
0b7c105a04ca793 Felipe Balbi     2017-01-23  2807  			   trb_comp_code == COMP_STOPPED_LENGTH_INVALID)) {
e1cf486d881d853 Alex He          2011-06-03  2808  			goto cleanup;
e1cf486d881d853 Alex He          2011-06-03  2809  		}
e1cf486d881d853 Alex He          2011-06-03  2810  
f97c08ae329bcf0 Mathias Nyman    2016-11-11  2811  		if (!ep_seg) {
926008c9386dde0 Dmitry Torokhov  2011-03-23  2812  			if (!ep->skip ||
926008c9386dde0 Dmitry Torokhov  2011-03-23  2813  			    !usb_endpoint_xfer_isoc(&td->urb->ep->desc)) {
ad808333d8201d5 Sarah Sharp      2011-05-25  2814  				/* Some host controllers give a spurious
ad808333d8201d5 Sarah Sharp      2011-05-25  2815  				 * successful event after a short transfer.
ad808333d8201d5 Sarah Sharp      2011-05-25  2816  				 * Ignore it.
ad808333d8201d5 Sarah Sharp      2011-05-25  2817  				 */
ad808333d8201d5 Sarah Sharp      2011-05-25  2818  				if ((xhci->quirks & XHCI_SPURIOUS_SUCCESS) &&
ad808333d8201d5 Sarah Sharp      2011-05-25  2819  						ep_ring->last_td_was_short) {
ad808333d8201d5 Sarah Sharp      2011-05-25  2820  					ep_ring->last_td_was_short = false;
ad808333d8201d5 Sarah Sharp      2011-05-25  2821  					goto cleanup;
ad808333d8201d5 Sarah Sharp      2011-05-25  2822  				}
986a92d44810cad Andiry Xu        2010-07-22  2823  				/* HC is busted, give up! */
926008c9386dde0 Dmitry Torokhov  2011-03-23  2824  				xhci_err(xhci,
926008c9386dde0 Dmitry Torokhov  2011-03-23  2825  					"ERROR Transfer event TRB DMA ptr not "
cffb9be80f8a6d5 Hans de Goede    2014-08-20  2826  					"part of current TD ep_index %d "
cffb9be80f8a6d5 Hans de Goede    2014-08-20  2827  					"comp_code %u\n", ep_index,
cffb9be80f8a6d5 Hans de Goede    2014-08-20  2828  					trb_comp_code);
cffb9be80f8a6d5 Hans de Goede    2014-08-20  2829  				trb_in_td(xhci, ep_ring->deq_seg,
cffb9be80f8a6d5 Hans de Goede    2014-08-20  2830  					  ep_ring->dequeue, td->last_trb,
f97c08ae329bcf0 Mathias Nyman    2016-11-11  2831  					  ep_trb_dma, true);
986a92d44810cad Andiry Xu        2010-07-22  2832  				return -ESHUTDOWN;
986a92d44810cad Andiry Xu        2010-07-22  2833  			}
986a92d44810cad Andiry Xu        2010-07-22  2834  
a6ccd1fd4bd4fca Mathias Nyman    2021-01-29  2835  			skip_isoc_td(xhci, td, ep, status);
926008c9386dde0 Dmitry Torokhov  2011-03-23  2836  			goto cleanup;
926008c9386dde0 Dmitry Torokhov  2011-03-23  2837  		}
0b7c105a04ca793 Felipe Balbi     2017-01-23  2838  		if (trb_comp_code == COMP_SHORT_PACKET)
ad808333d8201d5 Sarah Sharp      2011-05-25  2839  			ep_ring->last_td_was_short = true;
ad808333d8201d5 Sarah Sharp      2011-05-25  2840  		else
ad808333d8201d5 Sarah Sharp      2011-05-25  2841  			ep_ring->last_td_was_short = false;
926008c9386dde0 Dmitry Torokhov  2011-03-23  2842  
926008c9386dde0 Dmitry Torokhov  2011-03-23  2843  		if (ep->skip) {
b7f769ae1b12608 Zhengjun Xing    2017-04-07  2844  			xhci_dbg(xhci,
b7f769ae1b12608 Zhengjun Xing    2017-04-07  2845  				 "Found td. Clear skip flag for slot %u ep %u.\n",
b7f769ae1b12608 Zhengjun Xing    2017-04-07  2846  				 slot_id, ep_index);
926008c9386dde0 Dmitry Torokhov  2011-03-23  2847  			ep->skip = false;
926008c9386dde0 Dmitry Torokhov  2011-03-23  2848  		}
926008c9386dde0 Dmitry Torokhov  2011-03-23  2849  
f97c08ae329bcf0 Mathias Nyman    2016-11-11  2850  		ep_trb = &ep_seg->trbs[(ep_trb_dma - ep_seg->dma) /
f97c08ae329bcf0 Mathias Nyman    2016-11-11  2851  						sizeof(*ep_trb)];
a37c3f76e6a6b5e Felipe Balbi     2017-01-23  2852  
a37c3f76e6a6b5e Felipe Balbi     2017-01-23  2853  		trace_xhci_handle_transfer(ep_ring,
a37c3f76e6a6b5e Felipe Balbi     2017-01-23  2854  				(struct xhci_generic_trb *) ep_trb);
a37c3f76e6a6b5e Felipe Balbi     2017-01-23  2855  
d18240db797ed74 Andiry Xu        2010-07-22  2856  		/*
810a624bd1b64b1 Lu Baolu         2017-10-06  2857  		 * No-op TRB could trigger interrupts in a case where
810a624bd1b64b1 Lu Baolu         2017-10-06  2858  		 * a URB was killed and a STALL_ERROR happens right
810a624bd1b64b1 Lu Baolu         2017-10-06  2859  		 * after the endpoint ring stopped. Reset the halted
810a624bd1b64b1 Lu Baolu         2017-10-06  2860  		 * endpoint. Otherwise, the endpoint remains stalled
810a624bd1b64b1 Lu Baolu         2017-10-06  2861  		 * indefinitely.
d18240db797ed74 Andiry Xu        2010-07-22  2862  		 */
a6ccd1fd4bd4fca Mathias Nyman    2021-01-29  2863  
f97c08ae329bcf0 Mathias Nyman    2016-11-11  2864  		if (trb_is_noop(ep_trb)) {
810a624bd1b64b1 Lu Baolu         2017-10-06  2865  			if (trb_comp_code == COMP_STALL_ERROR ||
810a624bd1b64b1 Lu Baolu         2017-10-06  2866  			    xhci_requires_manual_halt_cleanup(xhci, ep_ctx,
810a624bd1b64b1 Lu Baolu         2017-10-06  2867  							      trb_comp_code))
7428a253315cefa Mathias Nyman    2022-11-30  2868  				xhci_handle_halted_endpoint(xhci, ep, td,
7428a253315cefa Mathias Nyman    2022-11-30  2869  							    EP_HARD_RESET);
d18240db797ed74 Andiry Xu        2010-07-22  2870  			goto cleanup;
d18240db797ed74 Andiry Xu        2010-07-22  2871  		}
d18240db797ed74 Andiry Xu        2010-07-22  2872  
a6ccd1fd4bd4fca Mathias Nyman    2021-01-29  2873  		td->status = status;
a6ccd1fd4bd4fca Mathias Nyman    2021-01-29  2874  
0c03d89d0c71722 Mathias Nyman    2016-11-11  2875  		/* update the urb's actual_length and give back to the core */
22405ed2e1bd8d2 Andiry Xu        2010-07-22  2876  		if (usb_endpoint_xfer_control(&td->urb->ep->desc))
e9fcb07704fcef6 Mathias Nyman    2021-04-06  2877  			process_ctrl_td(xhci, ep, ep_ring, td, ep_trb, event);
04e51901dd44f40 Andiry Xu        2010-07-22  2878  		else if (usb_endpoint_xfer_isoc(&td->urb->ep->desc))
e9fcb07704fcef6 Mathias Nyman    2021-04-06  2879  			process_isoc_td(xhci, ep, ep_ring, td, ep_trb, event);
2f697f6cbff155b Sarah Sharp      2009-08-28  2880  		else
e9fcb07704fcef6 Mathias Nyman    2021-04-06  2881  			process_bulk_intr_td(xhci, ep, ep_ring, td, ep_trb, event);
4422da61550b2fe Andiry Xu        2010-07-22  2882  cleanup:
3b4739b8951d650 Mathias Nyman    2015-10-12  2883  		handling_skipped_tds = ep->skip &&
0b7c105a04ca793 Felipe Balbi     2017-01-23  2884  			trb_comp_code != COMP_MISSED_SERVICE_ERROR &&
0b7c105a04ca793 Felipe Balbi     2017-01-23  2885  			trb_comp_code != COMP_NO_PING_RESPONSE_ERROR;
3b4739b8951d650 Mathias Nyman    2015-10-12  2886  
d18240db797ed74 Andiry Xu        2010-07-22  2887  	/*
d18240db797ed74 Andiry Xu        2010-07-22  2888  	 * If ep->skip is set, it means there are missed tds on the
d18240db797ed74 Andiry Xu        2010-07-22  2889  	 * endpoint ring need to take care of.
d18240db797ed74 Andiry Xu        2010-07-22  2890  	 * Process them as short transfer until reach the td pointed by
d18240db797ed74 Andiry Xu        2010-07-22  2891  	 * the event.
d18240db797ed74 Andiry Xu        2010-07-22  2892  	 */
3b4739b8951d650 Mathias Nyman    2015-10-12  2893  	} while (handling_skipped_tds);
d18240db797ed74 Andiry Xu        2010-07-22  2894  
d0e96f5a71a032c Sarah Sharp      2009-04-27  2895  	return 0;
b3368382efe6e98 Mathias Nyman    2017-06-15  2896  
b3368382efe6e98 Mathias Nyman    2017-06-15  2897  err_out:
b3368382efe6e98 Mathias Nyman    2017-06-15  2898  	xhci_err(xhci, "@%016llx %08x %08x %08x %08x\n",
b3368382efe6e98 Mathias Nyman    2017-06-15  2899  		 (unsigned long long) xhci_trb_virt_to_dma(
b17a57f89f69069 Mathias Nyman    2023-02-02  2900  			 ir->event_ring->deq_seg,
b17a57f89f69069 Mathias Nyman    2023-02-02  2901  			 ir->event_ring->dequeue),
b3368382efe6e98 Mathias Nyman    2017-06-15  2902  		 lower_32_bits(le64_to_cpu(event->buffer)),
b3368382efe6e98 Mathias Nyman    2017-06-15  2903  		 upper_32_bits(le64_to_cpu(event->buffer)),
b3368382efe6e98 Mathias Nyman    2017-06-15  2904  		 le32_to_cpu(event->transfer_len),
b3368382efe6e98 Mathias Nyman    2017-06-15  2905  		 le32_to_cpu(event->flags));
b3368382efe6e98 Mathias Nyman    2017-06-15  2906  	return -ENODEV;
d0e96f5a71a032c Sarah Sharp      2009-04-27  2907  }
d0e96f5a71a032c Sarah Sharp      2009-04-27  2908  

:::::: The code at line 2751 was first introduced by commit
:::::: 986a92d44810cad915279fdc942e2fd2c2857499 USB: xHCI: adds new cases to trb_comp_code switch

:::::: TO: Andiry Xu <andiry.xu@amd.com>
:::::: CC: Greg Kroah-Hartman <gregkh@suse.de>

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2024-12-13 23:53 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-10-25 21:58 [android-common:android15-6.6 28/33] drivers/usb/host/xhci-ring.c:2751:27-34: ERROR: ep_ring is NULL but dereferenced kernel test robot
  -- strict thread matches above, loose matches on Subject: below --
2024-12-13 23:53 kernel test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.