Use __vlan_hwaccel_*() helpers
Subsystems (12)
cover Use __vlan_hwaccel_*() helpers
This series removes from networking core and driver code an assumption about how VLAN tag presence is stored in an skb. This will allow to free up overloading of VLAN.CFI bit to incidate tag's presence.
Michał Mirosław (9):
cxgb4: use __vlan_hwaccel helpers
nfnetlink/queue: use __vlan_hwaccel helpers
net/core: use __vlan_hwaccel helpers
8021q: use __vlan_hwaccel helpers
bridge: use __vlan_hwaccel helpers
ipv4/tunnel: use __vlan_hwaccel helpers
benet: use __vlan_hwaccel helpers
mlx4: use __vlan_hwaccel helpers
sky2: use __vlan_hwaccel helpers
drivers/infiniband/hw/cxgb4/cm.c | 2 +- drivers/net/ethernet/emulex/benet/be_main.c | 13 +++++++++---- drivers/net/ethernet/marvell/sky2.c | 6 ++---- drivers/net/ethernet/mellanox/mlx4/en_rx.c | 2 +- net/8021q/vlan_core.c | 2 +- net/bridge/br_netfilter_hooks.c | 15 +++++++++------ net/bridge/br_private.h | 2 +- net/bridge/br_vlan.c | 6 +++--- net/core/dev.c | 8 +++++--- net/core/skbuff.c | 2 +- net/ipv4/ip_tunnel_core.c | 2 +- net/netfilter/nfnetlink_queue.c | 5 +++-- net/sched/act_vlan.c | 2 +- 13 files changed, 38 insertions(+), 29 deletions(-)
Signature · 1 line
2.19.1
PATCH 1/9 cxgb4: use __vlan_hwaccel helpers
Use __vlan_hwaccel_put_tag() to set vlan tag and proto fields.
--- drivers/infiniband/hw/cxgb4/cm.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/infiniband/hw/cxgb4/cm.c +1 -1
@@ -3944,7 +3944,7 @@ static int rx_pkt(struct c4iw_dev *dev, struct sk_buff *skb) }else { vlan_eh = (struct vlan_ethhdr *)(req +1 ); iph = (struct iphdr *)(vlan_eh +1 ); - skb->vlan_tci =ntohs (cpl->vlan); +__vlan_hwaccel_put_tag (skb,htons (ETH_P_8021Q ),ntohs (cpl->vlan)); }if (iph->version !=0x4 )
Signature · 1 line
2.19.1
PATCH 2/9 nfnetlink/queue: use __vlan_hwaccel helpers
In reply to Michał Mirosław--- net/netfilter/nfnetlink_queue.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)
net/netfilter/nfnetlink_queue.c +3 -2
@@ -1148,8 +1148,9 @@ static int nfqa_parse_bridge(struct nf_queue_entry *entry,if (!tb[NFQA_VLAN_TCI ] || !tb[NFQA_VLAN_PROTO ])return -EINVAL ; - entry->skb->vlan_tci =ntohs (nla_get_be16 (tb[NFQA_VLAN_TCI ])); - entry->skb->vlan_proto =nla_get_be16 (tb[NFQA_VLAN_PROTO ]); +__vlan_hwaccel_put_tag (entry->skb, +nla_get_be16 (tb[NFQA_VLAN_PROTO ]), +ntohs (nla_get_be16 (tb[NFQA_VLAN_TCI ]))); }if (nfqa[NFQA_L2HDR ]) {
Signature · 1 line
2.19.1
PATCH 3/9 net/core: use __vlan_hwaccel helpers
In reply to Michał MirosławThis removes assumptions about VLAN_TAG_PRESENT bit.
--- net/core/dev.c | 8 +++++--- net/core/skbuff.c | 2 +- net/sched/act_vlan.c | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-)
net/core/dev.c +5 -3
@@ -4889,7 +4889,7 @@ static int __netif_receive_skb_core(struct sk_buff *skb, bool pfmemalloc,* and set skb->priority like in vlan_do_receive() * For the time being, just ignore Priority Code Point */ - skb->vlan_tci =0 ; +__vlan_hwaccel_clear_tag (skb); } type = skb->protocol;
@@ -5386,7 +5386,9 @@ static struct list_head *gro_list_prepare(struct napi_struct *napi, } diffs = (unsigned long )p->dev ^ (unsigned long )skb->dev; - diffs |= p->vlan_tci ^ skb->vlan_tci; + diffs |=skb_vlan_tag_present (p) ^skb_vlan_tag_present (skb); +if (skb_vlan_tag_present (p)) + diffs |= p->vlan_tci ^ skb->vlan_tci; diffs |=skb_metadata_dst_cmp (p, skb); diffs |=skb_metadata_differs (p, skb);if (maclen ==ETH_HLEN )
@@ -5652,7 +5654,7 @@ static void napi_reuse_skb(struct napi_struct *napi, struct sk_buff *skb)__skb_pull (skb,skb_headlen (skb));/* restore the reserve we had after netdev_alloc_skb_ip_align() */ skb_reserve (skb,NET_SKB_PAD +NET_IP_ALIGN -skb_headroom (skb)); - skb->vlan_tci =0 ; +__vlan_hwaccel_clear_tag (skb); skb->dev = napi->dev; skb->skb_iif =0 ; skb->encapsulation =0 ;
net/core/skbuff.c +1 -1
@@ -5123,7 +5123,7 @@ int skb_vlan_pop(struct sk_buff *skb)int err;if (likely (skb_vlan_tag_present (skb))) { - skb->vlan_tci =0 ; +__vlan_hwaccel_clear_tag (skb); }else {if (unlikely (!eth_type_vlan (skb->protocol)))return 0 ;
net/sched/act_vlan.c +1 -1
@@ -63,7 +63,7 @@ static int tcf_vlan_act(struct sk_buff *skb, const struct tc_action *a,/* extract existing tag (and guarantee no hw-accel tag) */ if (skb_vlan_tag_present (skb)) { tci =skb_vlan_tag_get (skb); - skb->vlan_tci =0 ; +__vlan_hwaccel_clear_tag (skb); }else {/* in-payload vlan tag, pop it */ err =__skb_vlan_pop (skb, &tci);
Signature · 1 line
2.19.1
PATCH 4/9 8021q: use __vlan_hwaccel helpers
In reply to Michał Mirosław--- net/8021q/vlan_core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
net/8021q/vlan_core.c +1 -1
@@ -57,7 +57,7 @@ bool vlan_do_receive(struct sk_buff **skbp) } skb->priority =vlan_get_ingress_priority (vlan_dev, skb->vlan_tci); - skb->vlan_tci =0 ; +__vlan_hwaccel_clear_tag (skb); rx_stats =this_cpu_ptr (vlan_dev_priv (vlan_dev)->vlan_pcpu_stats);
Signature · 1 line
2.19.1
PATCH 5/9 bridge: use __vlan_hwaccel helpers
In reply to Michał MirosławThis removes assumption than vlan_tci != 0 when tag is present.
--- net/bridge/br_netfilter_hooks.c | 15 +++++++++------ net/bridge/br_private.h | 2 +- net/bridge/br_vlan.c | 6 +++--- 3 files changed, 13 insertions(+), 10 deletions(-)
net/bridge/br_netfilter_hooks.c +9 -6
@@ -671,10 +671,8 @@ static int br_nf_push_frag_xmit(struct net *net, struct sock *sk, struct sk_buffreturn 0 ; } -if (data->vlan_tci) { - skb->vlan_tci = data->vlan_tci; - skb->vlan_proto = data->vlan_proto; - } +if (data->vlan_proto) +__vlan_hwaccel_put_tag (skb, data->vlan_proto, data->vlan_tci);skb_copy_to_linear_data_offset (skb, -data->size, data->mac, data->size);__skb_push (skb, data->encap_size);
@@ -740,8 +738,13 @@ static int br_nf_dev_queue_xmit(struct net *net, struct sock *sk, struct sk_buff data =this_cpu_ptr (&brnf_frag_data_storage); - data->vlan_tci = skb->vlan_tci; - data->vlan_proto = skb->vlan_proto; +if (skb_vlan_tag_present (skb)) { + data->vlan_tci = skb->vlan_tci; + data->vlan_proto = skb->vlan_proto; + }else { + data->vlan_proto =0 ; + } + data->encap_size =nf_bridge_encap_header_len (skb); data->size =ETH_HLEN + data->encap_size;
net/bridge/br_private.h +1 -1
@@ -905,7 +905,7 @@ static inline int br_vlan_get_tag(const struct sk_buff *skb, u16 *vid)int err =0 ;if (skb_vlan_tag_present (skb)) { - *vid =skb_vlan_tag_get (skb) &VLAN_VID_MASK ; + *vid =skb_vlan_tag_get_id (skb); }else { *vid =0 ; err = -EINVAL ;
net/bridge/br_vlan.c +3 -3
@@ -420,7 +420,7 @@ struct sk_buff *br_handle_vlan(struct net_bridge *br, }if (v->flags &BRIDGE_VLAN_INFO_UNTAGGED ) - skb->vlan_tci =0 ; +__vlan_hwaccel_clear_tag (skb);if (p && (p->flags &BR_VLAN_TUNNEL ) &&br_handle_egress_vlan_tunnel (skb, v)) {
@@ -493,8 +493,8 @@ static bool __allowed_ingress(const struct net_bridge *br,__vlan_hwaccel_put_tag (skb, br->vlan_proto, pvid); else/* Priority-tagged Frame. -* At this point, We know that skb->vlan_tci had -* VLAN_TAG_PRESENT bit and its VID field was 0x000. +* At this point, we know that skb->vlan_tci VID +* field was 0. * We update only VID field and preserve PCP field. */ skb->vlan_tci |= pvid;
Signature · 1 line
2.19.1
PATCH 6/9 ipv4/tunnel: use __vlan_hwaccel helpers
In reply to Michał Mirosław--- net/ipv4/ip_tunnel_core.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
net/ipv4/ip_tunnel_core.c +1 -1
@@ -120,7 +120,7 @@ int __iptunnel_pull_header(struct sk_buff *skb, int hdr_len, }skb_clear_hash_if_not_l4 (skb); - skb->vlan_tci =0 ; +__vlan_hwaccel_clear_tag (skb);skb_set_queue_mapping (skb,0 );skb_scrub_packet (skb, xnet);
Signature · 1 line
2.19.1
PATCH 7/9 benet: use __vlan_hwaccel helpers
In reply to Michał Mirosław--- drivers/net/ethernet/emulex/benet/be_main.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-)
drivers/net/ethernet/emulex/benet/be_main.c +9 -4
@@ -1049,30 +1049,35 @@ static struct sk_buff *be_insert_vlan_in_pkt(struct be_adapter *adapter,struct be_wrb_params *wrb_params) { +bool insert_vlan = false;u16 vlan_tag =0 ; skb =skb_share_check (skb,GFP_ATOMIC );if (unlikely (!skb))return skb; -if (skb_vlan_tag_present (skb)) +if (skb_vlan_tag_present (skb)) { vlan_tag =be_get_tx_vlan_tag (adapter, skb); + insert_vlan = true; + }if (qnq_async_evt_rcvd (adapter) && adapter->pvid) { -if (!vlan_tag) +if (!insert_vlan) { vlan_tag = adapter->pvid; + insert_vlan = true; + }/* f/w workaround to set skip_hw_vlan = 1, informs the F/W to * skip VLAN insertion */ BE_WRB_F_SET (wrb_params->features,VLAN_SKIP_HW ,1 ); } -if (vlan_tag) { +if (insert_vlan) { skb =vlan_insert_tag_set_proto (skb,htons (ETH_P_8021Q ), vlan_tag);if (unlikely (!skb))return skb; - skb->vlan_tci =0 ; +__vlan_hwaccel_clear_tag (skb); }/* Insert the outer VLAN, if any */
Signature · 1 line
2.19.1
PATCH 8/9 mlx4: use __vlan_hwaccel helpers
In reply to Michał Mirosław--- drivers/net/ethernet/mellanox/mlx4/en_rx.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/net/ethernet/mellanox/mlx4/en_rx.c +1 -1
@@ -875,7 +875,7 @@ int mlx4_en_process_rx_cq(struct net_device *dev, struct mlx4_en_cq *cq, int bud skb->data_len = length;napi_gro_frags (&cq->napi); }else { - skb->vlan_tci =0 ; +__vlan_hwaccel_clear_tag (skb);skb_clear_hash (skb); } next:
Signature · 1 line
2.19.1
PATCH 9/9 sky2: use __vlan_hwaccel helpers
In reply to Michał Mirosław--- drivers/net/ethernet/marvell/sky2.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-)
drivers/net/ethernet/marvell/sky2.c +2 -4
@@ -2485,13 +2485,11 @@ static struct sk_buff *receive_copy(struct sky2_port *sky2, skb->ip_summed = re->skb->ip_summed; skb->csum = re->skb->csum;skb_copy_hash (skb, re->skb); - skb->vlan_proto = re->skb->vlan_proto; - skb->vlan_tci = re->skb->vlan_tci; +__vlan_hwaccel_copy_tag (skb, re->skb);pci_dma_sync_single_for_device (sky2->hw->pdev, re->data_addr, length,PCI_DMA_FROMDEVICE ); - re->skb->vlan_proto =0 ; - re->skb->vlan_tci =0 ; +__vlan_hwaccel_clear_tag (re->skb);skb_clear_hash (re->skb); re->skb->ip_summed =CHECKSUM_NONE ;skb_put (skb, length);
Signature · 1 line
2.19.1
David Miller
maintainerFrom: Michał Mirosław <[email protected]>
Date: Fri, 09 Nov 2018 00:17:58 +0100
Quoted 3 lines
This series removes from networking core and driver code an assumption about how VLAN tag presence is stored in an skb. This will allow to free up overloading of VLAN.CFI bit to incidate tag's presence.
This looks good, series applied.
Thanks.
Quoted 11 lines · David Miller
From: Michał Mirosław <[email protected]>
Date: Fri, 09 Nov 2018 00:17:58 +0100Quoted 3 lines
This series removes from networking core and driver code an assumption about how VLAN tag presence is stored in an skb. This will allow to free up overloading of VLAN.CFI bit to incidate tag's presence.
This looks good, series applied.
Thanks.
Hi Michal,
We started seeing the compilation errors below, they look related to this series.
Thanks,
Tariq
02:15:09 net/8021q/vlan_core.c: In function 'vlan_do_receive':
02:15:09 net/8021q/vlan_core.c:60:2: error: implicit declaration of function '__vlan_hwaccel_clear_tag'; did you mean '__vlan_hwaccel_get_tag'? [-Werror=implicit-function-declaration]
02:15:09 __vlan_hwaccel_clear_tag(skb); 02:15:09 ^~~~~~~~~~~~~~~~~~~~~~~~ 02:15:09 __vlan_hwaccel_get_tag
02:15:09 cc1: some warnings being treated as errors 02:15:09 make[4]: *** [scripts/Makefile.build:293:net/8021q/vlan_core.o] Error 1
02:15:09 make[4]: *** Waiting for unfinished jobs.... 02:15:11 make[3]: *** [scripts/Makefile.build:518: net/8021q] Error 2 02:15:11 make[3]: *** Waiting for unfinished jobs.... 02:15:14 make[2]: *** [Makefile:1060: net] Error 2
02:15:14 make[2]: *** Waiting for unfinished jobs.... 02:15:36 drivers/net/ethernet/mellanox/mlx4/en_rx.c: In function 'mlx4_en_process_rx_cq':
02:15:36 drivers/net/ethernet/mellanox/mlx4/en_rx.c:878:4: error:
implicit declaration of function '__vlan_hwaccel_clear_tag'; did you mean '__vlan_hwaccel_get_tag'? [-Werror=implicit-function-declaration]
02:15:36 __vlan_hwaccel_clear_tag(skb); 02:15:36 ^~~~~~~~~~~~~~~~~~~~~~~~ 02:15:36 __vlan_hwaccel_get_tag
02:15:36 cc1: some warnings being treated as errors
02:15:37 make[7]: *** [scripts/Makefile.build:293:drivers/net/ethernet/mellanox/mlx4/en_rx.o] Error 1
02:15:37 make[7]: *** Waiting for unfinished jobs.... 02:15:37 make[6]: *** [scripts/Makefile.build:518:drivers/net/ethernet/mellanox/mlx4] Error 2
02:15:37 make[6]: *** Waiting for unfinished jobs.... 02:15:39 drivers/net/ethernet/mellanox/mlx5/core/en_stats.c: In function 'mlx5e_grp_sw_update_stats':
02:15:39 drivers/net/ethernet/mellanox/mlx5/core/en_stats.c:216:1:
warning: the frame size of 1200 bytes is larger than 1024 bytes [-Wframe-larger-than=]
02:15:39 }
02:15:39 ^
02:15:49 make[5]: *** [scripts/Makefile.build:518:drivers/net/ethernet/mellanox] Error 2
02:15:49 make[4]: *** [scripts/Makefile.build:518: drivers/net/ethernet] Error 2
02:15:49 make[3]: *** [scripts/Makefile.build:518: drivers/net] Error 2 02:15:49 make[2]: *** [Makefile:1060: drivers] Error 2 02:15:49 make[1]: *** [scripts/package/Makefile:63: binrpm-pkg] Error 2 02:15:49 make: *** [Makefile:1399: binrpm-pkg] Error 2
Quoted 12 lines · Tariq Toukan
Quoted 9 lines · David Miller
From: Michał Mirosław <[email protected]>
Date: Fri, 09 Nov 2018 00:17:58 +0100Quoted 3 lines
This series removes from networking core and driver code an assumption about how VLAN tag presence is stored in an skb. This will allow to free up overloading of VLAN.CFI bit to incidate tag's presence.
This looks good, series applied.
Quoted 7 lines
Quoted 2 lines
Thanks.
Hi Michal,
We started seeing the compilation errors below, they look related to this series.
Do you have the previous series applied that introduced __vlan_hwaccel_clear_tag()? It was applied to net-next before I sent this series.
I did a allmodconfig build of net-next and saw no failures (apart from OVS that is fixed already).
Best Regards,
Michał Mirosław
Quoted 13 lines · On Sun, Nov 11, 2018 at 05:12:43PM +0100, [email protected] wrote:
Quoted 12 lines · Tariq Toukan
Quoted 9 lines · David Miller
From: Michał Mirosław <[email protected]>
Date: Fri, 09 Nov 2018 00:17:58 +0100Quoted 3 lines
This series removes from networking core and driver code an assumption about how VLAN tag presence is stored in an skb. This will allow to free up overloading of VLAN.CFI bit to incidate tag's presence.
This looks good, series applied.
Thanks.
Hi Michal,
Quoted 8 lines
Quoted 2 lines
We started seeing the compilation errors below, they look related to this series.
Do you have the previous series applied that introduced
__vlan_hwaccel_clear_tag()? It was applied to net-next before I sent this series.I did a allmodconfig build of net-next and saw no failures (apart from OVS that is fixed already).
The prerequisite commit in net-next is:
7025abb2e447b ("Merge branch 'vlan-prepare-for-removal-of-VLAN_TAG_PRESENT'")
Best Regards,
Michał Mirosław