aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/usb
diff options
context:
space:
mode:
authorRuslan Bilovol <ruslan.bilovol@ti.com>2012-05-17 20:54:36 +0300
committerZiyann <jaraidaniel@gmail.com>2014-10-01 12:58:38 +0200
commit2deacf460185818536341b164e6585ccc9dd2e74 (patch)
tree41fd6b7f4562edf38d7ff092fe1216512979a7f8 /drivers/net/usb
parent210f6b16d367803c77fcfc4f2c14ca06fb89835d (diff)
downloadkernel_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.c9
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;