You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
net: vlan: add protocol argument to packet tagging functions
Add a protocol argument to the VLAN packet tagging functions. In case of HW tagging, we need that protocol available in the ndo_start_xmit functions, so it is stored in a new field in the skb. The new field fits into a hole (on 64 bit) and doesn't increase the sks's size. Signed-off-by: Patrick McHardy <kaber@trash.net> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
1fd9b1fc31
commit
86a9bad3ab
@@ -2948,7 +2948,7 @@ void nes_nic_ce_handler(struct nes_device *nesdev, struct nes_hw_nic_cq *cq)
|
||||
nes_debug(NES_DBG_CQ, "%s: Reporting stripped VLAN packet. Tag = 0x%04X\n",
|
||||
nesvnic->netdev->name, vlan_tag);
|
||||
|
||||
__vlan_hwaccel_put_tag(rx_skb, vlan_tag);
|
||||
__vlan_hwaccel_put_tag(rx_skb, htons(ETH_P_8021Q), vlan_tag);
|
||||
}
|
||||
if (nes_use_lro)
|
||||
lro_receive_skb(&nesvnic->lro_mgr, rx_skb, NULL);
|
||||
|
||||
@@ -514,7 +514,7 @@ static void rlb_update_client(struct rlb_client_info *client_info)
|
||||
skb->dev = client_info->slave->dev;
|
||||
|
||||
if (client_info->tag) {
|
||||
skb = vlan_put_tag(skb, client_info->vlan_id);
|
||||
skb = vlan_put_tag(skb, htons(ETH_P_8021Q), client_info->vlan_id);
|
||||
if (!skb) {
|
||||
pr_err("%s: Error: failed to insert VLAN tag\n",
|
||||
client_info->slave->bond->dev->name);
|
||||
@@ -1014,7 +1014,7 @@ static void alb_send_learning_packets(struct slave *slave, u8 mac_addr[])
|
||||
continue;
|
||||
}
|
||||
|
||||
skb = vlan_put_tag(skb, vlan->vlan_id);
|
||||
skb = vlan_put_tag(skb, htons(ETH_P_8021Q), vlan->vlan_id);
|
||||
if (!skb) {
|
||||
pr_err("%s: Error: failed to insert VLAN tag\n",
|
||||
bond->dev->name);
|
||||
|
||||
@@ -1690,7 +1690,7 @@ typhoon_rx(struct typhoon *tp, struct basic_ring *rxRing, volatile __le32 * read
|
||||
skb_checksum_none_assert(new_skb);
|
||||
|
||||
if (rx->rxStatus & TYPHOON_RX_VLAN)
|
||||
__vlan_hwaccel_put_tag(new_skb,
|
||||
__vlan_hwaccel_put_tag(new_skb, htons(ETH_P_8021Q),
|
||||
ntohl(rx->vlanTag) & 0xffff);
|
||||
netif_receive_skb(new_skb);
|
||||
|
||||
|
||||
@@ -1498,7 +1498,7 @@ static int __netdev_rx(struct net_device *dev, int *quota)
|
||||
printk(KERN_DEBUG " netdev_rx() vlanid = %d\n",
|
||||
vlid);
|
||||
}
|
||||
__vlan_hwaccel_put_tag(skb, vlid);
|
||||
__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), vlid);
|
||||
}
|
||||
#endif /* VLAN_SUPPORT */
|
||||
netif_receive_skb(skb);
|
||||
|
||||
@@ -2019,7 +2019,7 @@ static void ace_rx_int(struct net_device *dev, u32 rxretprd, u32 rxretcsm)
|
||||
|
||||
/* send it up */
|
||||
if ((bd_flags & BD_FLG_VLAN_TAG))
|
||||
__vlan_hwaccel_put_tag(skb, retdesc->vlan);
|
||||
__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), retdesc->vlan);
|
||||
netif_rx(skb);
|
||||
|
||||
dev->stats.rx_packets++;
|
||||
|
||||
@@ -793,7 +793,7 @@ static int amd8111e_rx_poll(struct napi_struct *napi, int budget)
|
||||
#if AMD8111E_VLAN_TAG_USED
|
||||
if (vtag == TT_VLAN_TAGGED){
|
||||
u16 vlan_tag = le16_to_cpu(lp->rx_ring[rx_index].tag_ctrl_info);
|
||||
__vlan_hwaccel_put_tag(skb, vlan_tag);
|
||||
__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), vlan_tag);
|
||||
}
|
||||
#endif
|
||||
netif_receive_skb(skb);
|
||||
|
||||
@@ -1809,7 +1809,7 @@ rrs_checked:
|
||||
|
||||
AT_TAG_TO_VLAN(rrs->vlan_tag, vlan);
|
||||
vlan = le16_to_cpu(vlan);
|
||||
__vlan_hwaccel_put_tag(skb, vlan);
|
||||
__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), vlan);
|
||||
}
|
||||
netif_receive_skb(skb);
|
||||
|
||||
|
||||
@@ -1435,7 +1435,7 @@ static void atl1e_clean_rx_irq(struct atl1e_adapter *adapter, u8 que,
|
||||
netdev_dbg(netdev,
|
||||
"RXD VLAN TAG<RRD>=0x%04x\n",
|
||||
prrs->vtag);
|
||||
__vlan_hwaccel_put_tag(skb, vlan_tag);
|
||||
__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), vlan_tag);
|
||||
}
|
||||
netif_receive_skb(skb);
|
||||
|
||||
|
||||
@@ -2024,7 +2024,7 @@ rrd_ok:
|
||||
((rrd->vlan_tag & 7) << 13) |
|
||||
((rrd->vlan_tag & 8) << 9);
|
||||
|
||||
__vlan_hwaccel_put_tag(skb, vlan_tag);
|
||||
__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), vlan_tag);
|
||||
}
|
||||
netif_receive_skb(skb);
|
||||
|
||||
|
||||
@@ -452,7 +452,7 @@ static void atl2_intr_rx(struct atl2_adapter *adapter)
|
||||
((rxd->status.vtag&7) << 13) |
|
||||
((rxd->status.vtag&8) << 9);
|
||||
|
||||
__vlan_hwaccel_put_tag(skb, vlan_tag);
|
||||
__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), vlan_tag);
|
||||
}
|
||||
netif_rx(skb);
|
||||
netdev->stats.rx_bytes += rx_size;
|
||||
|
||||
@@ -3211,7 +3211,7 @@ bnx2_rx_int(struct bnx2 *bp, struct bnx2_napi *bnapi, int budget)
|
||||
}
|
||||
if ((status & L2_FHDR_STATUS_L2_VLAN_TAG) &&
|
||||
!(bp->rx_mode & BNX2_EMAC_RX_MODE_KEEP_VLAN_TAG))
|
||||
__vlan_hwaccel_put_tag(skb, rx_hdr->l2_fhdr_vlan_tag);
|
||||
__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), rx_hdr->l2_fhdr_vlan_tag);
|
||||
|
||||
skb->protocol = eth_type_trans(skb, bp->dev);
|
||||
|
||||
|
||||
@@ -719,7 +719,7 @@ static void bnx2x_tpa_stop(struct bnx2x *bp, struct bnx2x_fastpath *fp,
|
||||
if (!bnx2x_fill_frag_skb(bp, fp, tpa_info, pages,
|
||||
skb, cqe, cqe_idx)) {
|
||||
if (tpa_info->parsing_flags & PARSING_FLAGS_VLAN)
|
||||
__vlan_hwaccel_put_tag(skb, tpa_info->vlan_tag);
|
||||
__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), tpa_info->vlan_tag);
|
||||
bnx2x_gro_receive(bp, fp, skb);
|
||||
} else {
|
||||
DP(NETIF_MSG_RX_STATUS,
|
||||
@@ -994,7 +994,7 @@ reuse_rx:
|
||||
|
||||
if (le16_to_cpu(cqe_fp->pars_flags.flags) &
|
||||
PARSING_FLAGS_VLAN)
|
||||
__vlan_hwaccel_put_tag(skb,
|
||||
__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q),
|
||||
le16_to_cpu(cqe_fp->vlan_tag));
|
||||
napi_gro_receive(&fp->napi, skb);
|
||||
|
||||
|
||||
@@ -6715,7 +6715,7 @@ static int tg3_rx(struct tg3_napi *tnapi, int budget)
|
||||
|
||||
if (desc->type_flags & RXD_FLAG_VLAN &&
|
||||
!(tp->rx_mode & RX_MODE_KEEP_VLAN_TAG))
|
||||
__vlan_hwaccel_put_tag(skb,
|
||||
__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q),
|
||||
desc->err_vlan & RXD_VLAN_MASK);
|
||||
|
||||
napi_gro_receive(&tnapi->napi, skb);
|
||||
|
||||
@@ -610,7 +610,7 @@ bnad_cq_process(struct bnad *bnad, struct bna_ccb *ccb, int budget)
|
||||
rcb->rxq->rx_bytes += length;
|
||||
|
||||
if (flags & BNA_CQ_EF_VLAN)
|
||||
__vlan_hwaccel_put_tag(skb, ntohs(cmpl->vlan_tag));
|
||||
__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), ntohs(cmpl->vlan_tag));
|
||||
|
||||
if (BNAD_RXBUF_IS_PAGE(unmap_q->type))
|
||||
napi_gro_frags(&rx_ctrl->napi);
|
||||
|
||||
@@ -1386,7 +1386,7 @@ static void sge_rx(struct sge *sge, struct freelQ *fl, unsigned int len)
|
||||
|
||||
if (p->vlan_valid) {
|
||||
st->vlan_xtract++;
|
||||
__vlan_hwaccel_put_tag(skb, ntohs(p->vlan));
|
||||
__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), ntohs(p->vlan));
|
||||
}
|
||||
netif_receive_skb(skb);
|
||||
}
|
||||
|
||||
@@ -2030,7 +2030,7 @@ static void rx_eth(struct adapter *adap, struct sge_rspq *rq,
|
||||
|
||||
if (p->vlan_valid) {
|
||||
qs->port_stats[SGE_PSTAT_VLANEX]++;
|
||||
__vlan_hwaccel_put_tag(skb, ntohs(p->vlan));
|
||||
__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), ntohs(p->vlan));
|
||||
}
|
||||
if (rq->polling) {
|
||||
if (lro)
|
||||
@@ -2132,7 +2132,7 @@ static void lro_add_page(struct adapter *adap, struct sge_qset *qs,
|
||||
|
||||
if (cpl->vlan_valid) {
|
||||
qs->port_stats[SGE_PSTAT_VLANEX]++;
|
||||
__vlan_hwaccel_put_tag(skb, ntohs(cpl->vlan));
|
||||
__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), ntohs(cpl->vlan));
|
||||
}
|
||||
napi_gro_frags(&qs->napi);
|
||||
}
|
||||
|
||||
@@ -1633,7 +1633,7 @@ static void do_gro(struct sge_eth_rxq *rxq, const struct pkt_gl *gl,
|
||||
skb->rxhash = (__force u32)pkt->rsshdr.hash_val;
|
||||
|
||||
if (unlikely(pkt->vlan_ex)) {
|
||||
__vlan_hwaccel_put_tag(skb, ntohs(pkt->vlan));
|
||||
__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), ntohs(pkt->vlan));
|
||||
rxq->stats.vlan_ex++;
|
||||
}
|
||||
ret = napi_gro_frags(&rxq->rspq.napi);
|
||||
@@ -1705,7 +1705,7 @@ int t4_ethrx_handler(struct sge_rspq *q, const __be64 *rsp,
|
||||
skb_checksum_none_assert(skb);
|
||||
|
||||
if (unlikely(pkt->vlan_ex)) {
|
||||
__vlan_hwaccel_put_tag(skb, ntohs(pkt->vlan));
|
||||
__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), ntohs(pkt->vlan));
|
||||
rxq->stats.vlan_ex++;
|
||||
}
|
||||
netif_receive_skb(skb);
|
||||
|
||||
@@ -1482,7 +1482,8 @@ static void do_gro(struct sge_eth_rxq *rxq, const struct pkt_gl *gl,
|
||||
skb_record_rx_queue(skb, rxq->rspq.idx);
|
||||
|
||||
if (pkt->vlan_ex) {
|
||||
__vlan_hwaccel_put_tag(skb, be16_to_cpu(pkt->vlan));
|
||||
__vlan_hwaccel_put_tag(skb, cpu_to_be16(ETH_P_8021Q),
|
||||
be16_to_cpu(pkt->vlan));
|
||||
rxq->stats.vlan_ex++;
|
||||
}
|
||||
ret = napi_gro_frags(&rxq->rspq.napi);
|
||||
@@ -1551,7 +1552,7 @@ int t4vf_ethrx_handler(struct sge_rspq *rspq, const __be64 *rsp,
|
||||
|
||||
if (pkt->vlan_ex) {
|
||||
rxq->stats.vlan_ex++;
|
||||
__vlan_hwaccel_put_tag(skb, be16_to_cpu(pkt->vlan));
|
||||
__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), be16_to_cpu(pkt->vlan));
|
||||
}
|
||||
|
||||
netif_receive_skb(skb);
|
||||
|
||||
@@ -1300,7 +1300,7 @@ static void enic_rq_indicate_buf(struct vnic_rq *rq,
|
||||
}
|
||||
|
||||
if (vlan_stripped)
|
||||
__vlan_hwaccel_put_tag(skb, vlan_tci);
|
||||
__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), vlan_tci);
|
||||
|
||||
if (netdev->features & NETIF_F_GRO)
|
||||
napi_gro_receive(&enic->napi[q_number], skb);
|
||||
|
||||
@@ -771,7 +771,7 @@ static struct sk_buff *be_insert_vlan_in_pkt(struct be_adapter *adapter,
|
||||
|
||||
if (vlan_tx_tag_present(skb)) {
|
||||
vlan_tag = be_get_tx_vlan_tag(adapter, skb);
|
||||
__vlan_put_tag(skb, vlan_tag);
|
||||
__vlan_put_tag(skb, htons(ETH_P_8021Q), vlan_tag);
|
||||
skb->vlan_tci = 0;
|
||||
}
|
||||
|
||||
@@ -1383,7 +1383,7 @@ static void be_rx_compl_process(struct be_rx_obj *rxo,
|
||||
|
||||
|
||||
if (rxcp->vlanf)
|
||||
__vlan_hwaccel_put_tag(skb, rxcp->vlan_tag);
|
||||
__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), rxcp->vlan_tag);
|
||||
|
||||
netif_receive_skb(skb);
|
||||
}
|
||||
@@ -1439,7 +1439,7 @@ void be_rx_compl_process_gro(struct be_rx_obj *rxo, struct napi_struct *napi,
|
||||
skb->rxhash = rxcp->rss_hash;
|
||||
|
||||
if (rxcp->vlanf)
|
||||
__vlan_hwaccel_put_tag(skb, rxcp->vlan_tag);
|
||||
__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), rxcp->vlan_tag);
|
||||
|
||||
napi_gro_frags(napi);
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user