public inbox for netdev@vger.kernel.org 
 help / color / mirror / Atom feed
* [PATCH net 0/2][pull request] Intel Wired LAN Driver Updates 2023-03-21 (iavf, i40e)
@ 2023-03-21 18:35 Tony Nguyen
  2023-03-21 18:35 ` [PATCH net 1/2] iavf: fix hang on reboot with ice Tony Nguyen
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Tony Nguyen @ 2023-03-21 18:35 UTC (permalink / raw)
  To: davem, kuba, pabeni, edumazet, netdev; +Cc: Tony Nguyen

This series contains updates to iavf and i40e drivers.

Stefan Assmann adds check, and return, if driver has already gone
through remove to prevent hang for iavf.

Radoslaw adds zero initialization to ensure Flow Director packets are
populated with correct values for i40e.

The following are changes since commit f038f3917baf04835ba2b7bcf2a04ac93fbf8a9c:
  octeontx2-vf: Add missing free for alloc_percpu
and are available in the git repository at:
  git://git.kernel.org/pub/scm/linux/kernel/git/tnguy/net-queue 40GbE

Radoslaw Tyl (1):
  i40e: fix flow director packet filter programming

Stefan Assmann (1):
  iavf: fix hang on reboot with ice

 drivers/net/ethernet/intel/i40e/i40e_txrx.c | 8 ++++----
 drivers/net/ethernet/intel/iavf/iavf_main.c | 5 +++++
 2 files changed, 9 insertions(+), 4 deletions(-)

-- 
2.38.1


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH net 1/2] iavf: fix hang on reboot with ice
  2023-03-21 18:35 [PATCH net 0/2][pull request] Intel Wired LAN Driver Updates 2023-03-21 (iavf, i40e) Tony Nguyen
@ 2023-03-21 18:35 ` Tony Nguyen
  2023-03-21 18:35 ` [PATCH net 2/2] i40e: fix flow director packet filter programming Tony Nguyen
  2023-03-23  5:50 ` [PATCH net 0/2][pull request] Intel Wired LAN Driver Updates 2023-03-21 (iavf, i40e) patchwork-bot+netdevbpf
  2 siblings, 0 replies; 4+ messages in thread
From: Tony Nguyen @ 2023-03-21 18:35 UTC (permalink / raw)
  To: davem, kuba, pabeni, edumazet, netdev
  Cc: Stefan Assmann, anthony.l.nguyen, Marius Cornea, Michal Kubiak,
	Rafal Romanowski

From: Stefan Assmann <sassmann@kpanic•de>

When a system with E810 with existing VFs gets rebooted the following
hang may be observed.

 Pid 1 is hung in iavf_remove(), part of a network driver:
 PID: 1        TASK: ffff965400e5a340  CPU: 24   COMMAND: "systemd-shutdow"
  #0 [ffffaad04005fa50] __schedule at ffffffff8b3239cb
  #1 [ffffaad04005fae8] schedule at ffffffff8b323e2d
  #2 [ffffaad04005fb00] schedule_hrtimeout_range_clock at ffffffff8b32cebc
  #3 [ffffaad04005fb80] usleep_range_state at ffffffff8b32c930
  #4 [ffffaad04005fbb0] iavf_remove at ffffffffc12b9b4c [iavf]
  #5 [ffffaad04005fbf0] pci_device_remove at ffffffff8add7513
  #6 [ffffaad04005fc10] device_release_driver_internal at ffffffff8af08baa
  #7 [ffffaad04005fc40] pci_stop_bus_device at ffffffff8adcc5fc
  #8 [ffffaad04005fc60] pci_stop_and_remove_bus_device at ffffffff8adcc81e
  #9 [ffffaad04005fc70] pci_iov_remove_virtfn at ffffffff8adf9429
 #10 [ffffaad04005fca8] sriov_disable at ffffffff8adf98e4
 #11 [ffffaad04005fcc8] ice_free_vfs at ffffffffc04bb2c8 [ice]
 #12 [ffffaad04005fd10] ice_remove at ffffffffc04778fe [ice]
 #13 [ffffaad04005fd38] ice_shutdown at ffffffffc0477946 [ice]
 #14 [ffffaad04005fd50] pci_device_shutdown at ffffffff8add58f1
 #15 [ffffaad04005fd70] device_shutdown at ffffffff8af05386
 #16 [ffffaad04005fd98] kernel_restart at ffffffff8a92a870
 #17 [ffffaad04005fda8] __do_sys_reboot at ffffffff8a92abd6
 #18 [ffffaad04005fee0] do_syscall_64 at ffffffff8b317159
 #19 [ffffaad04005ff08] __context_tracking_enter at ffffffff8b31b6fc
 #20 [ffffaad04005ff18] syscall_exit_to_user_mode at ffffffff8b31b50d
 #21 [ffffaad04005ff28] do_syscall_64 at ffffffff8b317169
 #22 [ffffaad04005ff50] entry_SYSCALL_64_after_hwframe at ffffffff8b40009b
     RIP: 00007f1baa5c13d7  RSP: 00007fffbcc55a98  RFLAGS: 00000202
     RAX: ffffffffffffffda  RBX: 0000000000000000  RCX: 00007f1baa5c13d7
     RDX: 0000000001234567  RSI: 0000000028121969  RDI: 00000000fee1dead
     RBP: 00007fffbcc55ca0   R8: 0000000000000000   R9: 00007fffbcc54e90
     R10: 00007fffbcc55050  R11: 0000000000000202  R12: 0000000000000005
     R13: 0000000000000000  R14: 00007fffbcc55af0  R15: 0000000000000000
     ORIG_RAX: 00000000000000a9  CS: 0033  SS: 002b

