BUS-DMA alignment check - false positives

Hans Petter Selasky hselasky at c2i.net
Sun Jan 27 10:01:26 PST 2008


When allocating DMA'able memory sometimes the virtual address can end up 
non-aligned, while the physical address is correctly aligned. The question is 
whether it is correct to mask the virtual address and not the physical 


        } else if ((uintptr_t)*vaddr & (dmat->alignment - 1)) {
                printf("bus_dmamem_alloc failed to align memory properly.\n");

When allocating 1<<15 bytes aligned at 1<<15 bytes.

bus_dmamem_alloc failed to align memory properly.
Physaddr=0x3e030000 rem=0x00000000


More information about the freebsd-current mailing list