Introduce mb bit in xdp_buff/xdp_frame
Subsystems (23)
cover Introduce mb bit in xdp_buff/xdp_frame
Introduce multi-buffer bit (mb) in xdp_frame/xdp_buffer to specify if shared_info area has been properly initialized for non-linear xdp buffers.
Initialize mb to 0 for all xdp drivers
Lorenzo Bianconi (22):
xdp: introduce mb in xdp_buff/xdp_frame
xdp: initialize xdp_buff mb bit to 0 in netif_receive_generic_xdp
net: virtio_net: initialize mb bit of xdp_buff to 0
net: xen-netfront: initialize mb bit of xdp_buff to 0
net: veth: initialize mb bit of xdp_buff to 0
net: hv_netvsc: initialize mb bit of xdp_buff to 0
net: bnxt: initialize mb bit in xdp_buff to 0
net: dpaa2: initialize mb bit in xdp_buff to 0
net: ti: initialize mb bit in xdp_buff to 0
net: nfp: initialize mb bit in xdp_buff to 0
net: mvpp2: initialize mb bit in xdp_buff to 0
net: sfc: initialize mb bit in xdp_buff to 0
net: qede: initialize mb bit in xdp_buff to 0
net: amazon: ena: initialize mb bit in xdp_buff to 0
net: cavium: thunder: initialize mb bit in xdp_buff to 0
net: socionext: initialize mb bit in xdp_buff to 0
net: tun: initialize mb bit in xdp_buff to 0
net: ixgbe: initialize mb bit in xdp_buff to 0
net: ice: initialize mb bit in xdp_buff to 0
net: i40e: initialize mb bit in xdp_buff to 0
net: mlx5: initialize mb bit in xdp_buff to 0
net: mlx4: initialize mb bit in xdp_buff to 0
drivers/net/ethernet/amazon/ena/ena_netdev.c | 1 + drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c | 1 + drivers/net/ethernet/cavium/thunder/nicvf_main.c | 1 + drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c | 1 + drivers/net/ethernet/intel/i40e/i40e_txrx.c | 1 + drivers/net/ethernet/intel/ice/ice_txrx.c | 1 + drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 1 + drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 1 + drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c | 1 + drivers/net/ethernet/mellanox/mlx4/en_rx.c | 1 + drivers/net/ethernet/mellanox/mlx5/core/en_rx.c | 1 + drivers/net/ethernet/netronome/nfp/nfp_net_common.c | 1 + drivers/net/ethernet/qlogic/qede/qede_fp.c | 1 + drivers/net/ethernet/sfc/rx.c | 1 + drivers/net/ethernet/socionext/netsec.c | 1 + drivers/net/ethernet/ti/cpsw.c | 1 + drivers/net/ethernet/ti/cpsw_new.c | 1 + drivers/net/hyperv/netvsc_bpf.c | 1 + drivers/net/tun.c | 2 ++ drivers/net/veth.c | 1 + drivers/net/virtio_net.c | 2 ++ drivers/net/xen-netfront.c | 1 + include/net/xdp.h | 8 ++++++-- net/core/dev.c | 1 + 24 files changed, 31 insertions(+), 2 deletions(-)
Signature · 1 line
2.26.2
RFC 1/22 xdp: introduce mb in xdp_buff/xdp_frame
Introduce multi-buffer bit (mb) in xdp_frame/xdp_buffer to specify if shared_info area has been properly initialized for non-linear xdp buffers
--- include/net/xdp.h | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)
include/net/xdp.h +6 -2
@@ -72,7 +72,8 @@ struct xdp_buff {void *data_hard_start;struct xdp_rxq_info *rxq;struct xdp_txq_info *txq; -u32 frame_sz;/* frame size to deduce data_hard_end/reserved tailroom*/ + u32 frame_sz:31; /* frame size to deduce data_hard_end/reserved tailroom*/ + u32 mb:1; /* xdp non-linear buffer */ };/* Reserve memory area at end-of data area.
@@ -96,7 +97,8 @@ struct xdp_frame {u16 len;u16 headroom; u32 metasize:8; - u32 frame_sz:24; + u32 frame_sz:23; + u32 mb:1; /* xdp non-linear frame *//* Lifetime of xdp_rxq_info is limited to NAPI/enqueue time, * while mem info is valid on remote CPU. */
@@ -141,6 +143,7 @@ void xdp_convert_frame_to_buff(struct xdp_frame *frame, struct xdp_buff *xdp) xdp->data_end = frame->data + frame->len; xdp->data_meta = frame->data - frame->metasize; xdp->frame_sz = frame->frame_sz; + xdp->mb = frame->mb; } static inline
@@ -167,6 +170,7 @@ int xdp_update_frame_from_buff(struct xdp_buff *xdp, xdp_frame->headroom = headroom -sizeof (*xdp_frame); xdp_frame->metasize = metasize; xdp_frame->frame_sz = xdp->frame_sz; + xdp_frame->mb = xdp->mb;return 0 ; }
Signature · 1 line
2.26.2
RE: [RFC net-next 01/22] xdp: introduce mb in xdp_buff/xdp_frame
Quoted 34 lines
-----Original Message-----
From: Lorenzo Bianconi <[email protected]>
Sent: Thursday, July 23, 2020 2:42 PM
To: [email protected]
Cc: [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; [email protected]; Jubran, Samih <[email protected]>; [email protected]
Subject: [EXTERNAL] [RFC net-next 01/22] xdp: introduce mb in xdp_buff/xdp_frameCAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you can confirm the sender and know the content is safe.
Introduce multi-buffer bit (mb) in xdp_frame/xdp_buffer to specify if
shared_infoarea has been properly initialized for non-linear xdp buffersSigned-off-by Lorenzo Bianconi <[email protected]>--- include/net/xdp.h | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-)include/net/xdp.h index renamed from include/net/xdp.h +0
-0
dbe9c60797e1..2ef6935c5646100644include/net/xdp.h +0
-1@@ -72,7 +72,8 @@ struct xdp_buff {void *data_hard_start;struct xdp_rxq_info *rxq;struct xdp_txq_info *txq; -u32 frame_sz;/* frame size to deduce data_hard_end/reserved
Quoted 3 lines
tailroom*/
+ u32 frame_sz:31; /* frame size to deduce data_hard_end/reserved
tailroom*/
It seems strange that you assign a 32 sized field to a 24 sized field. Wouldn't it be better if we used the same size in all places?
Quoted 34 lines
include/net/xdp.h +4
-1+ u32 mb:1; /* xdp non-linear buffer */ };/* Reserve memory area at end-of data area. @@ -96,7 +97,8 @@ struct xdp_frame {u16 len;u16 headroom; u32 metasize:8; - u32 frame_sz:24; + u32 frame_sz:23; + u32 mb:1; /* xdp non-linear frame *//* Lifetime of xdp_rxq_info is limited to NAPI/enqueue time, * while mem info is valid on remote CPU. */ @@ -141,6 +143,7 @@ void xdp_convert_frame_to_buff(struct xdp_frame *frame, struct xdp_buff *xdp) xdp->data_end = frame->data + frame->len; xdp->data_meta = frame->data - frame->metasize; xdp->frame_sz = frame->frame_sz; + xdp->mb = frame->mb; }static inline
include/net/xdp.h +1
-0@@ -167,6 +170,7 @@ int xdp_update_frame_from_buff(struct xdp_buff *xdp, xdp_frame->headroom = headroom -sizeof (*xdp_frame); xdp_frame->metasize = metasize; xdp_frame->frame_sz = xdp->frame_sz; + xdp_frame->mb = xdp->mb;return 0 ;}
--
2.26.2
RFC 2/22 xdp: initialize xdp_buff mb bit to 0 in netif_receive_generic_xdp
In reply to Lorenzo BianconiInitialize multi-buffer bit (mb) to 0 in xdp_buff data structure. This is a preliminary patch to enable xdp multi-buffer support.
--- net/core/dev.c | 1 + 1 file changed, 1 insertion(+)
net/core/dev.c +1 -0
@@ -4641,6 +4641,7 @@ static u32 netif_receive_generic_xdp(struct sk_buff *skb,/* SKB "head" area always have tailroom for skb_shared_info */ xdp->frame_sz = (void *)skb_end_pointer (skb) - xdp->data_hard_start; xdp->frame_sz +=SKB_DATA_ALIGN (sizeof (struct skb_shared_info )); + xdp->mb =0 ; orig_data_end = xdp->data_end; orig_data = xdp->data;
Signature · 1 line
2.26.2
RFC 3/22 net: virtio_net: initialize mb bit of xdp_buff to 0
In reply to Lorenzo BianconiInitialize multi-buffer bit (mb) to 0 in xdp_buff data structure. This is a preliminary patch to enable xdp multi-buffer support.
--- drivers/net/virtio_net.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/net/virtio_net.c +2 -0
@@ -690,6 +690,7 @@ static struct sk_buff *receive_small(struct net_device *dev, xdp.data_meta = xdp.data; xdp.rxq = &rq->xdp_rxq; xdp.frame_sz = buflen; + xdp.mb =0 ; orig_data = xdp.data; act =bpf_prog_run_xdp (xdp_prog, &xdp); stats->xdp_packets++;
@@ -860,6 +861,7 @@ static struct sk_buff *receive_mergeable(struct net_device *dev, xdp.data_meta = xdp.data; xdp.rxq = &rq->xdp_rxq; xdp.frame_sz = frame_sz - vi->hdr_len; + xdp.mb =0 ; act =bpf_prog_run_xdp (xdp_prog, &xdp); stats->xdp_packets++;
Signature · 1 line
2.26.2
RFC 4/22 net: xen-netfront: initialize mb bit of xdp_buff to 0
In reply to Lorenzo BianconiInitialize multi-buffer bit (mb) to 0 in xdp_buff data structure. This is a preliminary patch to enable xdp multi-buffer support.
--- drivers/net/xen-netfront.c | 1 + 1 file changed, 1 insertion(+)
drivers/net/xen-netfront.c +1 -0
@@ -868,6 +868,7 @@ static u32 xennet_run_xdp(struct netfront_queue *queue, struct page *pdata, xdp->data_end = xdp->data + len; xdp->rxq = &queue->xdp_rxq; xdp->frame_sz =XEN_PAGE_SIZE -XDP_PACKET_HEADROOM ; + xdp->mb =0 ; act =bpf_prog_run_xdp (prog, xdp);switch (act) {
Signature · 1 line
2.26.2
RFC 5/22 net: veth: initialize mb bit of xdp_buff to 0
In reply to Lorenzo BianconiInitialize multi-buffer bit (mb) to 0 in xdp_buff data structure. This is a preliminary patch to enable xdp multi-buffer support.
--- drivers/net/veth.c | 1 + 1 file changed, 1 insertion(+)
drivers/net/veth.c +1 -0
@@ -711,6 +711,7 @@ static struct sk_buff *veth_xdp_rcv_skb(struct veth_rq *rq,/* SKB "head" area always have tailroom for skb_shared_info */ xdp.frame_sz = (void *)skb_end_pointer (skb) - xdp.data_hard_start; xdp.frame_sz +=SKB_DATA_ALIGN (sizeof (struct skb_shared_info )); + xdp.mb =0 ; orig_data = xdp.data; orig_data_end = xdp.data_end;
Signature · 1 line
2.26.2
RFC 6/22 net: hv_netvsc: initialize mb bit of xdp_buff to 0
In reply to Lorenzo BianconiInitialize multi-buffer bit (mb) to 0 in xdp_buff data structure. This is a preliminary patch to enable xdp multi-buffer support.
--- drivers/net/hyperv/netvsc_bpf.c | 1 + 1 file changed, 1 insertion(+)
drivers/net/hyperv/netvsc_bpf.c +1 -0
@@ -50,6 +50,7 @@ u32 netvsc_run_xdp(struct net_device *ndev, struct netvsc_channel *nvchan, xdp->data_end = xdp->data + len; xdp->rxq = &nvchan->xdp_rxq; xdp->frame_sz =PAGE_SIZE ; + xdp->mb =0 ;memcpy (xdp->data, data, len);
Signature · 1 line
2.26.2
RFC 7/22 net: bnxt: initialize mb bit in xdp_buff to 0
In reply to Lorenzo BianconiInitialize multi-buffer bit (mb) to 0 in xdp_buff data structure. This is a preliminary patch to enable xdp multi-buffer support.
--- drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c | 1 + 1 file changed, 1 insertion(+)
drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c +1 -0
@@ -139,6 +139,7 @@ bool bnxt_rx_xdp(struct bnxt *bp, struct bnxt_rx_ring_info *rxr, u16 cons, xdp.data_end = *data_ptr + *len; xdp.rxq = &rxr->xdp_rxq; xdp.frame_sz =PAGE_SIZE ;/* BNXT_RX_PAGE_MODE(bp) when XDP enabled */ + xdp.mb =0 ; orig_data = xdp.data;rcu_read_lock ();
Signature · 1 line
2.26.2
RFC 8/22 net: dpaa2: initialize mb bit in xdp_buff to 0
In reply to Lorenzo BianconiInitialize multi-buffer bit (mb) to 0 in xdp_buff data structure. This is a preliminary patch to enable xdp multi-buffer support.
--- drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c | 1 + 1 file changed, 1 insertion(+)
drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c +1 -0
@@ -361,6 +361,7 @@ static u32 run_xdp(struct dpaa2_eth_priv *priv, xdp.frame_sz =DPAA2_ETH_RX_BUF_RAW_SIZE - (dpaa2_fd_get_offset (fd) -XDP_PACKET_HEADROOM ); + xdp.mb =0 ; xdp_act =bpf_prog_run_xdp (xdp_prog, &xdp);
Signature · 1 line
2.26.2
RFC 9/22 net: ti: initialize mb bit in xdp_buff to 0
In reply to Lorenzo BianconiInitialize multi-buffer bit (mb) to 0 in xdp_buff data structure. This is a preliminary patch to enable xdp multi-buffer support.
--- drivers/net/ethernet/ti/cpsw.c | 1 + drivers/net/ethernet/ti/cpsw_new.c | 1 + 2 files changed, 2 insertions(+)
drivers/net/ethernet/ti/cpsw.c +1 -0
@@ -407,6 +407,7 @@ static void cpsw_rx_handler(void *token, int len, int status) xdp.data_hard_start = pa; xdp.rxq = &priv->xdp_rxq[ch]; xdp.frame_sz =PAGE_SIZE ; + xdp.mb =0 ; port = priv->emac_port + cpsw->data.dual_emac; ret =cpsw_run_xdp (priv, ch, &xdp, page, port);
drivers/net/ethernet/ti/cpsw_new.c +1 -0
@@ -349,6 +349,7 @@ static void cpsw_rx_handler(void *token, int len, int status) xdp.data_hard_start = pa; xdp.rxq = &priv->xdp_rxq[ch]; xdp.frame_sz =PAGE_SIZE ; + xdp.mb =0 ; ret =cpsw_run_xdp (priv, ch, &xdp, page, priv->emac_port);if (ret !=CPSW_XDP_PASS )
Signature · 1 line
2.26.2
RFC 10/22 net: nfp: initialize mb bit in xdp_buff to 0
In reply to Lorenzo BianconiInitialize multi-buffer bit (mb) to 0 in xdp_buff data structure. This is a preliminary patch to enable xdp multi-buffer support.
--- drivers/net/ethernet/netronome/nfp/nfp_net_common.c | 1 + 1 file changed, 1 insertion(+)
drivers/net/ethernet/netronome/nfp/nfp_net_common.c +1 -0
@@ -1824,6 +1824,7 @@ static int nfp_net_rx(struct nfp_net_rx_ring *rx_ring, int budget) true_bufsz = xdp_prog ?PAGE_SIZE : dp->fl_bufsz; xdp.frame_sz =PAGE_SIZE -NFP_NET_RX_BUF_HEADROOM ; xdp.rxq = &rx_ring->xdp_rxq; + xdp.mb =0 ; tx_ring = r_vec->xdp_ring;while (pkts_polled < budget) {
Signature · 1 line
2.26.2
RFC 11/22 net: mvpp2: initialize mb bit in xdp_buff to 0
In reply to Lorenzo BianconiInitialize multi-buffer bit (mb) to 0 in xdp_buff data structure. This is a preliminary patch to enable xdp multi-buffer support.
--- drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c | 1 + 1 file changed, 1 insertion(+)
drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c +1 -0
@@ -3475,6 +3475,7 @@ static int mvpp2_rx(struct mvpp2_port *port, struct napi_struct *napi, xdp.data = data +MVPP2_MH_SIZE +MVPP2_SKB_HEADROOM ; xdp.data_end = xdp.data + rx_bytes; xdp.frame_sz =PAGE_SIZE ; + xdp.mb =0 ;if (bm_pool->pkt_size ==MVPP2_BM_SHORT_PKT_SIZE ) xdp.rxq = &rxq->xdp_rxq_short;
Signature · 1 line
2.26.2
RFC 12/22 net: sfc: initialize mb bit in xdp_buff to 0
In reply to Lorenzo BianconiInitialize multi-buffer bit (mb) to 0 in xdp_buff data structure. This is a preliminary patch to enable xdp multi-buffer support.
--- drivers/net/ethernet/sfc/rx.c | 1 + 1 file changed, 1 insertion(+)
drivers/net/ethernet/sfc/rx.c +1 -0
@@ -301,6 +301,7 @@ static bool efx_do_xdp(struct efx_nic *efx, struct efx_channel *channel, xdp.data_end = xdp.data + rx_buf->len; xdp.rxq = &rx_queue->xdp_rxq_info; xdp.frame_sz = efx->rx_page_buf_step; + xdp.mb =0 ; xdp_act =bpf_prog_run_xdp (xdp_prog, &xdp);rcu_read_unlock ();
Signature · 1 line
2.26.2
RFC 13/22 net: qede: initialize mb bit in xdp_buff to 0
In reply to Lorenzo BianconiInitialize multi-buffer bit (mb) to 0 in xdp_buff data structure. This is a preliminary patch to enable xdp multi-buffer support.
--- drivers/net/ethernet/qlogic/qede/qede_fp.c | 1 + 1 file changed, 1 insertion(+)
drivers/net/ethernet/qlogic/qede/qede_fp.c +1 -0
@@ -1096,6 +1096,7 @@ static bool qede_rx_xdp(struct qede_dev *edev, xdp.data_end = xdp.data + *len; xdp.rxq = &rxq->xdp_rxq; xdp.frame_sz = rxq->rx_buf_seg_size;/* PAGE_SIZE when XDP enabled */ + xdp.mb =0 ;/* Queues always have a full reset currently, so for the time * being until there's atomic program replace just mark read
Signature · 1 line
2.26.2
RFC 14/22 net: amazon: ena: initialize mb bit in xdp_buff to 0
In reply to Lorenzo BianconiInitialize multi-buffer bit (mb) to 0 in xdp_buff data structure. This is a preliminary patch to enable xdp multi-buffer support.
--- drivers/net/ethernet/amazon/ena/ena_netdev.c | 1 + 1 file changed, 1 insertion(+)
drivers/net/ethernet/amazon/ena/ena_netdev.c +1 -0
@@ -1613,6 +1613,7 @@ static int ena_clean_rx_irq(struct ena_ring *rx_ring, struct napi_struct *napi, res_budget = budget; xdp.rxq = &rx_ring->xdp_rxq; xdp.frame_sz =ENA_PAGE_SIZE ; + xdp.mb =0 ; do { xdp_verdict = XDP_PASS;
Signature · 1 line
2.26.2
RFC 15/22 net: cavium: thunder: initialize mb bit in xdp_buff to 0
In reply to Lorenzo BianconiInitialize multi-buffer bit (mb) to 0 in xdp_buff data structure. This is a preliminary patch to enable xdp multi-buffer support.
--- drivers/net/ethernet/cavium/thunder/nicvf_main.c | 1 + 1 file changed, 1 insertion(+)
drivers/net/ethernet/cavium/thunder/nicvf_main.c +1 -0
@@ -553,6 +553,7 @@ static inline bool nicvf_xdp_rx(struct nicvf *nic, struct bpf_prog *prog, xdp.data_end = xdp.data + len; xdp.rxq = &rq->xdp_rxq; xdp.frame_sz =RCV_FRAG_LEN +XDP_PACKET_HEADROOM ; + xdp.mb =0 ; orig_data = xdp.data;rcu_read_lock ();
Signature · 1 line
2.26.2
RFC 16/22 net: socionext: initialize mb bit in xdp_buff to 0
In reply to Lorenzo BianconiInitialize multi-buffer bit (mb) to 0 in xdp_buff data structure. This is a preliminary patch to enable xdp multi-buffer support.
--- drivers/net/ethernet/socionext/netsec.c | 1 + 1 file changed, 1 insertion(+)
drivers/net/ethernet/socionext/netsec.c +1 -0
@@ -947,6 +947,7 @@ static int netsec_process_rx(struct netsec_priv *priv, int budget) xdp.rxq = &dring->xdp_rxq; xdp.frame_sz =PAGE_SIZE ; + xdp.mb =0 ;rcu_read_lock (); xdp_prog =READ_ONCE (priv->xdp_prog);
Signature · 1 line
2.26.2
RFC 17/22 net: tun: initialize mb bit in xdp_buff to 0
In reply to Lorenzo BianconiInitialize multi-buffer bit (mb) to 0 in xdp_buff data structure. This is a preliminary patch to enable xdp multi-buffer support.
--- drivers/net/tun.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/net/tun.c +2 -0
@@ -1674,6 +1674,7 @@ static struct sk_buff *tun_build_skb(struct tun_struct *tun, xdp.data_end = xdp.data + len; xdp.rxq = &tfile->xdp_rxq; xdp.frame_sz = buflen; + xdp.mb =0 ; act =bpf_prog_run_xdp (xdp_prog, &xdp);if (act ==XDP_REDIRECT || act ==XDP_TX ) {
@@ -2421,6 +2422,7 @@ static int tun_xdp_one(struct tun_struct *tun,xdp_set_data_meta_invalid (xdp); xdp->rxq = &tfile->xdp_rxq; xdp->frame_sz = buflen; + xdp->mb =0 ; act =bpf_prog_run_xdp (xdp_prog, xdp); err =tun_xdp_act (tun, xdp_prog, xdp, act);
Signature · 1 line
2.26.2
RFC 18/22 net: ixgbe: initialize mb bit in xdp_buff to 0
In reply to Lorenzo BianconiInitialize multi-buffer bit (mb) to 0 in xdp_buff data structure. This is a preliminary patch to enable xdp multi-buffer support.
--- drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 1 + drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 1 + 2 files changed, 2 insertions(+)
drivers/net/ethernet/intel/ixgbe/ixgbe_main.c +1 -0
@@ -2303,6 +2303,7 @@ static int ixgbe_clean_rx_irq(struct ixgbe_q_vector *q_vector,#if (PAGE_SIZE <8192 ) xdp.frame_sz =ixgbe_rx_frame_truesize (rx_ring,0 );#endif + xdp.mb =0 ;while (likely (total_rx_packets < budget)) {union ixgbe_adv_rx_desc *rx_desc;
drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c +1 -0
@@ -1133,6 +1133,7 @@ static int ixgbevf_clean_rx_irq(struct ixgbevf_q_vector *q_vector,struct xdp_buff xdp; xdp.rxq = &rx_ring->xdp_rxq; + xdp.mb =0 ;/* Frame size depend on rx_ring setup when PAGE_SIZE=4K */ #if (PAGE_SIZE <8192 )
Signature · 1 line
2.26.2
RFC 19/22 net: ice: initialize mb bit in xdp_buff to 0
In reply to Lorenzo BianconiInitialize multi-buffer bit (mb) to 0 in xdp_buff data structure. This is a preliminary patch to enable xdp multi-buffer support.
--- drivers/net/ethernet/intel/ice/ice_txrx.c | 1 + 1 file changed, 1 insertion(+)
drivers/net/ethernet/intel/ice/ice_txrx.c +1 -0
@@ -1098,6 +1098,7 @@ int ice_clean_rx_irq(struct ice_ring *rx_ring, int budget)#if (PAGE_SIZE <8192 ) xdp.frame_sz =ice_rx_frame_truesize (rx_ring,0 );#endif + xdp.mb =0 ;/* start the loop to process Rx packets bounded by 'budget' */ while (likely (total_rx_pkts < (unsigned int )budget)) {
Signature · 1 line
2.26.2
RFC 20/22 net: i40e: initialize mb bit in xdp_buff to 0
In reply to Lorenzo BianconiInitialize multi-buffer bit (mb) to 0 in xdp_buff data structure. This is a preliminary patch to enable xdp multi-buffer support.
--- drivers/net/ethernet/intel/i40e/i40e_txrx.c | 1 + 1 file changed, 1 insertion(+)
drivers/net/ethernet/intel/i40e/i40e_txrx.c +1 -0
@@ -2324,6 +2324,7 @@ static int i40e_clean_rx_irq(struct i40e_ring *rx_ring, int budget) xdp.frame_sz =i40e_rx_frame_truesize (rx_ring,0 );#endif xdp.rxq = &rx_ring->xdp_rxq; + xdp.mb =0 ;while (likely (total_rx_packets < (unsigned int )budget)) {struct i40e_rx_buffer *rx_buffer;
Signature · 1 line
2.26.2
RFC 21/22 net: mlx5: initialize mb bit in xdp_buff to 0
In reply to Lorenzo BianconiInitialize multi-buffer bit (mb) to 0 in xdp_buff data structure. This is a preliminary patch to enable xdp multi-buffer support.
--- drivers/net/ethernet/mellanox/mlx5/core/en_rx.c | 1 + 1 file changed, 1 insertion(+)
drivers/net/ethernet/mellanox/mlx5/core/en_rx.c +1 -0
@@ -1104,6 +1104,7 @@ static void mlx5e_fill_xdp_buff(struct mlx5e_rq *rq, void *va, u16 headroom, xdp->data_end = xdp->data + len; xdp->rxq = &rq->xdp_rxq; xdp->frame_sz = rq->buff.frame0_sz; + xdp->mb =0 ; } struct sk_buff *
Signature · 1 line
2.26.2
RFC 22/22 net: mlx4: initialize mb bit in xdp_buff to 0
In reply to Lorenzo BianconiInitialize multi-buffer bit (mb) to 0 in xdp_buff data structure. This is a preliminary patch to enable xdp multi-buffer support.
--- drivers/net/ethernet/mellanox/mlx4/en_rx.c | 1 + 1 file changed, 1 insertion(+)
drivers/net/ethernet/mellanox/mlx4/en_rx.c +1 -0
@@ -684,6 +684,7 @@ int mlx4_en_process_rx_cq(struct net_device *dev, struct mlx4_en_cq *cq, int bud xdp_prog =rcu_dereference (ring->xdp_prog); xdp.rxq = &ring->xdp_rxq; xdp.frame_sz = priv->frag_info[0 ].frag_stride; + xdp.mb =0 ; doorbell_pending =0 ;/* We assume a 1:1 mapping between CQEs and Rx descriptors, so Rx
Signature · 1 line
2.26.2
Quoted 4 lines · On Thu, 23 Jul 2020 13:42:12 +0200 Lorenzo Bianconi <[email protected]> wrote:
Introduce multi-buffer bit (mb) in xdp_frame/xdp_buffer to specify if
shared_infoarea has been properly initialized for non-linear xdp buffers.
Initialize mb to 0 for all xdp drivers
It is nice to see that we have some many XDP drivers, but 20 separate patches for drivers is a bit much. Perhaps we can do all the drivers in one patch? What do others think?
Quoted 24 lines
Lorenzo Bianconi (22):
xdp: introduce mb in xdp_buff/xdp_frame
xdp: initializexdp_buffmb bit to 0 innetif_receive_generic_xdp
net:virtio_net: initialize mb bit ofxdp_buffto 0
net: xen-netfront: initialize mb bit ofxdp_buffto 0
net: veth: initialize mb bit ofxdp_buffto 0
net:hv_netvsc: initialize mb bit ofxdp_buffto 0
net: bnxt: initialize mb bit inxdp_buffto 0
net: dpaa2: initialize mb bit inxdp_buffto 0
net: ti: initialize mb bit inxdp_buffto 0
net: nfp: initialize mb bit inxdp_buffto 0
net: mvpp2: initialize mb bit inxdp_buffto 0
net: sfc: initialize mb bit inxdp_buffto 0
net: qede: initialize mb bit inxdp_buffto 0
net: amazon: ena: initialize mb bit inxdp_buffto 0
net: cavium: thunder: initialize mb bit inxdp_buffto 0
net: socionext: initialize mb bit inxdp_buffto 0
net: tun: initialize mb bit inxdp_buffto 0
net: ixgbe: initialize mb bit inxdp_buffto 0
net: ice: initialize mb bit inxdp_buffto 0
net: i40e: initialize mb bit inxdp_buffto 0
net: mlx5: initialize mb bit inxdp_buffto 0
net: mlx4: initialize mb bit inxdp_buffto 0
Quoted 9 lines
drivers/net/ethernet/amazon/ena/ena_netdev.c | 1 + drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c | 1 + drivers/net/ethernet/cavium/thunder/nicvf_main.c | 1 + drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c | 1 + drivers/net/ethernet/intel/i40e/i40e_txrx.c | 1 + drivers/net/ethernet/intel/ice/ice_txrx.c | 1 + drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 1 + drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 1 + drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c | 1 +
I see that mvneta is missing, but maybe it is doing another kind of init of struct xdp_buff?
Quoted 16 lines
drivers/net/ethernet/mellanox/mlx4/en_rx.c | 1 + drivers/net/ethernet/mellanox/mlx5/core/en_rx.c | 1 + drivers/net/ethernet/netronome/nfp/nfp_net_common.c | 1 + drivers/net/ethernet/qlogic/qede/qede_fp.c | 1 + drivers/net/ethernet/sfc/rx.c | 1 + drivers/net/ethernet/socionext/netsec.c | 1 + drivers/net/ethernet/ti/cpsw.c | 1 + drivers/net/ethernet/ti/cpsw_new.c | 1 + drivers/net/hyperv/netvsc_bpf.c | 1 + drivers/net/tun.c | 2 ++ drivers/net/veth.c | 1 + drivers/net/virtio_net.c | 2 ++ drivers/net/xen-netfront.c | 1 + include/net/xdp.h | 8 ++++++-- net/core/dev.c | 1 + 24 files changed, 31 insertions(+), 2 deletions(-)
Signature · 4 lines
Best regards, Jesper Dangaard Brouer MSc.CS, Principal Kernel Engineer at Red Hat LinkedIn: http://www.linkedin.com/in/brouer
Quoted 11 lines
Quoted 4 lines · On Thu, 23 Jul 2020 13:42:12 +0200 Lorenzo Bianconi <[email protected]> wrote:
Introduce multi-buffer bit (mb) in xdp_frame/xdp_buffer to specify if
shared_infoarea has been properly initialized for non-linear xdp buffers.
Initialize mb to 0 for all xdp driversIt is nice to see that we have some many XDP drivers, but 20 separate patches for drivers is a bit much. Perhaps we can do all the drivers in one patch? What do others think?
I am fine with it, not sure what is the best approach.
Quoted 35 lines
Quoted 25 lines
Lorenzo Bianconi (22):
xdp: introduce mb in xdp_buff/xdp_frame
xdp: initializexdp_buffmb bit to 0 innetif_receive_generic_xdp
net:virtio_net: initialize mb bit ofxdp_buffto 0
net: xen-netfront: initialize mb bit ofxdp_buffto 0
net: veth: initialize mb bit ofxdp_buffto 0
net:hv_netvsc: initialize mb bit ofxdp_buffto 0
net: bnxt: initialize mb bit inxdp_buffto 0
net: dpaa2: initialize mb bit inxdp_buffto 0
net: ti: initialize mb bit inxdp_buffto 0
net: nfp: initialize mb bit inxdp_buffto 0
net: mvpp2: initialize mb bit inxdp_buffto 0
net: sfc: initialize mb bit inxdp_buffto 0
net: qede: initialize mb bit inxdp_buffto 0
net: amazon: ena: initialize mb bit inxdp_buffto 0
net: cavium: thunder: initialize mb bit inxdp_buffto 0
net: socionext: initialize mb bit inxdp_buffto 0
net: tun: initialize mb bit inxdp_buffto 0
net: ixgbe: initialize mb bit inxdp_buffto 0
net: ice: initialize mb bit inxdp_buffto 0
net: i40e: initialize mb bit inxdp_buffto 0
net: mlx5: initialize mb bit inxdp_buffto 0
net: mlx4: initialize mb bit inxdp_buffto 0Quoted 9 lines
drivers/net/ethernet/amazon/ena/ena_netdev.c | 1 + drivers/net/ethernet/broadcom/bnxt/bnxt_xdp.c | 1 + drivers/net/ethernet/cavium/thunder/nicvf_main.c | 1 + drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c | 1 + drivers/net/ethernet/intel/i40e/i40e_txrx.c | 1 + drivers/net/ethernet/intel/ice/ice_txrx.c | 1 + drivers/net/ethernet/intel/ixgbe/ixgbe_main.c | 1 + drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 1 + drivers/net/ethernet/marvell/mvpp2/mvpp2_main.c | 1 +
Quoted 2 lines
I see that mvneta is missing, but maybe it is doing another kind of init of struct
xdp_buff?
yes, mvneta has been done in a previous patch.
Regards,
Lorenzo
Quoted 24 lines
Quoted 17 lines
drivers/net/ethernet/mellanox/mlx4/en_rx.c | 1 + drivers/net/ethernet/mellanox/mlx5/core/en_rx.c | 1 + drivers/net/ethernet/netronome/nfp/nfp_net_common.c | 1 + drivers/net/ethernet/qlogic/qede/qede_fp.c | 1 + drivers/net/ethernet/sfc/rx.c | 1 + drivers/net/ethernet/socionext/netsec.c | 1 + drivers/net/ethernet/ti/cpsw.c | 1 + drivers/net/ethernet/ti/cpsw_new.c | 1 + drivers/net/hyperv/netvsc_bpf.c | 1 + drivers/net/tun.c | 2 ++ drivers/net/veth.c | 1 + drivers/net/virtio_net.c | 2 ++ drivers/net/xen-netfront.c | 1 + include/net/xdp.h | 8 ++++++-- net/core/dev.c | 1 + 24 files changed, 31 insertions(+), 2 deletions(-)Signature · 4 lines
Best regards, Jesper Dangaard Brouer MSc.CS, Principal Kernel Engineer at Red Hat LinkedIn: http://www.linkedin.com/in/brouer