On Thursday, July 12, 2012 8:26:05 am John Baldwin wrote:
> However, rather add a wiredmalloc(), I think you should just have 
> bus_dmamem_alloc() call kmem_alloc_attr() directly in this case.  One of the 
> things I've been meaning to add to bus_dma is a way to allocate other memory 
> types (e.g. WC memory), and in that case it would be best to just call 
> kmem_alloc_attr() directly instead.

After my recent changes, I think this would do the above.  What do you think of
this, and if it looks ok, can you test it?

Index: busdma_machdep.c
===================================================================
--- busdma_machdep.c    (revision 239020)
+++ busdma_machdep.c    (working copy)
@@ -533,13 +533,14 @@ bus_dmamem_alloc(bus_dma_tag_t dmat, void** vaddr,
            dmat->lowaddr >= ptoa((vm_paddr_t)Maxmem) &&
            attr == VM_MEMATTR_DEFAULT) {
                *vaddr = malloc(dmat->maxsize, M_DEVBUF, mflags);
+       } else if (dmat->nsegments >= btoc(dmat->maxsize) &&
+           dmat->alignment <= PAGE_SIZE &&
+           (dmat->boundary == 0 || dmat->boundary >= dmat->lowaddr)) {
+               /* Page-based multi-segment allocations allowed */
+               *vaddr = (void *)kmem_alloc_attr(kernel_map, dmat->maxsize,
+                   mflags, 0ul, dmat->lowaddr, attr);
+               *mapp = &contig_dmamap;
        } else {
-               /*
-                * XXX Use Contigmalloc until it is merged into this facility
-                *     and handles multi-seg allocations.  Nobody is doing
-                *     multi-seg allocations yet though.
-                * XXX Certain AGP hardware does.
-                */
                *vaddr = (void *)kmem_alloc_contig(kernel_map, dmat->maxsize,
                    mflags, 0ul, dmat->lowaddr, dmat->alignment ?
                    dmat->alignment : 1ul, dmat->boundary, attr);

-- 
John Baldwin
_______________________________________________
freebsd-hackers@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-hackers
To unsubscribe, send any mail to "freebsd-hackers-unsubscr...@freebsd.org"

Reply via email to