On 8/7/26 10:56 PM, Aditya Garg wrote:
> The MANA driver can fail to bring up its queues on systems with high
> memory utilization because every GDMA queue ring is allocated as a
> single dma_alloc_coherent() of the whole power-of-2 ring size. Under
> memory fragmentation these high-order allocations may fail, preventing
> the driver from creating queues when opening the interface, after a VF
> reset, or when reconfiguring channels, ring parameters or MTU.
> 
> Per-queue sizes that are problematic, with depth and size given as
> (default, max) over the ethtool ring settings:
> 
>   ring                  entry  depth          size
>   ------------------------------------------------------------
>   TX completion queue   64 B   (256, 16384)   (16 KB, 1024 KB)
>   TX send queue         32 B   (256, 16384)   ( 8 KB,  512 KB)
>   RX completion queue   64 B   (1024, 8192)   (64 KB,  512 KB)
>   RX receive queue      32 B   (1024, 8192)   (32 KB,  256 KB)
>   event queue           16 B   2048 (fixed)   32 KB
> 
> This series addresses the issue by:
>   1. Routing all CPU-side ring access through mana_gd_ring_ptr() and
>      mana_gd_ring_contig_avail(). On a contiguous ring these reduce to
>      simple arithmetic, so this patch is a pure refactor.
>   2. Falling back in mana_gd_alloc_memory() to a vector of scattered
>      order-0 coherent pages when the contiguous allocation fails. The
>      device sees the same page-list format either way, as
>      mana_gd_create_dma_region() already describes a ring as a list of
>      MANA_PAGE_SIZE addresses. The HW channel stays contiguous, as
>      advertising a scattered page list needs the HW channel itself.
> 
> Throughput testing confirms no regression. Since the fallback only
> triggers under memory fragmentation, the scattered-page path was enabled
> unconditionally for all eligible GDMA queue rings during testing (iperf3,
> Gbit/s):
> 
>                  Baseline    Patched     Patched
>   Connections   Contiguous  Contiguous  Scattered
>   -----------------------------------------------
>   1                  46.1        46.2       46.1
>   16                 182         182        182
>   32                 182         182        182
>   64                 182         182        182
Given the above, I suggest to follow-up and remove entirely the single
dma_alloc_coherent() allocation; you will get simpler code and less
pressure for later dma users.

/P


Reply via email to