Index | Thread | Search

From:
Jan Klemkow <jan@openbsd.org>
Subject:
Re: ix(4): fix tx dma segment size
To:
David Gwynne <david@gwynne.id.au>
Cc:
tech@openbsd.org
Date:
Tue, 21 Apr 2026 14:10:26 +0200

Download raw body.

Thread
On Tue, Apr 21, 2026 at 03:06:47PM +1000, David Gwynne wrote:
> i thought it was weird that an MI driver like ix(4) is using an MD
> number like PAGE_SIZE for the maximum segment size in its tx dma
> maps.  the manual says tx segments can be 16k (and goes into a 16bit
> field), so let's try using the documented value here.
> 
> the rx descs also use 16 * 1024 as a magic number here, so it's in
> keeping with other code in the same driver.
> 
> ive only tested this on an Intel 82599 rev 0x01 on arm64, so tests
> from other chips and sparc64 (which has an 8k page size) would be
> appreciated.

works in my setups

ok jan@

> Index: if_ix.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/pci/if_ix.c,v
> diff -u -p -r1.223 if_ix.c
> --- if_ix.c	26 Feb 2026 23:38:10 -0000	1.223
> +++ if_ix.c	21 Apr 2026 03:53:50 -0000
> @@ -2292,7 +2291,7 @@ ixgbe_allocate_transmit_buffers(struct i
>  	for (i = 0; i < sc->num_tx_desc; i++) {
>  		txbuf = &txr->tx_buffers[i];
>  		error = bus_dmamap_create(txr->txdma.dma_tag, MAXMCLBYTES,
> -			    sc->num_segs, PAGE_SIZE, 0,
> +			    sc->num_segs, 16 * 1024, 0,
>  			    BUS_DMA_NOWAIT | BUS_DMA_64BIT, &txbuf->map);
>  
>  		if (error != 0) {
>