USB: remove uses of URB_NO_SETUP_DMA_MAP
This patch (as1350) removes all usages of coherent buffers for USB control-request setup-packet buffers. There's no good reason to reserve coherent memory for these things; control requests are hardly ever used in large quantity (the major exception is firmware transfers, and they aren't time-critical). Furthermore, only seven drivers used it. We might as well always use streaming DMA mappings for setup-packet buffers, and remove some extra complexity from usbcore. The DMA-mapping portion of hcd.c is currently in flux. A separate patch will be submitted to remove support for URB_NO_SETUP_DMA_MAP after everything else settles down. The removal should go smoothly, as by then nobody will be using it. Signed-off-by: Alan Stern <stern@rowland.harvard.edu> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Цей коміт міститься в:

зафіксовано
Greg Kroah-Hartman

джерело
749da5f82f
коміт
0ede76fcec
@@ -111,7 +111,6 @@ struct yealink_dev {
|
||||
struct yld_ctl_packet *ctl_data;
|
||||
dma_addr_t ctl_dma;
|
||||
struct usb_ctrlrequest *ctl_req;
|
||||
dma_addr_t ctl_req_dma;
|
||||
struct urb *urb_ctl;
|
||||
|
||||
char phys[64]; /* physical device path */
|
||||
@@ -836,8 +835,7 @@ static int usb_cleanup(struct yealink_dev *yld, int err)
|
||||
usb_free_urb(yld->urb_irq);
|
||||
usb_free_urb(yld->urb_ctl);
|
||||
|
||||
usb_buffer_free(yld->udev, sizeof(*(yld->ctl_req)),
|
||||
yld->ctl_req, yld->ctl_req_dma);
|
||||
kfree(yld->ctl_req);
|
||||
usb_buffer_free(yld->udev, USB_PKT_LEN,
|
||||
yld->ctl_data, yld->ctl_dma);
|
||||
usb_buffer_free(yld->udev, USB_PKT_LEN,
|
||||
@@ -896,8 +894,7 @@ static int usb_probe(struct usb_interface *intf, const struct usb_device_id *id)
|
||||
if (!yld->ctl_data)
|
||||
return usb_cleanup(yld, -ENOMEM);
|
||||
|
||||
yld->ctl_req = usb_buffer_alloc(udev, sizeof(*(yld->ctl_req)),
|
||||
GFP_ATOMIC, &yld->ctl_req_dma);
|
||||
yld->ctl_req = kmalloc(sizeof(*(yld->ctl_req)), GFP_KERNEL);
|
||||
if (yld->ctl_req == NULL)
|
||||
return usb_cleanup(yld, -ENOMEM);
|
||||
|
||||
@@ -936,10 +933,8 @@ static int usb_probe(struct usb_interface *intf, const struct usb_device_id *id)
|
||||
usb_fill_control_urb(yld->urb_ctl, udev, usb_sndctrlpipe(udev, 0),
|
||||
(void *)yld->ctl_req, yld->ctl_data, USB_PKT_LEN,
|
||||
urb_ctl_callback, yld);
|
||||
yld->urb_ctl->setup_dma = yld->ctl_req_dma;
|
||||
yld->urb_ctl->transfer_dma = yld->ctl_dma;
|
||||
yld->urb_ctl->transfer_flags |= URB_NO_SETUP_DMA_MAP |
|
||||
URB_NO_TRANSFER_DMA_MAP;
|
||||
yld->urb_ctl->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
|
||||
yld->urb_ctl->dev = udev;
|
||||
|
||||
/* find out the physical bus location */
|
||||
|
Посилання в новій задачі
Заблокувати користувача