Re: iwx 64-bit dma

Vitaliy Makkoveev <[email protected]> Thu, 30 Jul 2026 00:25:04 +0000
Newsgroups gmane.os.openbsd.tech
Message-ID <[email protected]>
On Wed, Jul 29, 2026 at 04:22:51PM -0600, Theo de Raadt wrote:
> Are _all models_ of this chipset safe?
> 

I don't know about PCI versions of this device. Moreover, it uses 64
bits DMA since  revision 1.198 of sys/dev/pci/if_iwx.c.

revision 1.198
date: 2026/02/17 20:02:43;  author: kettenis;  state: Exp;  lines: +8 -7;  commi
tid: zh15zLsr17Uwlskc;
Sprinkle some BUS_DMA_64BIT; this hardware has no issues handling full
64-bit addresses.

ok stsp@

But later, bluhm@ introduced IFXF_MBUF_64BIT flag for interface
descriptor. The 64 bits DMA will not be used if at least one interface
was configured without this flag. It seems iwx(4) was forgotten like
re(4).

revision 1.306
date: 2026/06/23 14:40:40;  author: bluhm;  state: Exp;  lines: +30 -1; commiti
d: stkeyyILuxfbNN6W;
Allocate mbufs in high memory if only 64 bit DMA interfaces exist.

Mbufs on amd64 were allocated below 4 GB so that devices not capable
of 64 bit DMA can access the memory.  Interface drivers use
BUS_DMA_64BIT to allow the DMA layer doing 64 bit transfers.  Now
flag interfaces with IFXF_MBUF_64BIT that are capable of 64 bit DMA
on all their mbuf rings.

If only such interfaces exist in the system during amd64 boot,
allocate mbufs and mbuf clusters also in high memory.  Other
architectures may be limited to 32 bit memory anyway or use an
IOMMU.  On riscv64 or arm64 busses may exists that support less
than 64 bit, this will be handled later.

Hotplug devices that do not support 64 bit DMA will use bounce
buffering.  By changing the flags in device drivers we can force
bounce buffering and find missing calls to bus_dmamap_sync().

OK kettenis@ deraadt@

> > On Tue, Jul 28, 2026 at 10:31:10PM -0400, Brad Smith wrote:
> > > iwx(4) works with 64-bit DMA.
> > > 
> > > Tested with
> > > 
> > > iwx0 at pci0 dev 20 function 3 "Intel Wi-Fi 6 AX201" rev 0x00
> > > 
> > > 
> > 
> > Yes, this flag is missing. ok mvs@
> > 
> > > Index: if_iwx.c
> > > ===================================================================
> > > RCS file: /cvs/src/sys/dev/pci/if_iwx.c,v
> > > retrieving revision 1.229
> > > diff -u -p -u -p -r1.229 if_iwx.c
> > > --- if_iwx.c	28 May 2026 10:51:52 -0000	1.229
> > > +++ if_iwx.c	24 Jul 2026 03:10:09 -0000
> > > @@ -12671,6 +12671,7 @@ iwx_attach(struct device *parent, struct
> > >  
> > >  	ifp->if_softc = sc;
> > >  	ifp->if_flags = IFF_BROADCAST | IFF_SIMPLEX | IFF_MULTICAST;
> > > +	ifp->if_xflags = IFXF_MBUF_64BIT;
> > >  	ifp->if_ioctl = iwx_ioctl;
> > >  	ifp->if_start = iwx_start;
> > >  	ifp->if_watchdog = iwx_watchdog;
> > > 
> >