* [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.