Brett Creeley 221465de6b iavf: Fix promiscuous mode configuration flow messages
Currently when configuring promiscuous mode on the AVF we detect a
change in the netdev->flags. We use IFF_PROMISC and IFF_ALLMULTI to
determine whether or not we need to request/release promiscuous mode
and/or multicast promiscuous mode. The problem is that the AQ calls for
setting/clearing promiscuous/multicast mode are treated separately. This
leads to a case where we can trigger two promiscuous mode AQ calls in
a row with the incorrect state. To fix this make a few changes.

Use IAVF_FLAG_AQ_CONFIGURE_PROMISC_MODE instead of the previous
IAVF_FLAG_AQ_[REQUEST|RELEASE]_[PROMISC|ALLMULTI] flags.

In iavf_set_rx_mode() detect if there is a change in the
netdev->flags in comparison with adapter->flags and set the
IAVF_FLAG_AQ_CONFIGURE_PROMISC_MODE aq_required bit. Then in
iavf_process_aq_command() only check for IAVF_FLAG_CONFIGURE_PROMISC_MODE
and call iavf_set_promiscuous() if it's set.

In iavf_set_promiscuous() check again to see which (if any) promiscuous
mode bits have changed when comparing the netdev->flags with the
adapter->flags. Use this to set the flags which get sent to the PF
driver.

Add a spinlock that is used for updating current_netdev_promisc_flags
and only allows one promiscuous mode AQ at a time.

[1] Fixes the fact that we will only have one AQ call in the aq_required
queue at any one time.

[2] Streamlines the change in promiscuous mode to only set one AQ
required bit.

[3] This allows us to keep track of the current state of the flags and
also makes it so we can take the most recent netdev->flags promiscuous
mode state.

[4] This fixes the problem where a change in the netdev->flags can cause
IAVF_FLAG_AQ_CONFIGURE_PROMISC_MODE to be set in iavf_set_rx_mode(),
but cleared in iavf_set_promiscuous() before the change is ever made via
AQ call.

Fixes: 47d3483988f6 ("i40evf: Add driver support for promiscuous mode")
Signed-off-by: Brett Creeley <brett.creeley@intel.com>
Signed-off-by: Ahmed Zaki <ahmed.zaki@intel.com>
Tested-by: Rafal Romanowski <rafal.romanowski@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
2023-09-11 08:53:20 -07:00
..
2023-08-24 07:26:06 +10:00
2023-09-05 12:37:28 -07:00
2023-08-30 13:34:34 -07:00
2023-09-01 09:43:18 -07:00
2023-09-01 09:53:54 -07:00
2023-09-04 13:47:59 -07:00
2023-08-31 12:43:10 -07:00
2023-08-24 16:20:30 -07:00
2023-09-03 10:49:42 -07:00
2023-08-30 13:34:34 -07:00
2023-08-30 19:23:00 -07:00
2023-08-30 16:42:21 -07:00
2023-08-29 10:21:56 -07:00
2023-09-07 13:52:20 -07:00
2023-09-01 12:31:44 -07:00
2023-09-04 11:26:29 -07:00
2023-08-28 16:35:01 -07:00
2023-09-01 09:53:54 -07:00
2023-09-02 12:02:41 -07:00
2023-09-06 09:24:25 -07:00
2023-09-01 16:54:25 -07:00
2023-09-04 13:52:58 -07:00
2023-08-31 12:43:10 -07:00
2023-08-29 20:21:42 -07:00
2023-09-01 12:21:32 -07:00
2023-08-29 09:47:33 -07:00
2023-09-01 09:53:54 -07:00
2023-09-01 09:38:00 -07:00
2023-09-04 13:47:59 -07:00
2023-08-30 18:32:24 -07:00
2023-08-29 20:21:42 -07:00
2023-08-30 16:59:03 -07:00
2023-08-31 12:43:10 -07:00
2023-09-07 13:52:20 -07:00
2023-09-03 10:38:02 -07:00
2023-09-07 18:05:58 -07:00
2023-09-07 15:51:07 -07:00
2023-09-04 15:12:26 -07:00
2023-09-04 15:08:52 -07:00
2023-09-07 16:07:35 -07:00
2023-09-05 12:37:28 -07:00
2023-09-03 10:20:57 -07:00
2023-09-07 15:49:20 -07:00
2023-09-07 18:05:58 -07:00
2023-09-02 12:02:41 -07:00
2023-09-01 09:38:00 -07:00
2023-09-02 08:25:19 +01:00
2023-09-07 10:35:14 -07:00
2023-09-04 10:43:44 -07:00
2023-08-30 20:41:37 -07:00
2023-09-06 09:00:37 -07:00
2023-08-24 16:20:18 -07:00
2023-09-06 09:19:12 -07:00
2023-08-29 20:32:10 -07:00