Re: linux-next: manual merge of the usb-gadget tree with Linus' tree

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

 



Hi Stephen,

On Fri, Jan 10, 2020 at 5:33 AM Stephen Rothwell <sfr@xxxxxxxxxxxxxxxx> wrote:
> Today's linux-next merge of the usb-gadget tree got a conflict in:
>
>   drivers/usb/cdns3/gadget.c
>
> between commit:
>
>   f616c3bda47e ("usb: cdns3: Fix dequeue implementation.")
>
> from Linus' tree and commit:
>
>   4f1fa63a6dc2 ("usb: cdns3: Add streams support to cadence USB3 DRD driver")
>
> from the usb-gadget tree.
>
> I have no idea how to handle this, so I just dropped the usb-gadget tree
> for today - it clearly needs to be rebased on Linus' tree anyway (it
> has a few shared patches that are different commits and there are
> further changes to this file in Linus' tree as well.  rebasing onto
> (or merging with) v5.5-rc6 may be useful.

For today's renesas-drivers, I'm using the attached conflict resolution.

Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds
diff --cc drivers/usb/cdns3/gadget.c
index e4820bd4b5791381,4dadc85ad992f08a..0000000000000000
--- a/drivers/usb/cdns3/gadget.c
+++ b/drivers/usb/cdns3/gadget.c
@@@ -1145,37 -1436,56 +1436,64 @@@ static void cdns3_transfer_completed(st
  		request = cdns3_next_request(&priv_ep->pending_req_list);
  		priv_req = to_cdns3_request(request);
  
 +		trb = priv_ep->trb_pool + priv_ep->dequeue;
 +
 +		/* Request was dequeued and TRB was changed to TRB_LINK. */
 +		if (TRB_FIELD_TO_TYPE(trb->control) == TRB_LINK) {
 +			trace_cdns3_complete_trb(priv_ep, trb);
 +			cdns3_move_deq_to_next_trb(priv_req);
 +		}
 +
- 		/* Re-select endpoint. It could be changed by other CPU during
- 		 * handling usb_gadget_giveback_request.
- 		 */
- 		cdns3_select_ep(priv_dev, priv_ep->endpoint.address);
+ 		if (!request->stream_id) {
+ 			/* Re-select endpoint. It could be changed by other CPU
+ 			 * during handling usb_gadget_giveback_request.
+ 			 */
+ 			cdns3_select_ep(priv_dev, priv_ep->endpoint.address);
  
- 		if (!cdns3_request_handled(priv_ep, priv_req))
- 			goto prepare_next_td;
+ 			if (!cdns3_request_handled(priv_ep, priv_req))
+ 				goto prepare_next_td;
  
- 		trb = priv_ep->trb_pool + priv_ep->dequeue;
- 		trace_cdns3_complete_trb(priv_ep, trb);
+ 			trb = priv_ep->trb_pool + priv_ep->dequeue;
+ 			trace_cdns3_complete_trb(priv_ep, trb);
+ 
+ 			if (trb != priv_req->trb)
+ 				dev_warn(priv_dev->dev,
+ 					 "request_trb=0x%p, queue_trb=0x%p\n",
+ 					 priv_req->trb, trb);
  
- 		if (trb != priv_req->trb)
- 			dev_warn(priv_dev->dev,
- 				 "request_trb=0x%p, queue_trb=0x%p\n",
- 				 priv_req->trb, trb);
+ 			request->actual = TRB_LEN(le32_to_cpu(trb->length));
+ 			cdns3_move_deq_to_next_trb(priv_req);
+ 			cdns3_gadget_giveback(priv_ep, priv_req, 0);
  
- 		request->actual = TRB_LEN(le32_to_cpu(trb->length));
- 		cdns3_move_deq_to_next_trb(priv_req);
- 		cdns3_gadget_giveback(priv_ep, priv_req, 0);
+ 			if (priv_ep->type != USB_ENDPOINT_XFER_ISOC &&
+ 			    TRBS_PER_SEGMENT == 2)
+ 				break;
+ 		} else {
+ 			/* Re-select endpoint. It could be changed by other CPU
+ 			 * during handling usb_gadget_giveback_request.
+ 			 */
+ 			cdns3_select_ep(priv_dev, priv_ep->endpoint.address);
+ 
+ 			trb = priv_ep->trb_pool;
+ 			trace_cdns3_complete_trb(priv_ep, trb);
  
- 		if (priv_ep->type != USB_ENDPOINT_XFER_ISOC &&
- 		    TRBS_PER_SEGMENT == 2)
+ 			if (trb != priv_req->trb)
+ 				dev_warn(priv_dev->dev,
+ 					 "request_trb=0x%p, queue_trb=0x%p\n",
+ 					 priv_req->trb, trb);
+ 
+ 			request->actual += TRB_LEN(le32_to_cpu(trb->length));
+ 
+ 			if (!request->num_sgs ||
+ 			    (request->num_sgs == (priv_ep->stream_sg_idx + 1))) {
+ 				priv_ep->stream_sg_idx = 0;
+ 				cdns3_gadget_giveback(priv_ep, priv_req, 0);
+ 			} else {
+ 				priv_ep->stream_sg_idx++;
+ 				cdns3_ep_run_stream_transfer(priv_ep, request);
+ 			}
  			break;
+ 		}
  	}
  	priv_ep->flags &= ~EP_PENDING_REQUEST;
  

[Index of Archives]     [Linux Kernel]     [Linux USB Development]     [Yosemite News]     [Linux SCSI]

  Powered by Linux