diff options
author | Ruslan Bilovol <ruslan.bilovol@ti.com> | 2012-05-17 20:54:36 +0300 |
---|---|---|
committer | Ziyann <jaraidaniel@gmail.com> | 2014-10-01 12:58:38 +0200 |
commit | 2deacf460185818536341b164e6585ccc9dd2e74 (patch) | |
tree | 41fd6b7f4562edf38d7ff092fe1216512979a7f8 /drivers/net/usb | |
parent | 210f6b16d367803c77fcfc4f2c14ca06fb89835d (diff) | |
download | kernel_samsung_tuna-2deacf460185818536341b164e6585ccc9dd2e74.zip kernel_samsung_tuna-2deacf460185818536341b164e6585ccc9dd2e74.tar.gz kernel_samsung_tuna-2deacf460185818536341b164e6585ccc9dd2e74.tar.bz2 |
usbnet: dma alignment fix
Allow usb ethernet driver to be used with a controller
driver that does not support DMA to adresses not aligned
to a 4-byte boundary
Change-Id: I017163921792c888c1cffff2531de55ef7bdb7f3
Signed-off-by: Ruslan Bilovol <ruslan.bilovol@ti.com>
Conflicts:
drivers/net/usb/usbnet.c
Diffstat (limited to 'drivers/net/usb')
-rwxr-xr-x[-rw-r--r--] | drivers/net/usb/usbnet.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/drivers/net/usb/usbnet.c b/drivers/net/usb/usbnet.c index df75d49..ae0bd39 100644..100755 --- a/drivers/net/usb/usbnet.c +++ b/drivers/net/usb/usbnet.c @@ -339,13 +339,20 @@ static int rx_submit (struct usbnet *dev, struct urb *urb, gfp_t flags) int retval = 0; unsigned long lockflags; size_t size = dev->rx_urb_size; + size_t net_ip_align = NET_IP_ALIGN; - if ((skb = alloc_skb (size + NET_IP_ALIGN, flags)) == NULL) { + if (dev->udev && dev->udev->bus && dev->udev->bus->uses_dma && + dev->udev->bus->dma_align) + net_ip_align = 0; + + if ((skb = alloc_skb (size + net_ip_align, flags)) == NULL) { netif_dbg(dev, rx_err, dev->net, "no rx skb\n"); usbnet_defer_kevent (dev, EVENT_RX_MEMORY); usb_free_urb (urb); return -ENOMEM; } + if (net_ip_align) + skb_reserve (skb, net_ip_align); entry = (struct skb_data *) skb->cb; entry->urb = urb; |