From 11868a938378796c3556cbbe4a5a16c720550a75 Mon Sep 17 00:00:00 2001 From: Sepherosa Ziehau Date: Sun, 22 Sep 2013 10:44:55 +0800 Subject: [PATCH] mxge: DragonFly's kmalloc(9) always returns 8 bytes aligned memory --- sys/dev/netif/mxge/if_mxge.c | 18 +++++++++--------- sys/dev/netif/mxge/if_mxge_var.h | 4 ---- 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/sys/dev/netif/mxge/if_mxge.c b/sys/dev/netif/mxge/if_mxge.c index 40efb11803..1220fd2418 100644 --- a/sys/dev/netif/mxge/if_mxge.c +++ b/sys/dev/netif/mxge/if_mxge.c @@ -2740,9 +2740,9 @@ mxge_free_slice_rings(struct mxge_slice_state *ss) ss->rx_done.entry = NULL; } - if (ss->tx.req_bytes != NULL) { - kfree(ss->tx.req_bytes, M_DEVBUF); - ss->tx.req_bytes = NULL; + if (ss->tx.req_list != NULL) { + kfree(ss->tx.req_list, M_DEVBUF); + ss->tx.req_list = NULL; } if (ss->tx.seg_list != NULL) { @@ -2947,12 +2947,12 @@ mxge_alloc_slice_rings(struct mxge_slice_state *ss, int rx_ring_entries, ss->tx.mask = tx_ring_entries - 1; ss->tx.max_desc = MIN(MXGE_MAX_SEND_DESC, tx_ring_entries / 4); - /* Allocate the tx request copy block XXX */ - bytes = 8 + sizeof(*ss->tx.req_list) * (ss->tx.max_desc + 4); - ss->tx.req_bytes = kmalloc(bytes, M_DEVBUF, M_WAITOK); - /* Ensure req_list entries are aligned to 8 bytes */ - ss->tx.req_list = (mcp_kreq_ether_send_t *) - ((unsigned long)(ss->tx.req_bytes + 7) & ~7UL); + /* Allocate the tx request copy block; MUST be 8 bytes aligned */ + bytes = sizeof(*ss->tx.req_list) * (ss->tx.max_desc + 4); + ss->tx.req_list = kmalloc(bytes, M_DEVBUF, M_WAITOK); + /* DragonFly's kmalloc(9) promises at least 8 bytes alignment */ + KASSERT(((uintptr_t)ss->tx.req_list & 0x7) == 0, + ("req_list not 8 bytes aligned")); /* Allocate the tx busdma segment list */ bytes = sizeof(*ss->tx.seg_list) * ss->tx.max_desc; diff --git a/sys/dev/netif/mxge/if_mxge_var.h b/sys/dev/netif/mxge/if_mxge_var.h index ac3dd9efa4..baee748baa 100644 --- a/sys/dev/netif/mxge/if_mxge_var.h +++ b/sys/dev/netif/mxge/if_mxge_var.h @@ -80,14 +80,10 @@ typedef struct { } mxge_rx_ring_t; typedef struct { -#ifdef IFNET_BUF_RING - struct buf_ring *br; -#endif volatile mcp_kreq_ether_send_t *lanai; /* lanai ptr for sendq */ volatile uint32_t *send_go; /* doorbell for sendq */ volatile uint32_t *send_stop; /* doorbell for sendq */ mcp_kreq_ether_send_t *req_list; /* host shadow of sendq */ - char *req_bytes; bus_dma_segment_t *seg_list; struct mxge_tx_buffer_state *info; bus_dma_tag_t dmat; -- 2.41.0