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 <[email protected]>
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 { \