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 {								\

Reply via email to