From: Lennart Sorensen <lsorense@csclub.uwaterloo.ca>
To: intel-wired-lan@lists.osuosl.org
Cc: Przemek Kitszel <przemyslaw.kitszel@intel.com>,
Tony Nguyen <anthony.l.nguyen@intel.com>,
LKML <linux-kernel@vger.kernel.org>,
Netdev <netdev@vger.kernel.org>,
Len Sorensen <lsorense@csclub.uwaterloo.ca>
Subject: Fix promiscous and multicast mode on iavf after reset
Date: Wed, 23 Apr 2025 13:12:54 -0400 [thread overview]
Message-ID: <aAkflkxbvC8MB8PG@csclub.uwaterloo.ca> (raw)
I discovered that anything that causes a reset in iavf makes breaks
promiscous mode and multicast. This is because the host side ice
driver clears the VF from filters when it is reset. iavf then correctly
calls iavf_configure, but since the current_netdev_promisc_flags already
match the netdev promisc settings, nothing is done, so the promisc and
multicast settings are not sent to the ice host driver after the reset.
As a result the iavf side shows promisc enabled but it isn't working.
Disabling and re-enabling promisc on the iavf side fixes it of course.
Simple test case to show this is to enable promisc, check that packets
are being seen, then change the mtu size (which does a reset) and check
packets received again, and promisc is no longer active. Disabling
promisc and enabling it again restores receiving the packets.
The following seems to work for me, but I am not sure it is the correct
place to clear the saved flags.
diff --git a/drivers/net/ethernet/intel/iavf/iavf_main.c b/drivers/net/ethernet/intel/iavf/iavf_main.c
index 6d7ba4d67a19..4018a08d63c1 100644
--- a/drivers/net/ethernet/intel/iavf/iavf_main.c
+++ b/drivers/net/ethernet/intel/iavf/iavf_main.c
@@ -3233,6 +3233,14 @@ static void iavf_reset_task(struct work_struct *work)
iavf_shutdown_adminq(hw);
iavf_init_adminq(hw);
iavf_request_reset(adapter);
+
+ /* Clear remembered promisc and multicast flags since
+ * reset clears them on the host so they will get force
+ * applied again through iavf_configure() down below.
+ */
+ spin_lock_bh(&adapter->current_netdev_promisc_flags_lock);
+ adapter->current_netdev_promisc_flags &= ~(IFF_PROMISC | IFF_ALLMULTI);
+ spin_unlock_bh(&adapter->current_netdev_promisc_flags_lock);
}
adapter->flags |= IAVF_FLAG_RESET_PENDING;
--
Len Sorensen
next reply other threads:[~2025-04-23 17:21 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-04-23 17:12 Lennart Sorensen [this message]
2025-04-24 21:59 ` Fix promiscous and multicast mode on iavf after reset Jacob Keller
2025-04-25 16:22 ` Lennart Sorensen
2025-04-29 18:44 ` Jacob Keller
2025-05-02 2:48 ` Lennart Sorensen
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=aAkflkxbvC8MB8PG@csclub.uwaterloo.ca \
--to=lsorense@csclub.uwaterloo.ca \
--cc=anthony.l.nguyen@intel.com \
--cc=intel-wired-lan@lists.osuosl.org \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=przemyslaw.kitszel@intel.com \
/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