From: "Théo Lebrun" <theo.lebrun@bootlin.com>
To: "Sean Anderson" <sean.anderson@linux.dev>,
"Andrew Lunn" <andrew+netdev@lunn.ch>,
"David S. Miller" <davem@davemloft.net>,
"Eric Dumazet" <edumazet@google.com>,
"Jakub Kicinski" <kuba@kernel.org>,
"Paolo Abeni" <pabeni@redhat.com>,
"Rob Herring" <robh@kernel.org>,
"Krzysztof Kozlowski" <krzk+dt@kernel.org>,
"Conor Dooley" <conor+dt@kernel.org>,
"Nicolas Ferre" <nicolas.ferre@microchip.com>,
"Claudiu Beznea" <claudiu.beznea@tuxon.dev>,
"Paul Walmsley" <paul.walmsley@sifive.com>,
"Palmer Dabbelt" <palmer@dabbelt.com>,
"Albert Ou" <aou@eecs.berkeley.edu>,
"Alexandre Ghiti" <alex@ghiti.fr>,
"Samuel Holland" <samuel.holland@sifive.com>,
"Richard Cochran" <richardcochran@gmail.com>,
"Russell King" <linux@armlinux.org.uk>,
"Thomas Bogendoerfer" <tsbogend@alpha.franken.de>,
"Vladimir Kondratiev" <vladimir.kondratiev@mobileye.com>,
"Gregory CLEMENT" <gregory.clement@bootlin.com>,
"Cyrille Pitchen" <cyrille.pitchen@atmel.com>,
"Harini Katakam" <harini.katakam@xilinx.com>,
"Rafal Ozieblo" <rafalo@cadence.com>,
"Haavard Skinnemoen" <hskinnemoen@atmel.com>
Cc: <netdev@vger.kernel.org>, <devicetree@vger.kernel.org>,
<linux-kernel@vger.kernel.org>, <linux-riscv@lists.infradead.org>,
<linux-mips@vger.kernel.org>,
"Thomas Petazzoni" <thomas.petazzoni@bootlin.com>,
"Tawfik Bayouk" <tawfik.bayouk@mobileye.com>
Subject: Re: [PATCH net-next v2 11/18] net: macb: single dma_alloc_coherent() for DMA descriptors
Date: Thu, 07 Aug 2025 16:48:27 +0200 [thread overview]
Message-ID: <DBWA12ZND9TY.2SA3R9T5UJTZR@bootlin.com> (raw)
In-Reply-To: <7752e805-0a06-46ed-b4ac-a51081a73f78@linux.dev>
Hello Sean,
Thanks for the review! I'll reply only to questions (or comments about
which I have questions).
On Tue Jul 1, 2025 at 6:32 PM CEST, Sean Anderson wrote:
> On 6/27/25 05:08, Théo Lebrun wrote:
>> Move from two (Tx/Rx) dma_alloc_coherent() for DMA descriptor rings *per
>> queue* to two dma_alloc_coherent() overall.
>>
>> Issue is with how all queues share the same register for configuring the
>> upper 32-bits of Tx/Rx descriptor rings. For example, with Tx, notice
>> how TBQPH does *not* depend on the queue index:
>>
>> #define GEM_TBQP(hw_q) (0x0440 + ((hw_q) << 2))
>> #define GEM_TBQPH(hw_q) (0x04C8)
>>
>> queue_writel(queue, TBQP, lower_32_bits(queue->tx_ring_dma));
>> #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT
>> if (bp->hw_dma_cap & HW_DMA_CAP_64B)
>> queue_writel(queue, TBQPH, upper_32_bits(queue->tx_ring_dma));
>> #endif
>>
>> To maxime our chances of getting valid DMA addresses, we do a single
>
> maximize
>
>> dma_alloc_coherent() across queues.
>
> Is there really any chance involved (other than avoiding ENOMEM)?
If we land in the the page allocator codepath of dma_alloc_coherent(),
then we get natural alignment guarantees, see alloc_pages() comment [0].
[0]: https://elixir.bootlin.com/linux/v6.16/source/mm/mempolicy.c#L2499-L2502
However, we cannot be certain we land in that path. If we have an
IOMMU, then I don't think the API provides strong enough guarantees.
Same for custom `struct dma_map_ops`, be it per-device or arch-specific.
I am not aware (is anything documented on that?) of any alignment
guarantees.
Even if those give us page-aligned allocations, that isn't enough. For
example let's say we want 256KiB. We get 0xFFFF0000 from an allocator.
That is page aligned, but:
upper_32_bits(START) != upper_32_bits(START + SIZE - 1)
upper_32_bits(0xFFFF0000) != upper_32_bits(0xFFFF0000 + 0x40000 - 1)
0x0 != 0x1
Thanks!
--
Théo Lebrun, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
WARNING: multiple messages have this Message-ID (diff)
From: "Théo Lebrun" <theo.lebrun@bootlin.com>
To: "Sean Anderson" <sean.anderson@linux.dev>,
"Andrew Lunn" <andrew+netdev@lunn.ch>,
"David S. Miller" <davem@davemloft.net>,
"Eric Dumazet" <edumazet@google.com>,
"Jakub Kicinski" <kuba@kernel.org>,
"Paolo Abeni" <pabeni@redhat.com>,
"Rob Herring" <robh@kernel.org>,
"Krzysztof Kozlowski" <krzk+dt@kernel.org>,
"Conor Dooley" <conor+dt@kernel.org>,
"Nicolas Ferre" <nicolas.ferre@microchip.com>,
"Claudiu Beznea" <claudiu.beznea@tuxon.dev>,
"Paul Walmsley" <paul.walmsley@sifive.com>,
"Palmer Dabbelt" <palmer@dabbelt.com>,
"Albert Ou" <aou@eecs.berkeley.edu>,
"Alexandre Ghiti" <alex@ghiti.fr>,
"Samuel Holland" <samuel.holland@sifive.com>,
"Richard Cochran" <richardcochran@gmail.com>,
"Russell King" <linux@armlinux.org.uk>,
"Thomas Bogendoerfer" <tsbogend@alpha.franken.de>,
"Vladimir Kondratiev" <vladimir.kondratiev@mobileye.com>,
"Gregory CLEMENT" <gregory.clement@bootlin.com>,
"Cyrille Pitchen" <cyrille.pitchen@atmel.com>,
"Harini Katakam" <harini.katakam@xilinx.com>,
"Rafal Ozieblo" <rafalo@cadence.com>,
"Haavard Skinnemoen" <hskinnemoen@atmel.com>
Cc: <netdev@vger.kernel.org>, <devicetree@vger.kernel.org>,
<linux-kernel@vger.kernel.org>, <linux-riscv@lists.infradead.org>,
<linux-mips@vger.kernel.org>,
"Thomas Petazzoni" <thomas.petazzoni@bootlin.com>,
"Tawfik Bayouk" <tawfik.bayouk@mobileye.com>
Subject: Re: [PATCH net-next v2 11/18] net: macb: single dma_alloc_coherent() for DMA descriptors
Date: Thu, 07 Aug 2025 16:48:27 +0200 [thread overview]
Message-ID: <DBWA12ZND9TY.2SA3R9T5UJTZR@bootlin.com> (raw)
In-Reply-To: <7752e805-0a06-46ed-b4ac-a51081a73f78@linux.dev>
Hello Sean,
Thanks for the review! I'll reply only to questions (or comments about
which I have questions).
On Tue Jul 1, 2025 at 6:32 PM CEST, Sean Anderson wrote:
> On 6/27/25 05:08, Théo Lebrun wrote:
>> Move from two (Tx/Rx) dma_alloc_coherent() for DMA descriptor rings *per
>> queue* to two dma_alloc_coherent() overall.
>>
>> Issue is with how all queues share the same register for configuring the
>> upper 32-bits of Tx/Rx descriptor rings. For example, with Tx, notice
>> how TBQPH does *not* depend on the queue index:
>>
>> #define GEM_TBQP(hw_q) (0x0440 + ((hw_q) << 2))
>> #define GEM_TBQPH(hw_q) (0x04C8)
>>
>> queue_writel(queue, TBQP, lower_32_bits(queue->tx_ring_dma));
>> #ifdef CONFIG_ARCH_DMA_ADDR_T_64BIT
>> if (bp->hw_dma_cap & HW_DMA_CAP_64B)
>> queue_writel(queue, TBQPH, upper_32_bits(queue->tx_ring_dma));
>> #endif
>>
>> To maxime our chances of getting valid DMA addresses, we do a single
>
> maximize
>
>> dma_alloc_coherent() across queues.
>
> Is there really any chance involved (other than avoiding ENOMEM)?
If we land in the the page allocator codepath of dma_alloc_coherent(),
then we get natural alignment guarantees, see alloc_pages() comment [0].
[0]: https://elixir.bootlin.com/linux/v6.16/source/mm/mempolicy.c#L2499-L2502
However, we cannot be certain we land in that path. If we have an
IOMMU, then I don't think the API provides strong enough guarantees.
Same for custom `struct dma_map_ops`, be it per-device or arch-specific.
I am not aware (is anything documented on that?) of any alignment
guarantees.
Even if those give us page-aligned allocations, that isn't enough. For
example let's say we want 256KiB. We get 0xFFFF0000 from an allocator.
That is page aligned, but:
upper_32_bits(START) != upper_32_bits(START + SIZE - 1)
upper_32_bits(0xFFFF0000) != upper_32_bits(0xFFFF0000 + 0x40000 - 1)
0x0 != 0x1
Thanks!
--
Théo Lebrun, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
next prev parent reply other threads:[~2025-08-07 14:48 UTC|newest]
Thread overview: 84+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-06-27 9:08 [PATCH net-next v2 00/18] Support the Cadence MACB/GEM instances on Mobileye EyeQ5 SoCs Théo Lebrun
2025-06-27 9:08 ` Théo Lebrun
2025-06-27 9:08 ` [PATCH net-next v2 01/18] dt-bindings: net: cdns,macb: sort compatibles Théo Lebrun
2025-06-27 9:08 ` Théo Lebrun
2025-07-01 8:16 ` Krzysztof Kozlowski
2025-07-01 8:16 ` Krzysztof Kozlowski
2025-06-27 9:08 ` [PATCH net-next v2 02/18] dt-bindings: net: cdns,macb: add Mobileye EyeQ5 ethernet interface Théo Lebrun
2025-06-27 9:08 ` Théo Lebrun
2025-07-01 8:18 ` Krzysztof Kozlowski
2025-07-01 8:18 ` Krzysztof Kozlowski
2025-06-27 9:08 ` [PATCH net-next v2 03/18] dt-bindings: net: cdns,macb: allow tsu_clk without tx_clk Théo Lebrun
2025-06-27 9:08 ` Théo Lebrun
2025-07-01 8:19 ` Krzysztof Kozlowski
2025-07-01 8:19 ` Krzysztof Kozlowski
2025-06-27 9:08 ` [PATCH net-next v2 04/18] dt-bindings: net: cdns,macb: allow dma-coherent Théo Lebrun
2025-06-27 9:08 ` Théo Lebrun
2025-06-27 9:08 ` [PATCH net-next v2 05/18] net: macb: use BIT() macro for capability definitions Théo Lebrun
2025-06-27 9:08 ` Théo Lebrun
2025-07-01 15:35 ` Sean Anderson
2025-07-01 15:35 ` Sean Anderson
2025-06-27 9:08 ` [PATCH net-next v2 06/18] net: macb: Remove local variables clk_init and init in macb_probe() Théo Lebrun
2025-06-27 9:08 ` Théo Lebrun
2025-07-01 15:35 ` Sean Anderson
2025-07-01 15:35 ` Sean Anderson
2025-06-27 9:08 ` [PATCH net-next v2 07/18] net: macb: drop macb_config NULL checking Théo Lebrun
2025-06-27 9:08 ` Théo Lebrun
2025-07-01 15:37 ` Sean Anderson
2025-07-01 15:37 ` Sean Anderson
2025-06-27 9:08 ` [PATCH net-next v2 08/18] net: macb: introduce DMA descriptor helpers (is 64bit? is PTP?) Théo Lebrun
2025-06-27 9:08 ` Théo Lebrun
2025-07-01 15:56 ` Sean Anderson
2025-07-01 15:56 ` Sean Anderson
2025-06-27 9:08 ` [PATCH net-next v2 09/18] net: macb: sort #includes Théo Lebrun
2025-06-27 9:08 ` Théo Lebrun
2025-07-01 15:58 ` Sean Anderson
2025-07-01 15:58 ` Sean Anderson
2025-06-27 9:08 ` [PATCH net-next v2 10/18] net: macb: remove illusion about TBQPH/RBQPH being per-queue Théo Lebrun
2025-06-27 9:08 ` Théo Lebrun
2025-07-01 16:15 ` Sean Anderson
2025-07-01 16:15 ` Sean Anderson
2025-07-01 16:20 ` Sean Anderson
2025-07-01 16:20 ` Sean Anderson
2025-06-27 9:08 ` [PATCH net-next v2 11/18] net: macb: single dma_alloc_coherent() for DMA descriptors Théo Lebrun
2025-06-27 9:08 ` Théo Lebrun
2025-07-01 16:32 ` Sean Anderson
2025-07-01 16:32 ` Sean Anderson
2025-08-07 14:48 ` Théo Lebrun [this message]
2025-08-07 14:48 ` Théo Lebrun
2025-06-27 9:08 ` [PATCH net-next v2 12/18] net: macb: match skb_reserve(skb, NET_IP_ALIGN) with HW alignment Théo Lebrun
2025-06-27 9:08 ` Théo Lebrun
2025-07-01 16:40 ` Sean Anderson
2025-07-01 16:40 ` Sean Anderson
2025-08-07 15:24 ` Théo Lebrun
2025-08-07 15:24 ` Théo Lebrun
2025-08-11 18:53 ` Sean Anderson
2025-08-11 18:53 ` Sean Anderson
2025-06-27 9:08 ` [PATCH net-next v2 13/18] net: macb: avoid double endianness swap in macb_set_hwaddr() Théo Lebrun
2025-06-27 9:08 ` Théo Lebrun
2025-07-01 16:44 ` Sean Anderson
2025-07-01 16:44 ` Sean Anderson
2025-06-27 9:09 ` [PATCH net-next v2 14/18] net: macb: add no LSO capability (MACB_CAPS_NO_LSO) Théo Lebrun
2025-06-27 9:09 ` Théo Lebrun
2025-07-01 16:51 ` Sean Anderson
2025-07-01 16:51 ` Sean Anderson
2025-06-27 9:09 ` [PATCH net-next v2 15/18] net: macb: Add "mobileye,eyeq5-gem" compatible Théo Lebrun
2025-06-27 9:09 ` Théo Lebrun
2025-07-01 16:51 ` Sean Anderson
2025-07-01 16:51 ` Sean Anderson
2025-06-27 9:09 ` [PATCH net-next v2 16/18] MIPS: mobileye: add EyeQ5 DMA IOCU support Théo Lebrun
2025-06-27 9:09 ` Théo Lebrun
2025-06-27 19:15 ` Simon Horman
2025-06-27 19:15 ` Simon Horman
2025-06-30 13:35 ` Jiaxun Yang
2025-06-30 13:35 ` Jiaxun Yang
2025-08-07 16:11 ` Théo Lebrun
2025-08-07 16:11 ` Théo Lebrun
2025-06-27 9:09 ` [PATCH net-next v2 17/18] MIPS: mobileye: eyeq5: add two Cadence GEM Ethernet controllers Théo Lebrun
2025-06-27 9:09 ` Théo Lebrun
2025-06-27 9:09 ` [PATCH net-next v2 18/18] MIPS: mobileye: eyeq5-epm: add two Cadence GEM Ethernet PHYs Théo Lebrun
2025-06-27 9:09 ` Théo Lebrun
2025-06-27 9:41 ` [PATCH net-next v2 00/18] Support the Cadence MACB/GEM instances on Mobileye EyeQ5 SoCs Maxime Chevallier
2025-06-27 9:41 ` Maxime Chevallier
2025-07-01 16:53 ` Sean Anderson
2025-07-01 16:53 ` Sean Anderson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=DBWA12ZND9TY.2SA3R9T5UJTZR@bootlin.com \
--to=theo.lebrun@bootlin.com \
--cc=alex@ghiti.fr \
--cc=andrew+netdev@lunn.ch \
--cc=aou@eecs.berkeley.edu \
--cc=claudiu.beznea@tuxon.dev \
--cc=conor+dt@kernel.org \
--cc=cyrille.pitchen@atmel.com \
--cc=davem@davemloft.net \
--cc=devicetree@vger.kernel.org \
--cc=edumazet@google.com \
--cc=gregory.clement@bootlin.com \
--cc=harini.katakam@xilinx.com \
--cc=hskinnemoen@atmel.com \
--cc=krzk+dt@kernel.org \
--cc=kuba@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mips@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=linux@armlinux.org.uk \
--cc=netdev@vger.kernel.org \
--cc=nicolas.ferre@microchip.com \
--cc=pabeni@redhat.com \
--cc=palmer@dabbelt.com \
--cc=paul.walmsley@sifive.com \
--cc=rafalo@cadence.com \
--cc=richardcochran@gmail.com \
--cc=robh@kernel.org \
--cc=samuel.holland@sifive.com \
--cc=sean.anderson@linux.dev \
--cc=tawfik.bayouk@mobileye.com \
--cc=thomas.petazzoni@bootlin.com \
--cc=tsbogend@alpha.franken.de \
--cc=vladimir.kondratiev@mobileye.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.