Re: [PATCH v2] usb/config: use proper endian access for wMaxPacketSize

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

 



Hi Sebastian,

On 29/07/11 19:05, Sebastian Andrzej Siewior wrote:
> wMaxPacketSize is __le16 and should be accessed as such. Also fix the
> wBytesPerInterval assignment while here.
> 
> v2: also fix the wBytesPerInterval assigment, noticed by Matt Evans
> 
> Signed-off-by: Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx>
> ---
> * Matt Evans | 2011-07-27 15:22:06 [+1000]:
> 
>> Good find, actually I hadn't seen that.  About 10 lines down there's a bad use
>> of wBytesPerInterval (which is now correctly typed thanks to your April patch)
>> but not written as LE:
>>
>>  CHECK   /home/matt/external-proj/usb-2.6/drivers/usb/core/config.c
>> ...
>> usb/drivers/usb/core/config.c:140:36: warning: incorrect type in assignment (different base types)
>> usb/drivers/usb/core/config.c:140:36:    expected restricted __le16 [usertype] wBytesPerInterval
>> usb/drivers/usb/core/config.c:140:36:    got int [signed] [assigned] max_tx
>>
>> Would you mind please fixing this while you're down there?
> 
> Here it comes. For some reason my sparse does not say a word.

Silly qu., but you're def. using C=2 CF="-D__CHECK_ENDIAN__" ?  Seems odd if sparse
isn't seeing this. :-/

>  drivers/usb/core/config.c |   11 ++++++-----
>  1 files changed, 6 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/usb/core/config.c b/drivers/usb/core/config.c
> index c962608..26678ca 100644
> --- a/drivers/usb/core/config.c
> +++ b/drivers/usb/core/config.c
> @@ -123,10 +123,11 @@ static void usb_parse_ss_endpoint_companion(struct device *ddev, int cfgno,
>  	}
>  
>  	if (usb_endpoint_xfer_isoc(&ep->desc))
> -		max_tx = ep->desc.wMaxPacketSize * (desc->bMaxBurst + 1) *
> -			(desc->bmAttributes + 1);
> +		max_tx = (desc->bMaxBurst + 1) * (desc->bmAttributes + 1) *
> +			le16_to_cpu(ep->desc.wMaxPacketSize);
>  	else if (usb_endpoint_xfer_int(&ep->desc))
> -		max_tx = ep->desc.wMaxPacketSize * (desc->bMaxBurst + 1);
> +		max_tx = le16_to_cpu(ep->desc.wMaxPacketSize) *
> +			(desc->bMaxBurst + 1);
>  	else
>  		max_tx = 999999;
>  	if (le16_to_cpu(desc->wBytesPerInterval) > max_tx) {
> @@ -134,10 +135,10 @@ static void usb_parse_ss_endpoint_companion(struct device *ddev, int cfgno,
>  				"config %d interface %d altsetting %d ep %d: "
>  				"setting to %d\n",
>  				usb_endpoint_xfer_isoc(&ep->desc) ? "Isoc" : "Int",
> -				desc->wBytesPerInterval,
> +				le16_to_cpu(desc->wBytesPerInterval),
>  				cfgno, inum, asnum, ep->desc.bEndpointAddress,
>  				max_tx);
> -		ep->ss_ep_comp.wBytesPerInterval = max_tx;
> +		ep->ss_ep_comp.wBytesPerInterval = cpu_to_le16(max_tx);
>  	}
>  }

Thanks! 

Acked-by: Matt Evans <matt@xxxxxxxxxx>


Matt
--
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