Index: x86/x86/busdma_machdep.c =================================================================== --- x86/x86/busdma_machdep.c (revision 232207) +++ x86/x86/busdma_machdep.c (working copy) @@ -674,6 +674,14 @@ vaddr = (vm_offset_t)buf; lastaddr = *lastaddrp; bmask = ~(dmat->boundary - 1); +#if !defined(__i386__) || defined(PAE) + /* + * Always enforce at least a 4GB boundary. Note that this is not + * needed on non-PAE i386. + */ + if (dmat->boundary == 0 || dmat->boundary > ((bus_addr_t)1 << 32)) + bmask = ~(((bus_addr_t)1 << 32) - 1); +#endif for (seg = *segp; buflen > 0 ; ) { bus_size_t max_sgsize;