mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
USB: cdc-wdm: no need to fill the in request URB every time it's submitted
Filling the same URB with the exact same data is pointless. It can be filled once and resubmitted. And not doing buffer allocation and URB filling at the same place only serves to hide size mismatch bugs Signed-off-by: Bjørn Mork <bjorn@mork.no> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
0b238583ac
commit
19b85b3b87
1 changed files with 19 additions and 20 deletions
|
@ -159,11 +159,9 @@ static void wdm_int_callback(struct urb *urb)
|
|||
int rv = 0;
|
||||
int status = urb->status;
|
||||
struct wdm_device *desc;
|
||||
struct usb_ctrlrequest *req;
|
||||
struct usb_cdc_notification *dr;
|
||||
|
||||
desc = urb->context;
|
||||
req = desc->irq;
|
||||
dr = (struct usb_cdc_notification *)desc->sbuf;
|
||||
|
||||
if (status) {
|
||||
|
@ -210,24 +208,6 @@ static void wdm_int_callback(struct urb *urb)
|
|||
goto exit;
|
||||
}
|
||||
|
||||
req->bRequestType = (USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE);
|
||||
req->bRequest = USB_CDC_GET_ENCAPSULATED_RESPONSE;
|
||||
req->wValue = 0;
|
||||
req->wIndex = desc->inum;
|
||||
req->wLength = cpu_to_le16(desc->wMaxCommand);
|
||||
|
||||
usb_fill_control_urb(
|
||||
desc->response,
|
||||
interface_to_usbdev(desc->intf),
|
||||
/* using common endpoint 0 */
|
||||
usb_rcvctrlpipe(interface_to_usbdev(desc->intf), 0),
|
||||
(unsigned char *)req,
|
||||
desc->inbuf,
|
||||
desc->wMaxCommand,
|
||||
wdm_in_callback,
|
||||
desc
|
||||
);
|
||||
desc->response->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
|
||||
spin_lock(&desc->iuspin);
|
||||
clear_bit(WDM_READ, &desc->flags);
|
||||
set_bit(WDM_RESPONDING, &desc->flags);
|
||||
|
@ -734,6 +714,25 @@ next_desc:
|
|||
);
|
||||
desc->validity->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
|
||||
|
||||
desc->irq->bRequestType = (USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE);
|
||||
desc->irq->bRequest = USB_CDC_GET_ENCAPSULATED_RESPONSE;
|
||||
desc->irq->wValue = 0;
|
||||
desc->irq->wIndex = desc->inum;
|
||||
desc->irq->wLength = cpu_to_le16(desc->wMaxCommand);
|
||||
|
||||
usb_fill_control_urb(
|
||||
desc->response,
|
||||
interface_to_usbdev(desc->intf),
|
||||
/* using common endpoint 0 */
|
||||
usb_rcvctrlpipe(interface_to_usbdev(desc->intf), 0),
|
||||
(unsigned char *)desc->irq,
|
||||
desc->inbuf,
|
||||
desc->wMaxCommand,
|
||||
wdm_in_callback,
|
||||
desc
|
||||
);
|
||||
desc->response->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
|
||||
|
||||
usb_set_intfdata(intf, desc);
|
||||
rv = usb_register_dev(intf, &wdm_class);
|
||||
if (rv < 0)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue