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; > > > > >