kernel: Modify the signature of k_mem_slab_free()
Modify the signature of the k_mem_slab_free() function with a new one, replacing the old void **mem with void *mem as a parameter. The following function: void k_mem_slab_free(struct k_mem_slab *slab, void **mem); has the wrong signature. mem is only used as a regular pointer, so there is no need to use a double-pointer. The correct signature should be: void k_mem_slab_free(struct k_mem_slab *slab, void *mem); The issue with the current signature, although functional, is that it is extremely confusing. I myself, a veteran Zephyr developer, was confused by this parameter when looking at it recently. All in-tree uses of the function have been adapted. Fixes #61888. Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
This commit is contained in:
parent
0df085bb36
commit
8c748fd005
68 changed files with 146 additions and 138 deletions
|
@ -39,7 +39,7 @@ struct dmic_nrfx_pdm_drv_cfg {
|
|||
|
||||
static void free_buffer(struct dmic_nrfx_pdm_drv_data *drv_data, void *buffer)
|
||||
{
|
||||
k_mem_slab_free(drv_data->mem_slab, &buffer);
|
||||
k_mem_slab_free(drv_data->mem_slab, buffer);
|
||||
LOG_DBG("Freed buffer %p", buffer);
|
||||
}
|
||||
|
||||
|
|
|
@ -44,7 +44,7 @@ int mpxxdtyy_i2s_read(const struct device *dev, uint8_t stream, void **buffer,
|
|||
|
||||
sw_filter_lib_run(pdm_filter, pdm_block, pcm_block, pdm_size,
|
||||
data->pcm_mem_size);
|
||||
k_mem_slab_free(&rx_pdm_i2s_mslab, &pdm_block);
|
||||
k_mem_slab_free(&rx_pdm_i2s_mslab, pdm_block);
|
||||
|
||||
*buffer = pcm_block;
|
||||
*size = data->pcm_mem_size;
|
||||
|
|
|
@ -61,7 +61,7 @@ void uart_mcumgr_free_rx_buf(struct uart_mcumgr_rx_buf *rx_buf)
|
|||
void *block;
|
||||
|
||||
block = rx_buf;
|
||||
k_mem_slab_free(&uart_mcumgr_slab, &block);
|
||||
k_mem_slab_free(&uart_mcumgr_slab, block);
|
||||
}
|
||||
|
||||
#if !defined(CONFIG_MCUMGR_TRANSPORT_UART_ASYNC)
|
||||
|
|
|
@ -21,7 +21,7 @@ int z_impl_i2s_buf_read(const struct device *dev, void *buf, size_t *size)
|
|||
rx_cfg = i2s_config_get((const struct device *)dev, I2S_DIR_RX);
|
||||
|
||||
memcpy(buf, mem_block, *size);
|
||||
k_mem_slab_free(rx_cfg->mem_slab, &mem_block);
|
||||
k_mem_slab_free(rx_cfg->mem_slab, mem_block);
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
@ -51,7 +51,7 @@ int z_impl_i2s_buf_write(const struct device *dev, void *buf, size_t size)
|
|||
|
||||
ret = i2s_write((const struct device *)dev, mem_block, size);
|
||||
if (ret != 0) {
|
||||
k_mem_slab_free(tx_cfg->mem_slab, &mem_block);
|
||||
k_mem_slab_free(tx_cfg->mem_slab, mem_block);
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
|
|
@ -66,7 +66,7 @@ static inline int z_vrfy_i2s_buf_read(const struct device *dev,
|
|||
copy_success = z_user_to_copy((void *)buf, mem_block,
|
||||
data_size);
|
||||
|
||||
k_mem_slab_free(rx_cfg->mem_slab, &mem_block);
|
||||
k_mem_slab_free(rx_cfg->mem_slab, mem_block);
|
||||
Z_OOPS(copy_success);
|
||||
Z_OOPS(z_user_to_copy((void *)size, &data_size,
|
||||
sizeof(data_size)));
|
||||
|
@ -100,13 +100,13 @@ static inline int z_vrfy_i2s_buf_write(const struct device *dev,
|
|||
|
||||
ret = z_user_from_copy(mem_block, (void *)buf, size);
|
||||
if (ret) {
|
||||
k_mem_slab_free(tx_cfg->mem_slab, &mem_block);
|
||||
k_mem_slab_free(tx_cfg->mem_slab, mem_block);
|
||||
Z_OOPS(ret);
|
||||
}
|
||||
|
||||
ret = i2s_write((const struct device *)dev, mem_block, size);
|
||||
if (ret != 0) {
|
||||
k_mem_slab_free(tx_cfg->mem_slab, &mem_block);
|
||||
k_mem_slab_free(tx_cfg->mem_slab, mem_block);
|
||||
}
|
||||
|
||||
return ret;
|
||||
|
|
|
@ -588,7 +588,7 @@ static void i2s_litex_isr_tx(void *arg)
|
|||
stream->cfg.word_size, stream->cfg.channels);
|
||||
i2s_clear_pending_irq(cfg->base);
|
||||
|
||||
k_mem_slab_free(stream->cfg.mem_slab, &stream->mem_block);
|
||||
k_mem_slab_free(stream->cfg.mem_slab, stream->mem_block);
|
||||
}
|
||||
|
||||
static const struct i2s_driver_api i2s_litex_driver_api = {
|
||||
|
|
|
@ -600,7 +600,7 @@ static void dma_tx_callback(const struct device *dma_dev, void *arg,
|
|||
__ASSERT_NO_MSG(stream->mem_block != NULL);
|
||||
|
||||
/* All block data sent */
|
||||
k_mem_slab_free(stream->cfg.mem_slab, &stream->mem_block);
|
||||
k_mem_slab_free(stream->cfg.mem_slab, stream->mem_block);
|
||||
stream->mem_block = NULL;
|
||||
|
||||
/* Stop transmission if there was an error */
|
||||
|
@ -806,7 +806,7 @@ static void rx_stream_disable(struct stream *stream, const struct device *dev)
|
|||
|
||||
dma_stop(stream->dev_dma, stream->dma_channel);
|
||||
if (stream->mem_block != NULL) {
|
||||
k_mem_slab_free(stream->cfg.mem_slab, &stream->mem_block);
|
||||
k_mem_slab_free(stream->cfg.mem_slab, stream->mem_block);
|
||||
stream->mem_block = NULL;
|
||||
}
|
||||
|
||||
|
@ -824,7 +824,7 @@ static void tx_stream_disable(struct stream *stream, const struct device *dev)
|
|||
|
||||
dma_stop(stream->dev_dma, stream->dma_channel);
|
||||
if (stream->mem_block != NULL) {
|
||||
k_mem_slab_free(stream->cfg.mem_slab, &stream->mem_block);
|
||||
k_mem_slab_free(stream->cfg.mem_slab, stream->mem_block);
|
||||
stream->mem_block = NULL;
|
||||
}
|
||||
|
||||
|
@ -839,7 +839,7 @@ static void rx_queue_drop(struct stream *stream)
|
|||
void *mem_block;
|
||||
|
||||
while (queue_get(&stream->mem_block_queue, &mem_block, &size) == 0) {
|
||||
k_mem_slab_free(stream->cfg.mem_slab, &mem_block);
|
||||
k_mem_slab_free(stream->cfg.mem_slab, mem_block);
|
||||
}
|
||||
|
||||
k_sem_reset(&stream->sem);
|
||||
|
@ -852,7 +852,7 @@ static void tx_queue_drop(struct stream *stream)
|
|||
unsigned int n = 0U;
|
||||
|
||||
while (queue_get(&stream->mem_block_queue, &mem_block, &size) == 0) {
|
||||
k_mem_slab_free(stream->cfg.mem_slab, &mem_block);
|
||||
k_mem_slab_free(stream->cfg.mem_slab, mem_block);
|
||||
n++;
|
||||
}
|
||||
|
||||
|
|
|
@ -300,15 +300,15 @@ static inline void i2s_purge_stream_buffers(struct stream *stream,
|
|||
struct i2s_txq_entry queue_entry;
|
||||
|
||||
while (k_msgq_get(&stream->in_queue, &queue_entry, K_NO_WAIT) == 0) {
|
||||
k_mem_slab_free(mem_slab, &queue_entry.mem_block);
|
||||
k_mem_slab_free(mem_slab, queue_entry.mem_block);
|
||||
}
|
||||
} else {
|
||||
while (k_msgq_get(&stream->in_queue, &buffer, K_NO_WAIT) == 0) {
|
||||
k_mem_slab_free(mem_slab, &buffer);
|
||||
k_mem_slab_free(mem_slab, buffer);
|
||||
}
|
||||
}
|
||||
while (k_msgq_get(&stream->out_queue, &buffer, K_NO_WAIT) == 0) {
|
||||
k_mem_slab_free(mem_slab, &buffer);
|
||||
k_mem_slab_free(mem_slab, buffer);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -457,7 +457,7 @@ static void i2s_mcux_dma_tx_callback(const struct device *dma_dev, void *arg,
|
|||
ret = k_msgq_get(&stream->out_queue, &queue_entry.mem_block, K_NO_WAIT);
|
||||
if (ret == 0) {
|
||||
/* transmission complete. free the buffer */
|
||||
k_mem_slab_free(stream->cfg.mem_slab, &queue_entry.mem_block);
|
||||
k_mem_slab_free(stream->cfg.mem_slab, queue_entry.mem_block);
|
||||
} else {
|
||||
LOG_ERR("no buffer in output queue for channel %u", channel);
|
||||
}
|
||||
|
|
|
@ -124,13 +124,13 @@ static inline void i2s_purge_stream_buffers(struct stream *strm,
|
|||
|
||||
if (in_drop) {
|
||||
while (k_msgq_get(&strm->in_queue, &buffer, K_NO_WAIT) == 0) {
|
||||
k_mem_slab_free(mem_slab, &buffer);
|
||||
k_mem_slab_free(mem_slab, buffer);
|
||||
}
|
||||
}
|
||||
|
||||
if (out_drop) {
|
||||
while (k_msgq_get(&strm->out_queue, &buffer, K_NO_WAIT) == 0) {
|
||||
k_mem_slab_free(mem_slab, &buffer);
|
||||
k_mem_slab_free(mem_slab, buffer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -277,7 +277,7 @@ static void i2s_dma_tx_callback(const struct device *dma_dev,
|
|||
ret = k_msgq_get(&strm->out_queue, &buffer, K_NO_WAIT);
|
||||
if (ret == 0) {
|
||||
/* transmission complete. free the buffer */
|
||||
k_mem_slab_free(strm->cfg.mem_slab, &buffer);
|
||||
k_mem_slab_free(strm->cfg.mem_slab, buffer);
|
||||
(strm->free_tx_dma_blocks)++;
|
||||
} else {
|
||||
LOG_ERR("no buf in out_queue for channel %u", channel);
|
||||
|
|
|
@ -213,13 +213,13 @@ static bool get_next_rx_buffer(struct i2s_nrfx_drv_data *drv_data,
|
|||
static void free_tx_buffer(struct i2s_nrfx_drv_data *drv_data,
|
||||
const void *buffer)
|
||||
{
|
||||
k_mem_slab_free(drv_data->tx.cfg.mem_slab, (void **)&buffer);
|
||||
k_mem_slab_free(drv_data->tx.cfg.mem_slab, (void *)buffer);
|
||||
LOG_DBG("Freed TX %p", buffer);
|
||||
}
|
||||
|
||||
static void free_rx_buffer(struct i2s_nrfx_drv_data *drv_data, void *buffer)
|
||||
{
|
||||
k_mem_slab_free(drv_data->rx.cfg.mem_slab, &buffer);
|
||||
k_mem_slab_free(drv_data->rx.cfg.mem_slab, buffer);
|
||||
LOG_DBG("Freed RX %p", buffer);
|
||||
}
|
||||
|
||||
|
|
|
@ -277,7 +277,7 @@ static void dma_tx_callback(const struct device *dma_dev, void *user_data,
|
|||
__ASSERT_NO_MSG(stream->mem_block != NULL);
|
||||
|
||||
/* All block data sent */
|
||||
k_mem_slab_free(stream->cfg.mem_slab, &stream->mem_block);
|
||||
k_mem_slab_free(stream->cfg.mem_slab, stream->mem_block);
|
||||
stream->mem_block = NULL;
|
||||
|
||||
/* Stop transmission if there was an error */
|
||||
|
@ -736,7 +736,7 @@ static void rx_stream_disable(struct stream *stream, Ssc *const ssc,
|
|||
ssc->SSC_IDR = SSC_IDR_OVRUN;
|
||||
dma_stop(dev_dma, stream->dma_channel);
|
||||
if (stream->mem_block != NULL) {
|
||||
k_mem_slab_free(stream->cfg.mem_slab, &stream->mem_block);
|
||||
k_mem_slab_free(stream->cfg.mem_slab, stream->mem_block);
|
||||
stream->mem_block = NULL;
|
||||
}
|
||||
}
|
||||
|
@ -748,7 +748,7 @@ static void tx_stream_disable(struct stream *stream, Ssc *const ssc,
|
|||
ssc->SSC_IDR = SSC_IDR_TXEMPTY;
|
||||
dma_stop(dev_dma, stream->dma_channel);
|
||||
if (stream->mem_block != NULL) {
|
||||
k_mem_slab_free(stream->cfg.mem_slab, &stream->mem_block);
|
||||
k_mem_slab_free(stream->cfg.mem_slab, stream->mem_block);
|
||||
stream->mem_block = NULL;
|
||||
}
|
||||
}
|
||||
|
@ -759,7 +759,7 @@ static void rx_queue_drop(struct stream *stream)
|
|||
void *mem_block;
|
||||
|
||||
while (queue_get(&stream->mem_block_queue, &mem_block, &size) == 0) {
|
||||
k_mem_slab_free(stream->cfg.mem_slab, &mem_block);
|
||||
k_mem_slab_free(stream->cfg.mem_slab, mem_block);
|
||||
}
|
||||
|
||||
k_sem_reset(&stream->sem);
|
||||
|
@ -772,7 +772,7 @@ static void tx_queue_drop(struct stream *stream)
|
|||
unsigned int n = 0U;
|
||||
|
||||
while (queue_get(&stream->mem_block_queue, &mem_block, &size) == 0) {
|
||||
k_mem_slab_free(stream->cfg.mem_slab, &mem_block);
|
||||
k_mem_slab_free(stream->cfg.mem_slab, mem_block);
|
||||
n++;
|
||||
}
|
||||
|
||||
|
|
|
@ -139,7 +139,7 @@ static int ws2812_strip_update_rgb(const struct device *dev, struct led_rgb *pix
|
|||
/* Flush the buffer on the wire. */
|
||||
ret = i2s_write(cfg->dev, mem_block, cfg->tx_buf_bytes);
|
||||
if (ret < 0) {
|
||||
k_mem_slab_free(cfg->mem_slab, &mem_block);
|
||||
k_mem_slab_free(cfg->mem_slab, mem_block);
|
||||
LOG_ERR("Failed to write data: %d", ret);
|
||||
return ret;
|
||||
}
|
||||
|
|
|
@ -48,7 +48,7 @@ static void iface_uart_async_callback(const struct device *dev,
|
|||
break;
|
||||
case UART_RX_BUF_RELEASED:
|
||||
/* UART driver is done with memory, free it */
|
||||
k_mem_slab_free(&uart_modem_async_rx_slab, (void **)&evt->data.rx_buf.buf);
|
||||
k_mem_slab_free(&uart_modem_async_rx_slab, (void *)evt->data.rx_buf.buf);
|
||||
break;
|
||||
case UART_RX_RDY:
|
||||
/* Place received data on the ring buffer */
|
||||
|
|
|
@ -392,7 +392,7 @@ static int intel_gna_deregister_model(const struct device *dev,
|
|||
|
||||
gna_model = (struct intel_gna_model *)model_handle;
|
||||
gna_model->registered = false;
|
||||
k_mem_slab_free(&gna->model_slab, &model_handle);
|
||||
k_mem_slab_free(&gna->model_slab, model_handle);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -387,7 +387,7 @@ static inline void usbd_work_schedule(void)
|
|||
*/
|
||||
static inline void usbd_evt_free(struct usbd_event *ev)
|
||||
{
|
||||
k_mem_slab_free(&fifo_elem_slab, (void **)&ev->block.data);
|
||||
k_mem_slab_free(&fifo_elem_slab, (void *)ev->block.data);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -506,7 +506,7 @@ static void xfer_work_handler(struct k_work *item)
|
|||
}
|
||||
|
||||
xfer_work_error:
|
||||
k_mem_slab_free(&usbfsotg_ee_slab, (void **)&ev);
|
||||
k_mem_slab_free(&usbfsotg_ee_slab, (void *)ev);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -332,7 +332,7 @@ static ALWAYS_INLINE void udc_vrt_thread_handler(void *arg)
|
|||
udc_submit_event(dev, UDC_EVT_ERROR, err);
|
||||
}
|
||||
|
||||
k_mem_slab_free(&udc_vrt_slab, (void **)&vrt_ev);
|
||||
k_mem_slab_free(&udc_vrt_slab, (void *)vrt_ev);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -139,7 +139,7 @@ int uhc_xfer_free(const struct device *dev, struct uhc_transfer *const xfer)
|
|||
uhc_xfer_buf_free(dev, buf);
|
||||
}
|
||||
|
||||
k_mem_slab_free(&uhc_xfer_pool, (void **)&xfer);
|
||||
k_mem_slab_free(&uhc_xfer_pool, (void *)xfer);
|
||||
|
||||
xfer_free_error:
|
||||
api->unlock(dev);
|
||||
|
|
|
@ -378,7 +378,7 @@ static void xfer_work_handler(struct k_work *work)
|
|||
}
|
||||
}
|
||||
|
||||
k_mem_slab_free(&uhc_vrt_slab, (void **)&ev);
|
||||
k_mem_slab_free(&uhc_vrt_slab, (void *)ev);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -72,7 +72,7 @@ struct uvb_packet *uvb_alloc_pkt(const enum uvb_request request,
|
|||
|
||||
void uvb_free_pkt(struct uvb_packet *const pkt)
|
||||
{
|
||||
k_mem_slab_free(&uvb_pkt_slab, (void **)&pkt);
|
||||
k_mem_slab_free(&uvb_pkt_slab, (void *)pkt);
|
||||
}
|
||||
|
||||
static ALWAYS_INLINE int submit_new_work(struct uvb_msg *const msg)
|
||||
|
@ -311,7 +311,7 @@ static void uvb_work_handler(struct k_work *work)
|
|||
break;
|
||||
}
|
||||
|
||||
k_mem_slab_free(&uvb_msg_slab, (void **)&msg);
|
||||
k_mem_slab_free(&uvb_msg_slab, (void *)msg);
|
||||
if (!k_fifo_is_empty(&uvb_queue)) {
|
||||
(void)k_work_submit(work);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue