malloc(9) and its alignment
Gumpula, Suresh
Suresh.Gumpula at netapp.com
Wed Feb 12 02:02:08 UTC 2014
Hi,
It appears the malloc(9) returns 8 byte aligned ( UMA_ALIGN_PTR) pointers, but in bus_dmamem_alloc we might end up checking for greater alignment
if we take malloc(9) path instead contig_malloc.
Can someone please confirm if malloc(9) returns different alignment pointers ?
bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr, int flags,
bus_dmamap_t *mapp)
{
/*
* XXX:
* (dmat->alignment < dmat->maxsize) is just a quick hack; the exact
* alignment guarantees of malloc need to be nailed down, and the
* code below should be rewritten to take that into account.
*
* In the meantime, we'll warn the user if malloc gets it wrong.
*/
if ((dmat->maxsize <= PAGE_SIZE) &&
(dmat->alignment < dmat->maxsize) &&
dmat->lowaddr >= ptoa((vm_paddr_t)Maxmem)) {
*vaddr = malloc(dmat->maxsize, M_DEVBUF, mflags);
} else {
*vaddr = contigmalloc(dmat->maxsize, M_DEVBUF, mflags,
0ul, dmat->lowaddr, dmat->alignment? dmat->alignment : 1ul,
dmat->boundary);
}
if (vtophys(*vaddr) & (dmat->alignment - 1)) {
NETAPP_MUTED_PRINTF("bus_dmamem_alloc failed to align memory properly.\n");
Regards,
Suresh
More information about the freebsd-hackers
mailing list