From: Andrew Rybchenko <arybchenko@solarflare.com>
To: <dev@dpdk.org>
Cc: Igor Romanov <igor.romanov@oktetlabs.ru>
Subject: [dpdk-dev] [PATCH 3/6] net/sfc/base: refactor unicast filters reconfiguration
Date: Mon, 30 Mar 2020 11:25:42 +0100 [thread overview]
Message-ID: <1585563945-9537-4-git-send-email-arybchenko@solarflare.com> (raw)
In-Reply-To: <1585563945-9537-1-git-send-email-arybchenko@solarflare.com>
From: Igor Romanov <igor.romanov@oktetlabs.ru>
Refactor the unicast filter reconfiguration stage of the reconfigure
function to make it clearer and allow for more convenient further
changes.
Signed-off-by: Igor Romanov <igor.romanov@oktetlabs.ru>
Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
---
drivers/net/sfc/base/ef10_filter.c | 83 ++++++++++++++++++++----------
1 file changed, 56 insertions(+), 27 deletions(-)
diff --git a/drivers/net/sfc/base/ef10_filter.c b/drivers/net/sfc/base/ef10_filter.c
index 5033ff75ac..35d675a65d 100644
--- a/drivers/net/sfc/base/ef10_filter.c
+++ b/drivers/net/sfc/base/ef10_filter.c
@@ -1803,6 +1803,54 @@ ef10_filter_mark_old_filters(
}
}
+static __checkReturn efx_rc_t
+ef10_filter_insert_renew_unicst_filters(
+ __in efx_nic_t *enp,
+ __in_ecount(6) uint8_t const *mac_addr,
+ __in boolean_t all_unicst,
+ __in efx_filter_flags_t filter_flags,
+ __out boolean_t *all_unicst_inserted)
+{
+ ef10_filter_table_t *table = enp->en_filter.ef_ef10_filter_table;
+ efx_rc_t rc;
+
+ /*
+ * Firmware does not perform chaining on unicast filters. As traffic is
+ * therefore only delivered to the first matching filter, we should
+ * always insert the specific filter for our MAC address, to try and
+ * ensure we get that traffic.
+ *
+ * (If the filter for our MAC address has already been inserted by
+ * another function, we won't receive traffic sent to us, even if we
+ * insert a unicast mismatch filter. To prevent traffic stealing, this
+ * therefore relies on the privilege model only allowing functions to
+ * insert filters for their own MAC address unless explicitly given
+ * additional privileges by the user. This also means that, even on a
+ * priviliged function, inserting a unicast mismatch filter may not
+ * catch all traffic in multi PCI function scenarios.)
+ */
+ table->eft_unicst_filter_count = 0;
+ rc = ef10_filter_insert_unicast(enp, mac_addr, filter_flags);
+ *all_unicst_inserted = B_FALSE;
+ if (all_unicst || (rc != 0)) {
+ efx_rc_t all_unicst_rc;
+
+ all_unicst_rc = ef10_filter_insert_all_unicast(enp,
+ filter_flags);
+ if (all_unicst_rc == 0) {
+ *all_unicst_inserted = B_TRUE;
+ } else if (rc != 0)
+ goto fail1;
+ }
+
+ return (0);
+
+fail1:
+ EFSYS_PROBE1(fail1, efx_rc_t, rc);
+
+ return (rc);
+}
+
/*
* Reconfigure all filters.
* If all_unicst and/or all mulcst filters cannot be applied then
@@ -1824,7 +1872,7 @@ ef10_filter_reconfigure(
ef10_filter_table_t *table = enp->en_filter.ef_ef10_filter_table;
efx_filter_flags_t filter_flags;
unsigned int i;
- efx_rc_t all_unicst_rc = 0;
+ boolean_t all_unicst_inserted = B_FALSE;
efx_rc_t all_mulcst_rc = 0;
efx_rc_t rc;
@@ -1847,31 +1895,12 @@ ef10_filter_reconfigure(
/* Mark old filters which may need to be removed */
ef10_filter_mark_old_filters(enp);
- /*
- * Insert or renew unicast filters.
- *
- * Firmware does not perform chaining on unicast filters. As traffic is
- * therefore only delivered to the first matching filter, we should
- * always insert the specific filter for our MAC address, to try and
- * ensure we get that traffic.
- *
- * (If the filter for our MAC address has already been inserted by
- * another function, we won't receive traffic sent to us, even if we
- * insert a unicast mismatch filter. To prevent traffic stealing, this
- * therefore relies on the privilege model only allowing functions to
- * insert filters for their own MAC address unless explicitly given
- * additional privileges by the user. This also means that, even on a
- * priviliged function, inserting a unicast mismatch filter may not
- * catch all traffic in multi PCI function scenarios.)
- */
- table->eft_unicst_filter_count = 0;
- rc = ef10_filter_insert_unicast(enp, mac_addr, filter_flags);
- if (all_unicst || (rc != 0)) {
- all_unicst_rc = ef10_filter_insert_all_unicast(enp,
- filter_flags);
- if ((rc != 0) && (all_unicst_rc != 0))
- goto fail1;
- }
+ /* Insert or renew unicast filters */
+ rc = ef10_filter_insert_renew_unicst_filters(enp, mac_addr, all_unicst,
+ filter_flags,
+ &all_unicst_inserted);
+ if (rc != 0)
+ goto fail1;
/*
* WORKAROUND_BUG26807 controls firmware support for chained multicast
@@ -1974,7 +2003,7 @@ ef10_filter_reconfigure(
ef10_filter_remove_old(enp);
/* report if any optional flags were rejected */
- if (((all_unicst != B_FALSE) && (all_unicst_rc != 0)) ||
+ if (((all_unicst != B_FALSE) && (all_unicst_inserted == B_FALSE)) ||
((all_mulcst != B_FALSE) && (all_mulcst_rc != 0))) {
rc = ENOTSUP;
}
--
2.17.1
next prev parent reply other threads:[~2020-03-30 10:26 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-30 10:25 [dpdk-dev] [PATCH 0/6] net/sfc: improve Rx mode handling on VF Andrew Rybchenko
2020-03-30 10:25 ` [dpdk-dev] [PATCH 1/6] net/sfc/base: refactor filters cleanup in reconfigure Andrew Rybchenko
2020-03-30 10:25 ` [dpdk-dev] [PATCH 2/6] net/sfc/base: refactor filters mark " Andrew Rybchenko
2020-03-30 10:25 ` Andrew Rybchenko [this message]
2020-03-30 10:25 ` [dpdk-dev] [PATCH 4/6] net/sfc/base: refactor mcast filters reconfiguration Andrew Rybchenko
2020-03-30 10:25 ` [dpdk-dev] [PATCH 5/6] net/sfc/base: add API to get currently operating filters Andrew Rybchenko
2020-03-30 10:25 ` [dpdk-dev] [PATCH 6/6] net/sfc: check actual all multicast unknown unicast filters Andrew Rybchenko
2020-04-02 9:37 ` [dpdk-dev] [PATCH 0/6] net/sfc: improve Rx mode handling on VF Ferruh Yigit
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=1585563945-9537-4-git-send-email-arybchenko@solarflare.com \
--to=arybchenko@solarflare.com \
--cc=dev@dpdk.org \
--cc=igor.romanov@oktetlabs.ru \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).