netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH net] net: atlantic: Fix DMA mapping for PTP hwts ring
@ 2024-02-01  9:47 Ivan Vecera
  2024-02-01 12:39 ` Jiri Pirko
  2024-02-03  4:50 ` patchwork-bot+netdevbpf
  0 siblings, 2 replies; 3+ messages in thread
From: Ivan Vecera @ 2024-02-01  9:47 UTC (permalink / raw)
  To: netdev
  Cc: Egor Pomozov, Igor Russkikh, David S. Miller, Eric Dumazet,
	Jakub Kicinski, Paolo Abeni, Richard Cochran, Dmitry Bezrukov,
	Sergey Samoilenko, open list

Function aq_ring_hwts_rx_alloc() maps extra AQ_CFG_RXDS_DEF bytes
for PTP HWTS ring but then generic aq_ring_free() does not take this
into account.
Create and use a specific function to free HWTS ring to fix this
issue.

Trace:
[  215.351607] ------------[ cut here ]------------
[  215.351612] DMA-API: atlantic 0000:4b:00.0: device driver frees DMA memory with different size [device address=0x00000000fbdd0000] [map size=34816 bytes] [unmap size=32768 bytes]
[  215.351635] WARNING: CPU: 33 PID: 10759 at kernel/dma/debug.c:988 check_unmap+0xa6f/0x2360
...
[  215.581176] Call Trace:
[  215.583632]  <TASK>
[  215.585745]  ? show_trace_log_lvl+0x1c4/0x2df
[  215.590114]  ? show_trace_log_lvl+0x1c4/0x2df
[  215.594497]  ? debug_dma_free_coherent+0x196/0x210
[  215.599305]  ? check_unmap+0xa6f/0x2360
[  215.603147]  ? __warn+0xca/0x1d0
[  215.606391]  ? check_unmap+0xa6f/0x2360
[  215.610237]  ? report_bug+0x1ef/0x370
[  215.613921]  ? handle_bug+0x3c/0x70
[  215.617423]  ? exc_invalid_op+0x14/0x50
[  215.621269]  ? asm_exc_invalid_op+0x16/0x20
[  215.625480]  ? check_unmap+0xa6f/0x2360
[  215.629331]  ? mark_lock.part.0+0xca/0xa40
[  215.633445]  debug_dma_free_coherent+0x196/0x210
[  215.638079]  ? __pfx_debug_dma_free_coherent+0x10/0x10
[  215.643242]  ? slab_free_freelist_hook+0x11d/0x1d0
[  215.648060]  dma_free_attrs+0x6d/0x130
[  215.651834]  aq_ring_free+0x193/0x290 [atlantic]
[  215.656487]  aq_ptp_ring_free+0x67/0x110 [atlantic]
...
[  216.127540] ---[ end trace 6467e5964dd2640b ]---
[  216.132160] DMA-API: Mapped at:
[  216.132162]  debug_dma_alloc_coherent+0x66/0x2f0
[  216.132165]  dma_alloc_attrs+0xf5/0x1b0
[  216.132168]  aq_ring_hwts_rx_alloc+0x150/0x1f0 [atlantic]
[  216.132193]  aq_ptp_ring_alloc+0x1bb/0x540 [atlantic]
[  216.132213]  aq_nic_init+0x4a1/0x760 [atlantic]

Fixes: 94ad94558b0f ("net: aquantia: add PTP rings infrastructure")
Signed-off-by: Ivan Vecera <ivecera@redhat.com>
---
 drivers/net/ethernet/aquantia/atlantic/aq_ptp.c  |  4 ++--
 drivers/net/ethernet/aquantia/atlantic/aq_ring.c | 13 +++++++++++++
 drivers/net/ethernet/aquantia/atlantic/aq_ring.h |  1 +
 3 files changed, 16 insertions(+), 2 deletions(-)

diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_ptp.c b/drivers/net/ethernet/aquantia/atlantic/aq_ptp.c
index abd4832e4ed2..5acb3e16b567 100644
--- a/drivers/net/ethernet/aquantia/atlantic/aq_ptp.c
+++ b/drivers/net/ethernet/aquantia/atlantic/aq_ptp.c
@@ -993,7 +993,7 @@ int aq_ptp_ring_alloc(struct aq_nic_s *aq_nic)
 	return 0;
 
 err_exit_hwts_rx:
-	aq_ring_free(&aq_ptp->hwts_rx);
+	aq_ring_hwts_rx_free(&aq_ptp->hwts_rx);
 err_exit_ptp_rx:
 	aq_ring_free(&aq_ptp->ptp_rx);
 err_exit_ptp_tx:
@@ -1011,7 +1011,7 @@ void aq_ptp_ring_free(struct aq_nic_s *aq_nic)
 
 	aq_ring_free(&aq_ptp->ptp_tx);
 	aq_ring_free(&aq_ptp->ptp_rx);
-	aq_ring_free(&aq_ptp->hwts_rx);
+	aq_ring_hwts_rx_free(&aq_ptp->hwts_rx);
 
 	aq_ptp_skb_ring_release(&aq_ptp->skb_ring);
 }
diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_ring.c b/drivers/net/ethernet/aquantia/atlantic/aq_ring.c
index cda8597b4e14..f7433abd6591 100644
--- a/drivers/net/ethernet/aquantia/atlantic/aq_ring.c
+++ b/drivers/net/ethernet/aquantia/atlantic/aq_ring.c
@@ -919,6 +919,19 @@ void aq_ring_free(struct aq_ring_s *self)
 	}
 }
 
+void aq_ring_hwts_rx_free(struct aq_ring_s *self)
+{
+	if (!self)
+		return;
+
+	if (self->dx_ring) {
+		dma_free_coherent(aq_nic_get_dev(self->aq_nic),
+				  self->size * self->dx_size + AQ_CFG_RXDS_DEF,
+				  self->dx_ring, self->dx_ring_pa);
+		self->dx_ring = NULL;
+	}
+}
+
 unsigned int aq_ring_fill_stats_data(struct aq_ring_s *self, u64 *data)
 {
 	unsigned int count;
diff --git a/drivers/net/ethernet/aquantia/atlantic/aq_ring.h b/drivers/net/ethernet/aquantia/atlantic/aq_ring.h
index 52847310740a..d627ace850ff 100644
--- a/drivers/net/ethernet/aquantia/atlantic/aq_ring.h
+++ b/drivers/net/ethernet/aquantia/atlantic/aq_ring.h
@@ -210,6 +210,7 @@ int aq_ring_rx_fill(struct aq_ring_s *self);
 int aq_ring_hwts_rx_alloc(struct aq_ring_s *self,
 			  struct aq_nic_s *aq_nic, unsigned int idx,
 			  unsigned int size, unsigned int dx_size);
+void aq_ring_hwts_rx_free(struct aq_ring_s *self);
 void aq_ring_hwts_rx_clean(struct aq_ring_s *self, struct aq_nic_s *aq_nic);
 
 unsigned int aq_ring_fill_stats_data(struct aq_ring_s *self, u64 *data);
-- 
2.41.0


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

* Re: [PATCH net] net: atlantic: Fix DMA mapping for PTP hwts ring
  2024-02-01  9:47 [PATCH net] net: atlantic: Fix DMA mapping for PTP hwts ring Ivan Vecera
@ 2024-02-01 12:39 ` Jiri Pirko
  2024-02-03  4:50 ` patchwork-bot+netdevbpf
  1 sibling, 0 replies; 3+ messages in thread
From: Jiri Pirko @ 2024-02-01 12:39 UTC (permalink / raw)
  To: Ivan Vecera
  Cc: netdev, Egor Pomozov, Igor Russkikh, David S. Miller,
	Eric Dumazet, Jakub Kicinski, Paolo Abeni, Richard Cochran,
	Dmitry Bezrukov, Sergey Samoilenko, open list

Thu, Feb 01, 2024 at 10:47:51AM CET, ivecera@redhat.com wrote:
>Function aq_ring_hwts_rx_alloc() maps extra AQ_CFG_RXDS_DEF bytes
>for PTP HWTS ring but then generic aq_ring_free() does not take this
>into account.
>Create and use a specific function to free HWTS ring to fix this
>issue.
>
>Trace:
>[  215.351607] ------------[ cut here ]------------
>[  215.351612] DMA-API: atlantic 0000:4b:00.0: device driver frees DMA memory with different size [device address=0x00000000fbdd0000] [map size=34816 bytes] [unmap size=32768 bytes]
>[  215.351635] WARNING: CPU: 33 PID: 10759 at kernel/dma/debug.c:988 check_unmap+0xa6f/0x2360
>...
>[  215.581176] Call Trace:
>[  215.583632]  <TASK>
>[  215.585745]  ? show_trace_log_lvl+0x1c4/0x2df
>[  215.590114]  ? show_trace_log_lvl+0x1c4/0x2df
>[  215.594497]  ? debug_dma_free_coherent+0x196/0x210
>[  215.599305]  ? check_unmap+0xa6f/0x2360
>[  215.603147]  ? __warn+0xca/0x1d0
>[  215.606391]  ? check_unmap+0xa6f/0x2360
>[  215.610237]  ? report_bug+0x1ef/0x370
>[  215.613921]  ? handle_bug+0x3c/0x70
>[  215.617423]  ? exc_invalid_op+0x14/0x50
>[  215.621269]  ? asm_exc_invalid_op+0x16/0x20
>[  215.625480]  ? check_unmap+0xa6f/0x2360
>[  215.629331]  ? mark_lock.part.0+0xca/0xa40
>[  215.633445]  debug_dma_free_coherent+0x196/0x210
>[  215.638079]  ? __pfx_debug_dma_free_coherent+0x10/0x10
>[  215.643242]  ? slab_free_freelist_hook+0x11d/0x1d0
>[  215.648060]  dma_free_attrs+0x6d/0x130
>[  215.651834]  aq_ring_free+0x193/0x290 [atlantic]
>[  215.656487]  aq_ptp_ring_free+0x67/0x110 [atlantic]
>...
>[  216.127540] ---[ end trace 6467e5964dd2640b ]---
>[  216.132160] DMA-API: Mapped at:
>[  216.132162]  debug_dma_alloc_coherent+0x66/0x2f0
>[  216.132165]  dma_alloc_attrs+0xf5/0x1b0
>[  216.132168]  aq_ring_hwts_rx_alloc+0x150/0x1f0 [atlantic]
>[  216.132193]  aq_ptp_ring_alloc+0x1bb/0x540 [atlantic]
>[  216.132213]  aq_nic_init+0x4a1/0x760 [atlantic]
>
>Fixes: 94ad94558b0f ("net: aquantia: add PTP rings infrastructure")
>Signed-off-by: Ivan Vecera <ivecera@redhat.com>

Reviewed-by: Jiri Pirko <jiri@nvidia.com>

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

* Re: [PATCH net] net: atlantic: Fix DMA mapping for PTP hwts ring
  2024-02-01  9:47 [PATCH net] net: atlantic: Fix DMA mapping for PTP hwts ring Ivan Vecera
  2024-02-01 12:39 ` Jiri Pirko
@ 2024-02-03  4:50 ` patchwork-bot+netdevbpf
  1 sibling, 0 replies; 3+ messages in thread
From: patchwork-bot+netdevbpf @ 2024-02-03  4:50 UTC (permalink / raw)
  To: Ivan Vecera
  Cc: netdev, epomozov, irusskikh, davem, edumazet, kuba, pabeni,
	richardcochran, dmitry.bezrukov, sergey.samoilenko, linux-kernel

Hello:

This patch was applied to netdev/net.git (main)
by Jakub Kicinski <kuba@kernel.org>:

On Thu,  1 Feb 2024 10:47:51 +0100 you wrote:
> Function aq_ring_hwts_rx_alloc() maps extra AQ_CFG_RXDS_DEF bytes
> for PTP HWTS ring but then generic aq_ring_free() does not take this
> into account.
> Create and use a specific function to free HWTS ring to fix this
> issue.
> 
> Trace:
> [  215.351607] ------------[ cut here ]------------
> [  215.351612] DMA-API: atlantic 0000:4b:00.0: device driver frees DMA memory with different size [device address=0x00000000fbdd0000] [map size=34816 bytes] [unmap size=32768 bytes]
> [  215.351635] WARNING: CPU: 33 PID: 10759 at kernel/dma/debug.c:988 check_unmap+0xa6f/0x2360
> ...
> [  215.581176] Call Trace:
> [  215.583632]  <TASK>
> [  215.585745]  ? show_trace_log_lvl+0x1c4/0x2df
> [  215.590114]  ? show_trace_log_lvl+0x1c4/0x2df
> [  215.594497]  ? debug_dma_free_coherent+0x196/0x210
> [  215.599305]  ? check_unmap+0xa6f/0x2360
> [  215.603147]  ? __warn+0xca/0x1d0
> [  215.606391]  ? check_unmap+0xa6f/0x2360
> [  215.610237]  ? report_bug+0x1ef/0x370
> [  215.613921]  ? handle_bug+0x3c/0x70
> [  215.617423]  ? exc_invalid_op+0x14/0x50
> [  215.621269]  ? asm_exc_invalid_op+0x16/0x20
> [  215.625480]  ? check_unmap+0xa6f/0x2360
> [  215.629331]  ? mark_lock.part.0+0xca/0xa40
> [  215.633445]  debug_dma_free_coherent+0x196/0x210
> [  215.638079]  ? __pfx_debug_dma_free_coherent+0x10/0x10
> [  215.643242]  ? slab_free_freelist_hook+0x11d/0x1d0
> [  215.648060]  dma_free_attrs+0x6d/0x130
> [  215.651834]  aq_ring_free+0x193/0x290 [atlantic]
> [  215.656487]  aq_ptp_ring_free+0x67/0x110 [atlantic]
> ...
> [  216.127540] ---[ end trace 6467e5964dd2640b ]---
> [  216.132160] DMA-API: Mapped at:
> [  216.132162]  debug_dma_alloc_coherent+0x66/0x2f0
> [  216.132165]  dma_alloc_attrs+0xf5/0x1b0
> [  216.132168]  aq_ring_hwts_rx_alloc+0x150/0x1f0 [atlantic]
> [  216.132193]  aq_ptp_ring_alloc+0x1bb/0x540 [atlantic]
> [  216.132213]  aq_nic_init+0x4a1/0x760 [atlantic]
> 
> [...]

Here is the summary with links:
  - [net] net: atlantic: Fix DMA mapping for PTP hwts ring
    https://git.kernel.org/netdev/net/c/2e7d3b67630d

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:[~2024-02-03  4:50 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-02-01  9:47 [PATCH net] net: atlantic: Fix DMA mapping for PTP hwts ring Ivan Vecera
2024-02-01 12:39 ` Jiri Pirko
2024-02-03  4:50 ` 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;
as well as URLs for NNTP newsgroup(s).