BXE: alloc aligned memory
The bus allocs are usually called, requesting page alignment. Just use
get_cont_pages().
diff --git a/kern/drivers/net/bxe/bsd_bus.h b/kern/drivers/net/bxe/bsd_bus.h
index d6a48f1..993f09c 100644
--- a/kern/drivers/net/bxe/bsd_bus.h
+++ b/kern/drivers/net/bxe/bsd_bus.h
@@ -119,10 +119,21 @@
#define bus_dma_tag_destroy(...)
#define bus_dmamem_alloc(_tag, _vaddraddr, _flags, _map) \
({ \
- *(_vaddraddr) = kzmalloc((size_t)(_tag), KMALLOC_WAIT); \
- 0; \
+ size_t order = LOG2_UP(nr_pages((size_t)(_tag))); \
+ int ret = -ENOMEM; \
+ void *vaddr = get_cont_pages(order, 0); \
+ if (vaddr) { \
+ memset(vaddr, 0, (size_t)(_tag)); \
+ ret = 0; \
+ *(_vaddraddr) = vaddr; \
+ } \
+ ret; \
})
-#define bus_dmamem_free(_tag, _vaddr, _map) kfree(_vaddr)
+#define bus_dmamem_free(_tag, _vaddr, _map) \
+({ \
+ size_t order = LOG2_UP(nr_pages((size_t)(_tag))); \
+ free_cont_pages((_vaddr), order); \
+})
#define bus_dmamap_sync(...)
/* bxe_dma_map_addr is actually a callback tht does the paddr assignment */
#define bus_dmamap_load(_tag, _map, _vaddr, _size, _map_addr, _dma, _flag) \