Module Name: src Committed By: jdolecek Date: Sun Nov 5 18:15:02 UTC 2023
Modified Files: src/sys/dev/pci: if_ena.c src/sys/external/bsd/ena-com: ena_com.c ena_com.h ena_plat.h Log Message: ena(4): replace malloc(9) to kmem(9) Code contributed by KUSABA Takeshi <t-kus...@iij.ad.jp> To generate a diff of this commit: cvs rdiff -u -r1.34 -r1.35 src/sys/dev/pci/if_ena.c cvs rdiff -u -r1.1.1.1 -r1.2 src/sys/external/bsd/ena-com/ena_com.c \ src/sys/external/bsd/ena-com/ena_com.h cvs rdiff -u -r1.9 -r1.10 src/sys/external/bsd/ena-com/ena_plat.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/dev/pci/if_ena.c diff -u src/sys/dev/pci/if_ena.c:1.34 src/sys/dev/pci/if_ena.c:1.35 --- src/sys/dev/pci/if_ena.c:1.34 Thu Sep 21 09:31:50 2023 +++ src/sys/dev/pci/if_ena.c Sun Nov 5 18:15:02 2023 @@ -36,15 +36,15 @@ #if 0 __FBSDID("$FreeBSD: head/sys/dev/ena/ena.c 333456 2018-05-10 09:37:54Z mw $"); #endif -__KERNEL_RCSID(0, "$NetBSD: if_ena.c,v 1.34 2023/09/21 09:31:50 msaitoh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_ena.c,v 1.35 2023/11/05 18:15:02 jdolecek Exp $"); #include <sys/param.h> #include <sys/systm.h> #include <sys/bus.h> #include <sys/endian.h> #include <sys/kernel.h> +#include <sys/kmem.h> #include <sys/kthread.h> -#include <sys/malloc.h> #include <sys/mbuf.h> #include <sys/module.h> #include <sys/socket.h> @@ -698,10 +698,10 @@ ena_setup_tx_resources(struct ena_adapte #endif size = sizeof(struct ena_tx_buffer) * tx_ring->ring_size; - tx_ring->tx_buffer_info = malloc(size, M_DEVBUF, M_WAITOK | M_ZERO); + tx_ring->tx_buffer_info = kmem_zalloc(size, KM_SLEEP); size = sizeof(uint16_t) * tx_ring->ring_size; - tx_ring->free_tx_ids = malloc(size, M_DEVBUF, M_WAITOK | M_ZERO); + tx_ring->free_tx_ids = kmem_zalloc(size, KM_SLEEP); /* Req id stack for TX OOO completions */ for (i = 0; i < tx_ring->ring_size; i++) @@ -760,9 +760,11 @@ err_buf_info_unmap: bus_dmamap_destroy(adapter->sc_dmat, tx_ring->tx_buffer_info[i].map); } - free(tx_ring->free_tx_ids, M_DEVBUF); + size = sizeof(uint16_t) * tx_ring->ring_size; + kmem_free(tx_ring->free_tx_ids, size); tx_ring->free_tx_ids = NULL; - free(tx_ring->tx_buffer_info, M_DEVBUF); + size = sizeof(struct ena_tx_buffer) * tx_ring->ring_size; + kmem_free(tx_ring->tx_buffer_info, size); tx_ring->tx_buffer_info = NULL; return (ENOMEM); @@ -802,10 +804,11 @@ ena_free_tx_resources(struct ena_adapter } /* And free allocated memory. */ - free(tx_ring->tx_buffer_info, M_DEVBUF); + kmem_free(tx_ring->tx_buffer_info, + sizeof(struct ena_tx_buffer) * tx_ring->ring_size); tx_ring->tx_buffer_info = NULL; - free(tx_ring->free_tx_ids, M_DEVBUF); + kmem_free(tx_ring->free_tx_ids, sizeof(uint16_t) * tx_ring->ring_size); tx_ring->free_tx_ids = NULL; } @@ -895,10 +898,10 @@ ena_setup_rx_resources(struct ena_adapte */ size += sizeof(struct ena_rx_buffer); - rx_ring->rx_buffer_info = malloc(size, M_DEVBUF, M_WAITOK | M_ZERO); + rx_ring->rx_buffer_info = kmem_zalloc(size, KM_SLEEP); size = sizeof(uint16_t) * rx_ring->ring_size; - rx_ring->free_rx_ids = malloc(size, M_DEVBUF, M_WAITOK); + rx_ring->free_rx_ids = kmem_zalloc(size, KM_SLEEP); for (i = 0; i < rx_ring->ring_size; i++) rx_ring->free_rx_ids[i] = i; @@ -969,9 +972,11 @@ err_buf_info_unmap: rx_ring->rx_buffer_info[i].map); } - free(rx_ring->free_rx_ids, M_DEVBUF); + size = sizeof(uint16_t) * rx_ring->ring_size; + kmem_free(rx_ring->free_rx_ids, size); rx_ring->free_rx_ids = NULL; - free(rx_ring->rx_buffer_info, M_DEVBUF); + size = sizeof(struct ena_rx_buffer) * (rx_ring->ring_size + 1); + kmem_free(rx_ring->rx_buffer_info, size); rx_ring->rx_buffer_info = NULL; return (ENOMEM); } @@ -1008,10 +1013,11 @@ ena_free_rx_resources(struct ena_adapter #endif /* free allocated memory */ - free(rx_ring->rx_buffer_info, M_DEVBUF); + kmem_free(rx_ring->rx_buffer_info, + sizeof(struct ena_rx_buffer) * (rx_ring->ring_size + 1)); rx_ring->rx_buffer_info = NULL; - free(rx_ring->free_rx_ids, M_DEVBUF); + kmem_free(rx_ring->free_rx_ids, sizeof(uint16_t) * rx_ring->ring_size); rx_ring->free_rx_ids = NULL; } @@ -3811,13 +3817,11 @@ ena_attach(device_t parent, device_t sel } /* Allocate memory for ena_dev structure */ - ena_dev = malloc(sizeof(struct ena_com_dev), M_DEVBUF, - M_WAITOK | M_ZERO); + ena_dev = kmem_zalloc(sizeof(struct ena_com_dev), KM_SLEEP); adapter->ena_dev = ena_dev; ena_dev->dmadev = self; - ena_dev->bus = malloc(sizeof(struct ena_bus), M_DEVBUF, - M_WAITOK | M_ZERO); + ena_dev->bus = kmem_zalloc(sizeof(struct ena_bus), KM_SLEEP); /* Store register resources */ ((struct ena_bus*)(ena_dev->bus))->reg_bar_t = adapter->sc_btag; @@ -3941,8 +3945,8 @@ err_com_free: ena_com_delete_host_info(ena_dev); ena_com_mmio_reg_read_request_destroy(ena_dev); err_bus_free: - free(ena_dev->bus, M_DEVBUF); - free(ena_dev, M_DEVBUF); + kmem_free(ena_dev->bus, sizeof(struct ena_bus)); + kmem_free(ena_dev, sizeof(struct ena_com_dev)); ena_free_pci_resources(adapter); } @@ -4030,10 +4034,10 @@ ena_detach(device_t pdev, int flags) mutex_destroy(&adapter->global_mtx); if (ena_dev->bus != NULL) - free(ena_dev->bus, M_DEVBUF); + kmem_free(ena_dev->bus, sizeof(struct ena_bus)); if (ena_dev != NULL) - free(ena_dev, M_DEVBUF); + kmem_free(ena_dev, sizeof(struct ena_com_dev)); return 0; } Index: src/sys/external/bsd/ena-com/ena_com.c diff -u src/sys/external/bsd/ena-com/ena_com.c:1.1.1.1 src/sys/external/bsd/ena-com/ena_com.c:1.2 --- src/sys/external/bsd/ena-com/ena_com.c:1.1.1.1 Sat May 19 08:56:06 2018 +++ src/sys/external/bsd/ena-com/ena_com.c Sun Nov 5 18:15:02 2023 @@ -857,7 +857,7 @@ static void ena_com_io_queue_free(struct if (io_sq->bounce_buf_ctrl.base_buffer) { size = io_sq->llq_info.desc_list_entry_size * ENA_COM_BOUNCE_BUFFER_CNTRL_CNT; - ENA_MEM_FREE(ena_dev->dmadev, io_sq->bounce_buf_ctrl.base_buffer); + ENA_MEM_FREE(ena_dev->dmadev, io_sq->bounce_buf_ctrl.base_buffer, size); io_sq->bounce_buf_ctrl.base_buffer = NULL; } } @@ -1054,9 +1054,9 @@ static int ena_com_indirect_table_alloca if (unlikely(!rss->rss_ind_tbl)) goto mem_err1; - tbl_size = (1ULL << log_size) * sizeof(u16); + rss->host_rss_ind_tbl_size = (1ULL << log_size) * sizeof(u16); rss->host_rss_ind_tbl = - ENA_MEM_ALLOC(ena_dev->dmadev, tbl_size); + ENA_MEM_ALLOC(ena_dev->dmadev, rss->host_rss_ind_tbl_size); if (unlikely(!rss->host_rss_ind_tbl)) goto mem_err2; @@ -1094,7 +1094,8 @@ static void ena_com_indirect_table_destr rss->rss_ind_tbl = NULL; if (rss->host_rss_ind_tbl) - ENA_MEM_FREE(ena_dev->dmadev, rss->host_rss_ind_tbl); + ENA_MEM_FREE(ena_dev->dmadev, rss->host_rss_ind_tbl, + rss->host_rss_ind_tbl_size); rss->host_rss_ind_tbl = NULL; } @@ -1582,8 +1583,10 @@ void ena_com_admin_destroy(struct ena_co ENA_SPINLOCK_DESTROY(admin_queue->q_lock); - if (admin_queue->comp_ctx) - ENA_MEM_FREE(ena_dev->dmadev, admin_queue->comp_ctx); + if (admin_queue->comp_ctx) { + size_t s = admin_queue->q_depth * sizeof(struct ena_comp_ctx); + ENA_MEM_FREE(ena_dev->dmadev, admin_queue->comp_ctx, s); + } admin_queue->comp_ctx = NULL; size = ADMIN_SQ_SIZE(admin_queue->q_depth); if (sq->entries) @@ -2810,8 +2813,11 @@ int ena_com_update_nonadaptive_moderatio void ena_com_destroy_interrupt_moderation(struct ena_com_dev *ena_dev) { + size_t size; + + size = sizeof(struct ena_intr_moder_entry) * ENA_INTR_MAX_NUM_OF_LEVELS; if (ena_dev->intr_moder_tbl) - ENA_MEM_FREE(ena_dev->dmadev, ena_dev->intr_moder_tbl); + ENA_MEM_FREE(ena_dev->dmadev, ena_dev->intr_moder_tbl, size); ena_dev->intr_moder_tbl = NULL; } Index: src/sys/external/bsd/ena-com/ena_com.h diff -u src/sys/external/bsd/ena-com/ena_com.h:1.1.1.1 src/sys/external/bsd/ena-com/ena_com.h:1.2 --- src/sys/external/bsd/ena-com/ena_com.h:1.1.1.1 Sat May 19 08:56:06 2018 +++ src/sys/external/bsd/ena-com/ena_com.h Sun Nov 5 18:15:02 2023 @@ -306,6 +306,7 @@ struct ena_com_mmio_read { struct ena_rss { /* Indirect table */ u16 *host_rss_ind_tbl; + size_t host_rss_ind_tbl_size; struct ena_admin_rss_ind_table_entry *rss_ind_tbl; dma_addr_t rss_ind_tbl_dma_addr; ena_mem_handle_t rss_ind_tbl_mem_handle; Index: src/sys/external/bsd/ena-com/ena_plat.h diff -u src/sys/external/bsd/ena-com/ena_plat.h:1.9 src/sys/external/bsd/ena-com/ena_plat.h:1.10 --- src/sys/external/bsd/ena-com/ena_plat.h:1.9 Sat Apr 9 23:44:54 2022 +++ src/sys/external/bsd/ena-com/ena_plat.h Sun Nov 5 18:15:02 2023 @@ -38,7 +38,7 @@ #if 0 __FBSDID("$FreeBSD: head/sys/contrib/ena-com/ena_plat.h 333453 2018-05-10 09:25:51Z mw $"); #endif -__KERNEL_RCSID(0, "$NetBSD: ena_plat.h,v 1.9 2022/04/09 23:44:54 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: ena_plat.h,v 1.10 2023/11/05 18:15:02 jdolecek Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -47,8 +47,8 @@ __KERNEL_RCSID(0, "$NetBSD: ena_plat.h,v #include <sys/condvar.h> #include <sys/endian.h> #include <sys/kernel.h> +#include <sys/kmem.h> #include <sys/kthread.h> -#include <sys/malloc.h> #include <sys/mbuf.h> #include <sys/module.h> #include <sys/proc.h> @@ -292,9 +292,9 @@ int ena_dma_alloc(device_t dmadev, bus_s *to = *from; \ } while (0) -#define ENA_MEM_ALLOC(dmadev, size) malloc(size, M_DEVBUF, M_NOWAIT | M_ZERO) +#define ENA_MEM_ALLOC(dmadev, size) kmem_zalloc(size, KM_NOSLEEP) #define ENA_MEM_ALLOC_NODE(dmadev, size, virt, node, dev_node) (virt = NULL) -#define ENA_MEM_FREE(dmadev, ptr) free(ptr, M_DEVBUF) +#define ENA_MEM_FREE(dmadev, ptr, size) kmem_free(ptr, size) #define ENA_MEM_ALLOC_COHERENT_NODE(dmadev, size, virt, phys, handle, node, \ dev_node) \ do { \