All of lore.kernel.org
 help / color / mirror / Atom feed
From: Daniel Borkmann <daniel@iogearbox.net>
To: Jakub Kicinski <kubakici@wp.pl>
Cc: Yuval Mintz <Yuval.Mintz@cavium.com>,
	davem@davemloft.net, netdev@vger.kernel.org,
	alexei.starovoitov@gmail.com
Subject: Re: [PATCH v2 net-next 10/11] qede: Add basic XDP support
Date: Tue, 29 Nov 2016 19:28:56 +0100	[thread overview]
Message-ID: <583DC8E8.1060408@iogearbox.net> (raw)
In-Reply-To: <20161129171020.6b8b552d@jkicinski-Precision-T1700>

On 11/29/2016 06:10 PM, Jakub Kicinski wrote:
> On Tue, 29 Nov 2016 16:48:50 +0100, Daniel Borkmann wrote:
>> On 11/29/2016 03:47 PM, Yuval Mintz wrote:
>>> Add support for the ndo_xdp callback. This patch would support XDP_PASS,
>>> XDP_DROP and XDP_ABORTED commands.
>>>
>>> This also adds a per Rx queue statistic which counts number of packets
>>> which didn't reach the stack [due to XDP].
>>>
>>> Signed-off-by: Yuval Mintz <Yuval.Mintz@cavium.com>
>> [...]
>>> @@ -1560,6 +1593,7 @@ static int qede_rx_process_cqe(struct qede_dev *edev,
>>>    			       struct qede_fastpath *fp,
>>>    			       struct qede_rx_queue *rxq)
>>>    {
>>> +	struct bpf_prog *xdp_prog = READ_ONCE(rxq->xdp_prog);
>>>    	struct eth_fast_path_rx_reg_cqe *fp_cqe;
>>>    	u16 len, pad, bd_cons_idx, parse_flag;
>>>    	enum eth_rx_cqe_type cqe_type;
>>> @@ -1596,6 +1630,11 @@ static int qede_rx_process_cqe(struct qede_dev *edev,
>>>    	len = le16_to_cpu(fp_cqe->len_on_first_bd);
>>>    	pad = fp_cqe->placement_offset;
>>>
>>> +	/* Run eBPF program if one is attached */
>>> +	if (xdp_prog)
>>> +		if (!qede_rx_xdp(edev, fp, rxq, xdp_prog, bd, fp_cqe))
>>> +			return 1;
>>> +
>>
>> You also need to wrap this under rcu_read_lock() (at least I haven't seen
>> it in your patches) for same reasons as stated in 326fe02d1ed6 ("net/mlx4_en:
>> protect ring->xdp_prog with rcu_read_lock"), as otherwise xdp_prog could
>> disappear underneath you. mlx4 and nfp does it correctly, looks like mlx5
>> doesn't.
>
> My understanding was that Yuval is always doing full stop()/start() so
> there should be no RX packets in flight while the XDP prog is being
> changed.  But thinking about it again, perhaps is worth adding the

Ohh, true, thanks for pointing this out. I guess I got confused by
the READ_ONCE() then.

> optimization to forego the full qede_reload() in qede_xdp_set() if there
> is a program already loaded and just do the xchg()+put() (and add RCU
> protection on the fast path)?

Would be worth it as a follow-up later on, yes.

  parent reply	other threads:[~2016-11-29 18:48 UTC|newest]

Thread overview: 18+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-11-29 14:46 [PATCH v2 net-next 00/11] qed*: Add XDP support Yuval Mintz
2016-11-29 14:47 ` [PATCH v2 net-next 01/11] qede: Optimize aggregation information size Yuval Mintz
2016-11-29 14:47 ` [PATCH v2 net-next 02/11] qed: Optimize qed_chain datapath usage Yuval Mintz
2016-11-29 14:47 ` [PATCH v2 net-next 03/11] qede: Remove 'num_tc' Yuval Mintz
2016-11-29 14:47 ` [PATCH v2 net-next 04/11] qede: Refactor statistics gathering Yuval Mintz
2016-11-29 14:47 ` [PATCH v2 net-next 05/11] qede: Refactor data-path Rx flow Yuval Mintz
2016-11-29 14:47 ` [PATCH v2 net-next 06/11] qede: Revise state locking scheme Yuval Mintz
2016-11-29 14:47 ` [PATCH v2 net-next 07/11] qed*: Handle-based L2-queues Yuval Mintz
2016-11-29 14:47 ` [PATCH v2 net-next 08/11] qede: Don't check netdevice for rx-hash Yuval Mintz
2016-11-29 14:47 ` [PATCH v2 net-next 09/11] qede: Better utilize the qede_[rt]x_queue Yuval Mintz
2016-11-29 14:47 ` [PATCH v2 net-next 10/11] qede: Add basic XDP support Yuval Mintz
2016-11-29 15:48   ` Daniel Borkmann
2016-11-29 17:10     ` Jakub Kicinski
2016-11-29 17:51       ` Mintz, Yuval
2016-11-29 18:42         ` Daniel Borkmann
2016-11-29 18:28       ` Daniel Borkmann [this message]
2016-11-29 14:47 ` [PATCH v2 net-next 11/11] qede: Add support for XDP_TX Yuval Mintz
2016-11-30 19:32 ` [PATCH v2 net-next 00/11] qed*: Add XDP support David Miller

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=583DC8E8.1060408@iogearbox.net \
    --to=daniel@iogearbox.net \
    --cc=Yuval.Mintz@cavium.com \
    --cc=alexei.starovoitov@gmail.com \
    --cc=davem@davemloft.net \
    --cc=kubakici@wp.pl \
    --cc=netdev@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.