svn commit: r290610 - head/sys/x86/x86
Hans Petter Selasky
hps at selasky.org
Mon Nov 9 12:29:14 UTC 2015
On 11/09/15 13:19, Roger Pau Monné wrote:
> + if (dmat->common.flags & BUS_DMA_KEEP_PG_OFFSET) {
> + /*
> + * If we have to keep the offset of each page this function
> + * is not suitable, switch back to bus_dmamap_load_ma_triv
> + * which is going to do the right thing in this case.
> + */
> + error = bus_dmamap_load_ma_triv(dmat, map, ma, buflen, ma_offs,
> + flags, segs, segp);
> + return (error);
> + }
Hi,
There has been an update made to the USB stack, which is currently the
only client of "BUS_DMA_KEEP_PG_OFFSET", which means this check can
probably be skipped or relaxed a bit. The condition which must be
fullfilled is:
#ifdef USB_DEBUG
if (nseg > 1 &&
((segs->ds_addr + segs->ds_len) & (USB_PAGE_SIZE - 1)) !=
((segs + 1)->ds_addr & (USB_PAGE_SIZE - 1))) {
/*
* This check verifies there is no page offset hole
* between the first and second segment. See the
* BUS_DMA_KEEP_PG_OFFSET flag.
*/
DPRINTFN(0, "Page offset was not preserved\n");
error = 1;
goto done;
}
#endif
See: sys/dev/usb/usb_busdma.c
--HPS
More information about the svn-src-all
mailing list