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
|
@ -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++;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue