summaryrefslogtreecommitdiff
path: root/patches/collateral-evolutions/network/78-usb-sg/usbnet.patch
blob: 9aaf5819df90122954be68d17eee1bf797ad584d (plain)
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 {