aboutsummaryrefslogtreecommitdiffstats
path: root/net/8021q
diff options
context:
space:
mode:
authorRussell King <rmk@dyn-67.arm.linux.org.uk>2009-03-28 16:29:51 -0400
committerRussell King <rmk+kernel@arm.linux.org.uk>2009-03-28 16:29:51 -0400
commited40d0c472b136682b2fcba05f89762859c7374f (patch)
tree076b83a26bcd63d6158463735dd34c10bbc591dc /net/8021q
parent9e495834e59ca9b29f1a1f63b9f5533bb022ac49 (diff)
parent5d80f8e5a9dc9c9a94d4aeaa567e219a808b8a4a (diff)
Merge branch 'origin' into devel
Conflicts: sound/soc/pxa/pxa2xx-i2s.c
Diffstat (limited to 'net/8021q')
-rw-r--r--net/8021q/vlan.c4
-rw-r--r--net/8021q/vlan_core.c53
2 files changed, 15 insertions, 42 deletions
diff --git a/net/8021q/vlan.c b/net/8021q/vlan.c
index 41e8f65bd3f0..2b7390e377b3 100644
--- a/net/8021q/vlan.c
+++ b/net/8021q/vlan.c
@@ -51,8 +51,8 @@ const char vlan_version[] = DRV_VERSION;
51static const char vlan_copyright[] = "Ben Greear <greearb@candelatech.com>"; 51static const char vlan_copyright[] = "Ben Greear <greearb@candelatech.com>";
52static const char vlan_buggyright[] = "David S. Miller <davem@redhat.com>"; 52static const char vlan_buggyright[] = "David S. Miller <davem@redhat.com>";
53 53
54static struct packet_type vlan_packet_type = { 54static struct packet_type vlan_packet_type __read_mostly = {
55 .type = __constant_htons(ETH_P_8021Q), 55 .type = cpu_to_be16(ETH_P_8021Q),
56 .func = vlan_skb_recv, /* VLAN receive method */ 56 .func = vlan_skb_recv, /* VLAN receive method */
57}; 57};
58 58
diff --git a/net/8021q/vlan_core.c b/net/8021q/vlan_core.c
index 2886d2fb9ab5..654e45f5719d 100644
--- a/net/8021q/vlan_core.c
+++ b/net/8021q/vlan_core.c
@@ -89,38 +89,27 @@ static int vlan_gro_common(struct napi_struct *napi, struct vlan_group *grp,
89 goto drop; 89 goto drop;
90 90
91 for (p = napi->gro_list; p; p = p->next) { 91 for (p = napi->gro_list; p; p = p->next) {
92 NAPI_GRO_CB(p)->same_flow = p->dev == skb->dev; 92 NAPI_GRO_CB(p)->same_flow =
93 p->dev == skb->dev && !compare_ether_header(
94 skb_mac_header(p), skb_gro_mac_header(skb));
93 NAPI_GRO_CB(p)->flush = 0; 95 NAPI_GRO_CB(p)->flush = 0;
94 } 96 }
95 97
96 return dev_gro_receive(napi, skb); 98 return dev_gro_receive(napi, skb);
97 99
98drop: 100drop:
99 return 2; 101 return GRO_DROP;
100} 102}
101 103
102int vlan_gro_receive(struct napi_struct *napi, struct vlan_group *grp, 104int vlan_gro_receive(struct napi_struct *napi, struct vlan_group *grp,
103 unsigned int vlan_tci, struct sk_buff *skb) 105 unsigned int vlan_tci, struct sk_buff *skb)
104{ 106{
105 int err = NET_RX_SUCCESS; 107 if (netpoll_rx_on(skb))
108 return vlan_hwaccel_receive_skb(skb, grp, vlan_tci);
106 109
107 if (netpoll_receive_skb(skb)) 110 skb_gro_reset_offset(skb);
108 return NET_RX_DROP;
109
110 switch (vlan_gro_common(napi, grp, vlan_tci, skb)) {
111 case -1:
112 return netif_receive_skb(skb);
113 111
114 case 2: 112 return napi_skb_finish(vlan_gro_common(napi, grp, vlan_tci, skb), skb);
115 err = NET_RX_DROP;
116 /* fall through */
117
118 case 1:
119 kfree_skb(skb);
120 break;
121 }
122
123 return err;
124} 113}
125EXPORT_SYMBOL(vlan_gro_receive); 114EXPORT_SYMBOL(vlan_gro_receive);
126 115
@@ -128,30 +117,14 @@ int vlan_gro_frags(struct napi_struct *napi, struct vlan_group *grp,
128 unsigned int vlan_tci, struct napi_gro_fraginfo *info) 117 unsigned int vlan_tci, struct napi_gro_fraginfo *info)
129{ 118{
130 struct sk_buff *skb = napi_fraginfo_skb(napi, info); 119 struct sk_buff *skb = napi_fraginfo_skb(napi, info);
131 int err = NET_RX_DROP;
132 120
133 if (!skb) 121 if (!skb)
134 goto out; 122 return NET_RX_DROP;
135
136 if (netpoll_receive_skb(skb))
137 goto out;
138
139 err = NET_RX_SUCCESS;
140
141 switch (vlan_gro_common(napi, grp, vlan_tci, skb)) {
142 case -1:
143 return netif_receive_skb(skb);
144
145 case 2:
146 err = NET_RX_DROP;
147 /* fall through */
148 123
149 case 1: 124 if (netpoll_rx_on(skb))
150 napi_reuse_skb(napi, skb); 125 return vlan_hwaccel_receive_skb(skb, grp, vlan_tci);
151 break;
152 }
153 126
154out: 127 return napi_frags_finish(napi, skb,
155 return err; 128 vlan_gro_common(napi, grp, vlan_tci, skb));
156} 129}
157EXPORT_SYMBOL(vlan_gro_frags); 130EXPORT_SYMBOL(vlan_gro_frags);