Re: [PATCH v2] xhci: Don't trace all short/incomplete receives

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

 



On Tue, Jan 21, 2014 at 12:02:56PM +0000, David Laight wrote:
> Don't trace short receives if URB_SHORT_NOT_OK is set.
> Short receives are normal for USB ethernet devices.
> 
> Don't trace unexpected incomplete receives if XHCI_TRUST_TX_LENGTH is set.
> Ratelimit the trace.

Your patch does more than what you wrote here.

> Signed-off-by: David Laight <david.laight@xxxxxxxxxx>
> ---
> If these two traces ever happen, then they will happen for every receive
> packet when using USB ethernet.
> If you need to enable the xhci_warn or xhci_dgb traces you don't want to
> be spammed with trace (syslogd will soon will the disk).
> 
> These patches won't apply to 3.12 because the trace texts have changed,
> however 3.12 also needs a kernel recompile to enable the traces and
> anyone doing that can probably manage to patch them out.

This is a cleanup, so it won't go into 3.12.  Only bug fixes get
backported to the stable kernels.  The messages are annoying, but they
don't trigger a bug.  People can work around them by turning off
CONFIG_USB_DEBUG.

> Changes for v2:
> 	Fixed so that it applies to Linus's current tree.
> 
>  drivers/usb/host/xhci-ring.c | 38 ++++++++++++++++++--------------------
>  1 file changed, 18 insertions(+), 20 deletions(-)
> 
> diff --git a/drivers/usb/host/xhci-ring.c b/drivers/usb/host/xhci-ring.c
> index a0b248c..0b3dd16 100644
> --- a/drivers/usb/host/xhci-ring.c
> +++ b/drivers/usb/host/xhci-ring.c
> @@ -2301,36 +2301,34 @@ static int process_bulk_intr_td(struct xhci_hcd *xhci, struct xhci_td *td,
>  	switch (trb_comp_code) {
>  	case COMP_SUCCESS:
>  		/* Double check that the HW transferred everything. */
> -		if (event_trb != td->last_trb ||
> -		    EVENT_TRB_LEN(le32_to_cpu(event->transfer_len)) != 0) {
> -			xhci_warn(xhci, "WARN Successful completion "
> -					"on short TX\n");
> -			if (td->urb->transfer_flags & URB_SHORT_NOT_OK)
> -				*status = -EREMOTEIO;
> -			else
> -				*status = 0;
> -			if ((xhci->quirks & XHCI_TRUST_TX_LENGTH))
> -				trb_comp_code = COMP_SHORT_TX;
> -		} else {
> +		if (event_trb == td->last_trb &&
> +		    EVENT_TRB_LEN(le32_to_cpu(event->transfer_len)) == 0) {
>  			*status = 0;
> +			break;

Your patch changes the behavior of the code here, for when the status
variable is set to either zero or -EREMOTEIO.  The code is hard to
reason about, so this really needs to be a separate patch from the one
that removes the traces.  Please send a patchset with two patches: one
to remove the trace, and another to clean up setting *status, in
whichever order makes the code clearest in the *status patch.

>  		}
> -		break;
> +		if (xhci->quirks & XHCI_TRUST_TX_LENGTH)
> +			trb_comp_code = COMP_SHORT_TX;

I don't think changing the trb_comp_code is a good idea.  There's a lot
of code that relies on it later, and it would take me a bit to figure
out if changing it is safe.

Sarah Sharp

> +		else
> +			xhci_warn_ratelimited(xhci,
> +			    "WARN Successful completion on short TX\n");
> +		/* FALLTHROUGH */
>  	case COMP_SHORT_TX:
> -		if (td->urb->transfer_flags & URB_SHORT_NOT_OK)
> +		if (td->urb->transfer_flags & URB_SHORT_NOT_OK) {
> +			xhci_dbg(xhci,
> +			    "ep %#x - asked for %d bytes, %d bytes untransferred\n",
> +			    td->urb->ep->desc.bEndpointAddress,
> +			    td->urb->transfer_buffer_length,
> +			    EVENT_TRB_LEN(le32_to_cpu(event->transfer_len)));
>  			*status = -EREMOTEIO;
> -		else
> +		} else {
>  			*status = 0;
> +		}
>  		break;
>  	default:
>  		/* Others already handled above */
>  		break;
>  	}
> -	if (trb_comp_code == COMP_SHORT_TX)
> -		xhci_dbg(xhci, "ep %#x - asked for %d bytes, "
> -				"%d bytes untransferred\n",
> -				td->urb->ep->desc.bEndpointAddress,
> -				td->urb->transfer_buffer_length,
> -				EVENT_TRB_LEN(le32_to_cpu(event->transfer_len)));
> +
>  	/* Fast path - was this the last TRB in the TD for this URB? */
>  	if (event_trb == td->last_trb) {
>  		if (EVENT_TRB_LEN(le32_to_cpu(event->transfer_len)) != 0) {
> -- 
> 1.8.1.2
> 
> 
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux