From: Andre Guedes <andre.guedes@intel.com>
To: intel-wired-lan@osuosl.org
Subject: [Intel-wired-lan] [PATCH v2 2/9] igc: Refactor igc_xdp_run_prog()
Date: Wed, 23 Dec 2020 12:36:58 -0800 [thread overview]
Message-ID: <20201223203705.78705-3-andre.guedes@intel.com> (raw)
In-Reply-To: <20201223203705.78705-1-andre.guedes@intel.com>
Refactor igc_xdp_run_prog() helper, preparing the code for AF_XDP
zero-copy support which is added by upcoming patches.
With AF_XDP zero-copy support, igc_poll() will have a dedicated path
when rx ring's memory model is MEM_TYPE_XSK_BUFF_POOL. To avoid code
duplication as much as possible, encapsulate the code specific to
handling XDP program actions into a local helper so it can be reused by
the zero-copy path.
Signed-off-by: Andre Guedes <andre.guedes@intel.com>
---
drivers/net/ethernet/intel/igc/igc_main.c | 56 +++++++++++------------
1 file changed, 28 insertions(+), 28 deletions(-)
diff --git a/drivers/net/ethernet/intel/igc/igc_main.c b/drivers/net/ethernet/intel/igc/igc_main.c
index 0e582a4ee986..56b791b356dc 100644
--- a/drivers/net/ethernet/intel/igc/igc_main.c
+++ b/drivers/net/ethernet/intel/igc/igc_main.c
@@ -2029,38 +2029,22 @@ static int igc_xdp_xmit_back(struct igc_adapter *adapter, struct xdp_buff *xdp)
return res;
}
-static struct sk_buff *igc_xdp_run_prog(struct igc_adapter *adapter,
- struct xdp_buff *xdp)
+/* This function assumes rcu_read_lock() is held by the caller. */
+static int igc_xdp_do_run_prog(struct igc_adapter *adapter,
+ struct bpf_prog *prog,
+ struct xdp_buff *xdp)
{
- struct bpf_prog *prog;
- int res;
- u32 act;
-
- rcu_read_lock();
-
- prog = READ_ONCE(adapter->xdp_prog);
- if (!prog) {
- res = IGC_XDP_PASS;
- goto unlock;
- }
+ u32 act = bpf_prog_run_xdp(prog, xdp);
- act = bpf_prog_run_xdp(prog, xdp);
switch (act) {
case XDP_PASS:
- res = IGC_XDP_PASS;
- break;
+ return IGC_XDP_PASS;
case XDP_TX:
- if (igc_xdp_xmit_back(adapter, xdp) < 0)
- res = IGC_XDP_CONSUMED;
- else
- res = IGC_XDP_TX;
- break;
+ return igc_xdp_xmit_back(adapter, xdp) < 0 ?
+ IGC_XDP_CONSUMED : IGC_XDP_TX;
case XDP_REDIRECT:
- if (xdp_do_redirect(adapter->netdev, xdp, prog) < 0)
- res = IGC_XDP_CONSUMED;
- else
- res = IGC_XDP_REDIRECT;
- break;
+ return xdp_do_redirect(adapter->netdev, xdp, prog) < 0 ?
+ IGC_XDP_CONSUMED : IGC_XDP_REDIRECT;
default:
bpf_warn_invalid_xdp_action(act);
fallthrough;
@@ -2068,9 +2052,25 @@ static struct sk_buff *igc_xdp_run_prog(struct igc_adapter *adapter,
trace_xdp_exception(adapter->netdev, prog, act);
fallthrough;
case XDP_DROP:
- res = IGC_XDP_CONSUMED;
- break;
+ return IGC_XDP_CONSUMED;
}
+}
+
+static struct sk_buff *igc_xdp_run_prog(struct igc_adapter *adapter,
+ struct xdp_buff *xdp)
+{
+ struct bpf_prog *prog;
+ int res;
+
+ rcu_read_lock();
+
+ prog = READ_ONCE(adapter->xdp_prog);
+ if (!prog) {
+ res = IGC_XDP_PASS;
+ goto unlock;
+ }
+
+ res = igc_xdp_do_run_prog(adapter, prog, xdp);
unlock:
rcu_read_unlock();
--
2.29.2
next prev parent reply other threads:[~2020-12-23 20:36 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-12-23 20:36 [Intel-wired-lan] [PATCH v2 0/9] igc: Add support for AF_XDP zero-copy Andre Guedes
2020-12-23 20:36 ` [Intel-wired-lan] [PATCH v2 1/9] igc: Move igc_xdp_is_enabled() Andre Guedes
2020-12-23 20:36 ` Andre Guedes [this message]
2020-12-23 20:36 ` [Intel-wired-lan] [PATCH v2 3/9] igc: Refactor igc_clean_rx_ring() Andre Guedes
2020-12-23 20:37 ` [Intel-wired-lan] [PATCH v2 4/9] igc: Refactor XDP rxq info registration Andre Guedes
2020-12-23 20:37 ` [Intel-wired-lan] [PATCH v2 5/9] igc: Introduce tx/rx stats helpers Andre Guedes
2020-12-23 20:37 ` [Intel-wired-lan] [PATCH v2 6/9] igc: Introduce igc_unmap_tx_buffer() helper Andre Guedes
2020-12-23 20:37 ` [Intel-wired-lan] [PATCH v2 7/9] igc: Replace IGC_TX_FLAGS_XDP flag by an enum Andre Guedes
2020-12-23 20:37 ` [Intel-wired-lan] [PATCH v2 8/9] igc: Enable RX via AF_XDP zero-copy Andre Guedes
2020-12-23 20:37 ` [Intel-wired-lan] [PATCH v2 9/9] igc: Enable TX " Andre Guedes
2021-01-05 17:48 ` [Intel-wired-lan] [PATCH v2 0/9] igc: Add support for " Maciej Fijalkowski
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=20201223203705.78705-3-andre.guedes@intel.com \
--to=andre.guedes@intel.com \
--cc=intel-wired-lan@osuosl.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.