1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
|
--- a/drivers/net/usb/usbnet.c
+++ b/drivers/net/usb/usbnet.c
@@ -1225,6 +1225,7 @@ EXPORT_SYMBOL_GPL(usbnet_tx_timeout);
/*-------------------------------------------------------------------------*/
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,35,0)
static int build_dma_sg(const struct sk_buff *skb, struct urb *urb)
{
unsigned num_sgs, total_len = 0;
@@ -1257,6 +1258,12 @@ static int build_dma_sg(const struct sk_
return 1;
}
+#else
+static int build_dma_sg(const struct sk_buff *skb, struct urb *urb)
+{
+ return -ENXIO;
+}
+#endif
netdev_tx_t usbnet_start_xmit (struct sk_buff *skb,
struct net_device *net)
@@ -1313,12 +1320,19 @@ netdev_tx_t usbnet_start_xmit (struct sk
if (!(info->flags & FLAG_SEND_ZLP)) {
if (!(info->flags & FLAG_MULTI_PACKET)) {
length++;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,35,0)
if (skb_tailroom(skb) && !urb->num_sgs) {
skb->data[skb->len] = 0;
__skb_put(skb, 1);
} else if (urb->num_sgs)
sg_set_buf(&urb->sg[urb->num_sgs++],
dev->padding_pkt, 1);
+#else
+ if (skb_tailroom(skb)) {
+ skb->data[skb->len] = 0;
+ __skb_put(skb, 1);
+ }
+#endif
}
} else
urb->transfer_flags |= URB_ZERO_PACKET;
@@ -1373,7 +1387,9 @@ not_drop:
if (skb)
dev_kfree_skb_any (skb);
if (urb) {
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,35,0)
kfree(urb->sg);
+#endif
usb_free_urb(urb);
}
} else
@@ -1426,7 +1442,9 @@ static void usbnet_bh (unsigned long par
rx_process (dev, skb);
continue;
case tx_done:
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,35,0)
kfree(entry->urb->sg);
+#endif
case rx_cleanup:
usb_free_urb (entry->urb);
dev_kfree_skb (skb);
@@ -1781,7 +1799,9 @@ int usbnet_resume (struct usb_interface
retval = usb_submit_urb(res, GFP_ATOMIC);
if (retval < 0) {
dev_kfree_skb_any(skb);
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3,35,0)
kfree(res->sg);
+#endif
usb_free_urb(res);
usb_autopm_put_interface_async(dev->intf);
} else {
|