All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net] sfc: fix kernel panic when creating VF
@ 2022-07-13  9:21 Íñigo Huguet
  2022-07-13 15:51 ` Edward Cree
  2022-07-14 11:00 ` patchwork-bot+netdevbpf
  0 siblings, 2 replies; 3+ messages in thread
From: Íñigo Huguet @ 2022-07-13  9:21 UTC (permalink / raw)
  To: ecree.xilinx, habetsm.xilinx, sshah
  Cc: davem, edumazet, kuba, pabeni, netdev, Íñigo Huguet,
	Ma Yuying

When creating VFs a kernel panic can happen when calling to
efx_ef10_try_update_nic_stats_vf.

When releasing a DMA coherent buffer, sometimes, I don't know in what
specific circumstances, it has to unmap memory with vunmap. It is
disallowed to do that in IRQ context or with BH disabled. Otherwise, we
hit this line in vunmap, causing the crash:
  BUG_ON(in_interrupt());

This patch reenables BH to release the buffer.

Log messages when the bug is hit:
 kernel BUG at mm/vmalloc.c:2727!
 invalid opcode: 0000 [#1] PREEMPT SMP NOPTI
 CPU: 6 PID: 1462 Comm: NetworkManager Kdump: loaded Tainted: G          I      --------- ---  5.14.0-119.el9.x86_64 #1
 Hardware name: Dell Inc. PowerEdge R740/06WXJT, BIOS 2.8.2 08/27/2020
 RIP: 0010:vunmap+0x2e/0x30
 ...skip...
 Call Trace:
  __iommu_dma_free+0x96/0x100
  efx_nic_free_buffer+0x2b/0x40 [sfc]
  efx_ef10_try_update_nic_stats_vf+0x14a/0x1c0 [sfc]
  efx_ef10_update_stats_vf+0x18/0x40 [sfc]
  efx_start_all+0x15e/0x1d0 [sfc]
  efx_net_open+0x5a/0xe0 [sfc]
  __dev_open+0xe7/0x1a0
  __dev_change_flags+0x1d7/0x240
  dev_change_flags+0x21/0x60
  ...skip...

Fixes: d778819609a2 ("sfc: DMA the VF stats only when requested")
Reported-by: Ma Yuying <yuma@redhat.com>
Signed-off-by: Íñigo Huguet <ihuguet@redhat.com>
---
 drivers/net/ethernet/sfc/ef10.c | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/drivers/net/ethernet/sfc/ef10.c b/drivers/net/ethernet/sfc/ef10.c
index 186cb28c03bd..8b62ce21aff3 100644
--- a/drivers/net/ethernet/sfc/ef10.c
+++ b/drivers/net/ethernet/sfc/ef10.c
@@ -1932,7 +1932,10 @@ static int efx_ef10_try_update_nic_stats_vf(struct efx_nic *efx)
 
 	efx_update_sw_stats(efx, stats);
 out:
+	/* releasing a DMA coherent buffer with BH disabled can panic */
+	spin_unlock_bh(&efx->stats_lock);
 	efx_nic_free_buffer(efx, &stats_buf);
+	spin_lock_bh(&efx->stats_lock);
 	return rc;
 }
 
-- 
2.34.1


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

* Re: [PATCH net] sfc: fix kernel panic when creating VF
  2022-07-13  9:21 [PATCH net] sfc: fix kernel panic when creating VF Íñigo Huguet
@ 2022-07-13 15:51 ` Edward Cree
  2022-07-14 11:00 ` patchwork-bot+netdevbpf
  1 sibling, 0 replies; 3+ messages in thread
From: Edward Cree @ 2022-07-13 15:51 UTC (permalink / raw)
  To: Íñigo Huguet, habetsm.xilinx, sshah
  Cc: davem, edumazet, kuba, pabeni, netdev, Ma Yuying

On 13/07/2022 10:21, Íñigo Huguet wrote:
...> Fixes: d778819609a2 ("sfc: DMA the VF stats only when requested")
> Reported-by: Ma Yuying <yuma@redhat.com>
> Signed-off-by: Íñigo Huguet <ihuguet@redhat.com>

Acked-by: Edward Cree <ecree.xilinx@gmail.com>

Really the whole locking thing around stats is ugly and we ought to
 redesign it so as to fix things properly (AFAICT there's no reason
 why the stats_lock needs to be taken by the caller rather than
 within the nic_type->update_stats() method), but for the time being
 this looks like the right minimal fix for 'net'.
-ed

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

* Re: [PATCH net] sfc: fix kernel panic when creating VF
  2022-07-13  9:21 [PATCH net] sfc: fix kernel panic when creating VF Íñigo Huguet
  2022-07-13 15:51 ` Edward Cree
@ 2022-07-14 11:00 ` patchwork-bot+netdevbpf
  1 sibling, 0 replies; 3+ messages in thread
From: patchwork-bot+netdevbpf @ 2022-07-14 11:00 UTC (permalink / raw)
  To: =?utf-8?b?w43DsWlnbyBIdWd1ZXQgPGlodWd1ZXRAcmVkaGF0LmNvbT4=?=
  Cc: ecree.xilinx, habetsm.xilinx, sshah, davem, edumazet, kuba,
	pabeni, netdev, yuma

Hello:

This patch was applied to netdev/net.git (master)
by Paolo Abeni <pabeni@redhat.com>:

On Wed, 13 Jul 2022 11:21:16 +0200 you wrote:
> When creating VFs a kernel panic can happen when calling to
> efx_ef10_try_update_nic_stats_vf.
> 
> When releasing a DMA coherent buffer, sometimes, I don't know in what
> specific circumstances, it has to unmap memory with vunmap. It is
> disallowed to do that in IRQ context or with BH disabled. Otherwise, we
> hit this line in vunmap, causing the crash:
>   BUG_ON(in_interrupt());
> 
> [...]

Here is the summary with links:
  - [net] sfc: fix kernel panic when creating VF
    https://git.kernel.org/netdev/net/c/ada74c5539eb

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] 3+ messages in thread

end of thread, other threads:[~2022-07-14 11:00 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-07-13  9:21 [PATCH net] sfc: fix kernel panic when creating VF Íñigo Huguet
2022-07-13 15:51 ` Edward Cree
2022-07-14 11:00 ` patchwork-bot+netdevbpf

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.