During reboot all drivers PM shutdown callbacks are invoked.
In iavf_shutdown() the adapter state is changed to __IAVF_REMOVE.
In ice_shutdown() the call chain above is executed, which at some point
calls iavf_remove(). However iavf_remove() expects the VF to be in one
of the states __IAVF_RUNNING, __IAVF_DOWN or __IAVF_INIT_FAILED. If
that's not the case it sleeps forever.
So if iavf_shutdown() gets invoked before iavf_remove() the system will
hang indefinitely because the adapter is already in state __IAVF_REMOVE.

Fix this by returning from iavf_remove() if the state is __IAVF_REMOVE,
as we already went through iavf_shutdown().

Fixes: 974578017fc1 ("iavf: Add waiting so the port is initialized in remove")
Fixes: a8417330f8a5 ("iavf: Fix race condition between iavf_shutdown and iavf_remove")
Reported-by: Marius Cornea <mcornea@redhat•com>
Signed-off-by: Stefan Assmann <sassmann@kpanic•de>
Reviewed-by: Michal Kubiak <michal.kubiak@intel•com>
Tested-by: Rafal Romanowski <rafal.romanowski@intel•com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel•com>
---
 drivers/net/ethernet/intel/iavf/iavf_main.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/drivers/net/ethernet/intel/iavf/iavf_main.c b/drivers/net/ethernet/intel/iavf/iavf_main.c
index 327cd9b1af2c..095201e83c9d 100644
--- a/drivers/net/ethernet/intel/iavf/iavf_main.c
+++ b/drivers/net/ethernet/intel/iavf/iavf_main.c
@@ -5074,6 +5074,11 @@ static void iavf_remove(struct pci_dev *pdev)
 			mutex_unlock(&adapter->crit_lock);
 			break;
 		}
+		/* Simply return if we already went through iavf_shutdown */
+		if (adapter->state == __IAVF_REMOVE) {
+			mutex_unlock(&adapter->crit_lock);
+			return;
+		}
 
 		mutex_unlock(&adapter->crit_lock);
 		usleep_range(500, 1000);
