BXE: slightly better memory management
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 28 Jan 2015 21:28:50 +0000 (16:28 -0500)
committerBarret Rhoden <brho@cs.berkeley.edu>
Tue, 3 Feb 2015 15:12:30 +0000 (10:12 -0500)
Trying to work with the existing interface, so as to not replace it everywhere.

kern/drivers/net/bxe/bsd_bus.h
kern/drivers/net/bxe/bxe.c
kern/drivers/net/bxe/bxe.h

index 329ba0f..4c9f8ce 100644 (file)
@@ -108,9 +108,28 @@ typedef uintptr_t bus_dmamap_t;
 typedef uintptr_t bus_dma_segment_t;
 typedef uintptr_t bus_space_tag_t;
 
-#define bus_dma_tag_create(...) (0)
+/* ret is the location of the tag we create, which is just the size */
+#define bus_get_dma_tag(pcidev) (0)
+#define bus_dma_tag_create(_tag, _align, _bound, _low, _hi, _fil, _filarg,     \
+                           _size, _num, _size2, _flag2, _lock, _lockarg, _ret) \
+({                                                                             \
+       *(size_t*)(_ret) = (size_t)(_size);                                        \
+       0;                                                                         \
+})
 #define bus_dma_tag_destroy(...)
+#define bus_dmamem_alloc(_tag, _vaddraddr, _flags, _map)                       \
+({                                                                             \
+       *(_vaddraddr) = kzmalloc((size_t)(_tag), KMALLOC_WAIT);                    \
+       0;                                                                         \
+})
+#define bus_dmamem_free(_tag, _vaddr, _map) kfree(_vaddr)
 #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)     \
+({                                                                             \
+       (_dma)->paddr = PADDR((_dma)->vaddr);                                      \
+       0;                                                                         \
+})
 #define bus_dmamap_unload(...)
 #define bus_dmamap_create(...) (0)
 #define bus_dmamap_destroy(...)
index 3a72767..3fec514 100644 (file)
@@ -844,11 +844,6 @@ bxe_dma_alloc(struct bxe_adapter *sc,
     dma->size = size;
     snprintf(dma->msg, sizeof(dma->msg), "%s", msg);
 
-       /* Akaros style */
-       dma->vaddr = kzmalloc(size, KMALLOC_WAIT);
-       dma->paddr = PADDR(dma->vaddr);
-
-#if 0 /* the BSD way */
     rc = bus_dma_tag_create(sc->parent_dma_tag, /* parent tag */
                             BCM_PAGE_SIZE,      /* alignment */
                             0,                  /* boundary limit */
@@ -894,7 +889,9 @@ bxe_dma_alloc(struct bxe_adapter *sc,
         memset(dma, 0, sizeof(*dma));
         return (1);
     }
-#endif
+
+       /* might catch buggy BSD-compat macros */
+       assert(dma->paddr == PADDR(dma->vaddr));
     return (0);
 }
 
@@ -903,23 +900,18 @@ bxe_dma_free(struct bxe_adapter *sc,
              struct bxe_dma   *dma)
 {
     if (dma->size > 0) {
-#if 0
         BLOGD(sc, DBG_LOAD,
               "DMA free '%s': vaddr=%p paddr=%p nseg=%d size=%lu\n",
               dma->msg, dma->vaddr, (void *)dma->paddr,
               dma->nseg, dma->size);
-#endif
 
         DBASSERT(sc, (dma->tag != NULL), ("dma tag is NULL"));
 
-               kfree(dma->vaddr);
-               #if 0 /* the BSD way */
         bus_dmamap_sync(dma->tag, dma->map,
                         (BUS_DMASYNC_POSTREAD | BUS_DMASYNC_POSTWRITE));
         bus_dmamap_unload(dma->tag, dma->map);
         bus_dmamem_free(dma->tag, dma->vaddr, dma->map);
         bus_dma_tag_destroy(dma->tag);
-               #endif
     }
     memset(dma, 0, sizeof(*dma));
 }
index ffc67bb..db606db 100644 (file)
@@ -52,6 +52,7 @@
 #define __noinline 
 #define ETH_ADDR_LEN 6
 #define MCLBYTES 2048
+#define MJUM9BYTES (9 * 1024)  /* jumbo cluster 9k */
 /* TYPEDEFS for conversion to AKAROS. These are temporary, but it makes it easier to see what is in need of change. */
 typedef struct netif *if_t;
 typedef uint64_t ift_counter;