-- 
2.38.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH net 2/2] i40e: fix flow director packet filter programming
  2023-03-21 18:35 [PATCH net 0/2][pull request] Intel Wired LAN Driver Updates 2023-03-21 (iavf, i40e) Tony Nguyen
  2023-03-21 18:35 ` [PATCH net 1/2] iavf: fix hang on reboot with ice Tony Nguyen
@ 2023-03-21 18:35 ` Tony Nguyen
  2023-03-23  5:50 ` [PATCH net 0/2][pull request] Intel Wired LAN Driver Updates 2023-03-21 (iavf, i40e) patchwork-bot+netdevbpf
  2 siblings, 0 replies; 4+ messages in thread
From: Tony Nguyen @ 2023-03-21 18:35 UTC (permalink / raw)
  To: davem, kuba, pabeni, edumazet, netdev
  Cc: Radoslaw Tyl, anthony.l.nguyen, Michal Swiatkowski, Arpana Arland

From: Radoslaw Tyl <radoslawx.tyl@intel•com>

Initialize to zero structures to build a valid
Tx Packet used for the filter programming.

Fixes: a9219b332f52 ("i40e: VLAN field for flow director")
Signed-off-by: Radoslaw Tyl <radoslawx.tyl@intel•com>
Reviewed-by: Michal Swiatkowski <michal.swiatkowski@linux•intel.com>
Tested-by: Arpana Arland <arpanax.arland@intel•com> (A Contingent worker at Intel)
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel•com>
---
 drivers/net/ethernet/intel/i40e/i40e_txrx.c | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/net/ethernet/intel/i40e/i40e_txrx.c b/drivers/net/ethernet/intel/i40e/i40e_txrx.c
index 924f972b91fa..72b091f2509d 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_txrx.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_txrx.c
@@ -171,10 +171,10 @@ static char *i40e_create_dummy_packet(u8 *dummy_packet, bool ipv4, u8 l4proto,
 				      struct i40e_fdir_filter *data)
 {
 	bool is_vlan = !!data->vlan_tag;
-	struct vlan_hdr vlan;
-	struct ipv6hdr ipv6;
-	struct ethhdr eth;
-	struct iphdr ip;
+	struct vlan_hdr vlan = {};
+	struct ipv6hdr ipv6 = {};
+	struct ethhdr eth = {};
+	struct iphdr ip = {};
 	u8 *tmp;
 
 	if (ipv4) {
-- 
2.38.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH net 0/2][pull request] Intel Wired LAN Driver Updates 2023-03-21 (iavf, i40e)
  2023-03-21 18:35 [PATCH net 0/2][pull request] Intel Wired LAN Driver Updates 2023-03-21 (iavf, i40e) Tony Nguyen
  2023-03-21 18:35 ` [PATCH net 1/2] iavf: fix hang on reboot with ice Tony Nguyen
  2023-03-21 18:35 ` [PATCH net 2/2] i40e: fix flow director packet filter programming Tony Nguyen
@ 2023-03-23  5:50 ` patchwork-bot+netdevbpf
  2 siblings, 0 replies; 4+ messages in thread
From: patchwork-bot+netdevbpf @ 2023-03-23  5:50 UTC (permalink / raw)
  To: Tony Nguyen; +Cc: davem, kuba, pabeni, edumazet, netdev

Hello:

This series was applied to netdev/net.git (main)
by Tony Nguyen <anthony.l.nguyen@intel•com>:

On Tue, 21 Mar 2023 11:35:46 -0700 you wrote:
> This series contains updates to iavf and i40e drivers.
> 
> Stefan Assmann adds check, and return, if driver has already gone
> through remove to prevent hang for iavf.
> 
> Radoslaw adds zero initialization to ensure Flow Director packets are
> populated with correct values for i40e.
> 
> [...]

Here is the summary with links:
  - [net,1/2] iavf: fix hang on reboot with ice
    https://git.kernel.org/netdev/net/c/4e264be98b88
  - [net,2/2] i40e: fix flow director packet filter programming
    https://git.kernel.org/netdev/net/c/c672297bbc0e

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html



^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2023-03-23  5:50 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-03-21 18:35 [PATCH net 0/2][pull request] Intel Wired LAN Driver Updates 2023-03-21 (iavf, i40e) Tony Nguyen
2023-03-21 18:35 ` [PATCH net 1/2] iavf: fix hang on reboot with ice Tony Nguyen
2023-03-21 18:35 ` [PATCH net 2/2] i40e: fix flow director packet filter programming Tony Nguyen
2023-03-23  5:50 ` [PATCH net 0/2][pull request] Intel Wired LAN Driver Updates 2023-03-21 (iavf, i40e) patchwork-bot+netdevbpf

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox