rtio: Remove builtin iodev mpsc queue
I/O Devices were meant to be handles of sorts and had a built in mpsc queue as this made sense initially. As time has gone on it turned out that often we wanted the mpsc queue to be an implementation detail hidden in a driver. In fact pretty much all drivers work this way now. Keeping the struct mpsc queue as a member of rtio_iodev meant wasted memory in cases where it wasn't used. It also meant a bit of confusion as the queue might be accidently used in places where it shouldn't be. Remove the mpsc queue member from struct rtio_iodev and the last remaining usages of it. Will ensure RTIO for 3.7 LTS avoids causing unneeded churn for future users. Signed-off-by: Tom Burdick <thomas.burdick@intel.com>
This commit is contained in:
parent
9e623fa9ac
commit
98b26c6ca8
5 changed files with 12 additions and 33 deletions
|
|
@ -61,8 +61,6 @@ void i2c_rtio_init(struct i2c_rtio *ctx, const struct device *dev)
|
|||
ctx->dt_spec.bus = dev;
|
||||
ctx->iodev.data = &ctx->dt_spec;
|
||||
ctx->iodev.api = &i2c_iodev_api;
|
||||
/* TODO drop the builtin submission queue? */
|
||||
mpsc_init(&ctx->iodev.iodev_sq);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -75,6 +75,7 @@ struct spi_mcux_data {
|
|||
|
||||
#ifdef CONFIG_SPI_RTIO
|
||||
struct rtio *r;
|
||||
struct mpsc io_q;
|
||||
struct rtio_iodev iodev;
|
||||
struct rtio_iodev_sqe *txn_head;
|
||||
struct rtio_iodev_sqe *txn_curr;
|
||||
|
|
@ -702,7 +703,7 @@ static int spi_mcux_init(const struct device *dev)
|
|||
data->dt_spec.bus = dev;
|
||||
data->iodev.api = &spi_iodev_api;
|
||||
data->iodev.data = &data->dt_spec;
|
||||
mpsc_init(&data->iodev.iodev_sq);
|
||||
mpsc_init(&data->io_q);
|
||||
#endif
|
||||
|
||||
err = pinctrl_apply_state(config->pincfg, PINCTRL_STATE_DEFAULT);
|
||||
|
|
@ -803,7 +804,7 @@ static void spi_mcux_iodev_next(const struct device *dev, bool completion)
|
|||
return;
|
||||
}
|
||||
|
||||
struct mpsc_node *next = mpsc_pop(&data->iodev.iodev_sq);
|
||||
struct mpsc_node *next = mpsc_pop(&data->io_q);
|
||||
|
||||
if (next != NULL) {
|
||||
struct rtio_iodev_sqe *next_sqe = CONTAINER_OF(next, struct rtio_iodev_sqe, q);
|
||||
|
|
@ -832,7 +833,7 @@ static void spi_mcux_iodev_submit(const struct device *dev,
|
|||
{
|
||||
struct spi_mcux_data *data = dev->data;
|
||||
|
||||
mpsc_push(&data->iodev.iodev_sq, &iodev_sqe->q);
|
||||
mpsc_push(&data->io_q, &iodev_sqe->q);
|
||||
spi_mcux_iodev_next(dev, false);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -53,6 +53,7 @@ struct spi_sam_data {
|
|||
|
||||
#ifdef CONFIG_SPI_RTIO
|
||||
struct rtio *r; /* context for thread calls */
|
||||
struct mpsc io_q;
|
||||
struct rtio_iodev iodev;
|
||||
struct rtio_iodev_sqe *txn_head;
|
||||
struct rtio_iodev_sqe *txn_curr;
|
||||
|
|
@ -691,7 +692,7 @@ static void spi_sam_iodev_next(const struct device *dev, bool completion)
|
|||
return;
|
||||
}
|
||||
|
||||
struct mpsc_node *next = mpsc_pop(&data->iodev.iodev_sq);
|
||||
struct mpsc_node *next = mpsc_pop(&data->io_q);
|
||||
|
||||
if (next != NULL) {
|
||||
struct rtio_iodev_sqe *next_sqe = CONTAINER_OF(next, struct rtio_iodev_sqe, q);
|
||||
|
|
@ -736,7 +737,7 @@ static void spi_sam_iodev_submit(const struct device *dev,
|
|||
{
|
||||
struct spi_sam_data *data = dev->data;
|
||||
|
||||
mpsc_push(&data->iodev.iodev_sq, &iodev_sqe->q);
|
||||
mpsc_push(&data->io_q, &iodev_sqe->q);
|
||||
spi_sam_iodev_next(dev, false);
|
||||
}
|
||||
#endif
|
||||
|
|
@ -866,7 +867,7 @@ static int spi_sam_init(const struct device *dev)
|
|||
data->dt_spec.bus = dev;
|
||||
data->iodev.api = &spi_iodev_api;
|
||||
data->iodev.data = &data->dt_spec;
|
||||
mpsc_init(&data->iodev.iodev_sq);
|
||||
mpsc_init(&data->io_q);
|
||||
#endif
|
||||
|
||||
spi_context_unlock_unconditionally(&data->ctx);
|
||||
|
|
|
|||
|
|
@ -449,9 +449,6 @@ struct rtio_iodev {
|
|||
/* Function pointer table */
|
||||
const struct rtio_iodev_api *api;
|
||||
|
||||
/* Queue of RTIO contexts with requests */
|
||||
struct mpsc iodev_sq;
|
||||
|
||||
/* Data associated with this iodev */
|
||||
void *data;
|
||||
};
|
||||
|
|
@ -732,7 +729,6 @@ static inline void rtio_block_pool_free(struct rtio *r, void *buf, uint32_t buf_
|
|||
#define RTIO_IODEV_DEFINE(name, iodev_api, iodev_data) \
|
||||
STRUCT_SECTION_ITERABLE(rtio_iodev, name) = { \
|
||||
.api = (iodev_api), \
|
||||
.iodev_sq = MPSC_INIT((name.iodev_sq)), \
|
||||
.data = (iodev_data), \
|
||||
}
|
||||
|
||||
|
|
@ -1128,24 +1124,6 @@ static inline void rtio_iodev_sqe_err(struct rtio_iodev_sqe *iodev_sqe, int resu
|
|||
rtio_executor_err(iodev_sqe, result);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Cancel all requests that are pending for the iodev
|
||||
*
|
||||
* @param iodev IODev to cancel all requests for
|
||||
*/
|
||||
static inline void rtio_iodev_cancel_all(struct rtio_iodev *iodev)
|
||||
{
|
||||
/* Clear pending requests as -ENODATA */
|
||||
struct mpsc_node *node = mpsc_pop(&iodev->iodev_sq);
|
||||
|
||||
while (node != NULL) {
|
||||
struct rtio_iodev_sqe *iodev_sqe = CONTAINER_OF(node, struct rtio_iodev_sqe, q);
|
||||
|
||||
rtio_iodev_sqe_err(iodev_sqe, -ECANCELED);
|
||||
node = mpsc_pop(&iodev->iodev_sq);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Submit a completion queue event with a given result and userdata
|
||||
*
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ struct vnd_sensor_config {
|
|||
|
||||
struct vnd_sensor_data {
|
||||
struct rtio_iodev iodev;
|
||||
struct mpsc io_q;
|
||||
struct k_timer timer;
|
||||
const struct device *dev;
|
||||
uint32_t sample_number;
|
||||
|
|
@ -83,13 +84,13 @@ static void vnd_sensor_iodev_submit(struct rtio_iodev_sqe *iodev_sqe)
|
|||
{
|
||||
struct vnd_sensor_data *data = (struct vnd_sensor_data *) iodev_sqe->sqe.iodev;
|
||||
|
||||
mpsc_push(&data->iodev.iodev_sq, &iodev_sqe->q);
|
||||
mpsc_push(&data->io_q, &iodev_sqe->q);
|
||||
}
|
||||
|
||||
static void vnd_sensor_handle_int(const struct device *dev)
|
||||
{
|
||||
struct vnd_sensor_data *data = dev->data;
|
||||
struct mpsc_node *node = mpsc_pop(&data->iodev.iodev_sq);
|
||||
struct mpsc_node *node = mpsc_pop(&data->io_q);
|
||||
|
||||
if (node != NULL) {
|
||||
struct rtio_iodev_sqe *iodev_sqe = CONTAINER_OF(node, struct rtio_iodev_sqe, q);
|
||||
|
|
@ -116,7 +117,7 @@ static int vnd_sensor_init(const struct device *dev)
|
|||
|
||||
data->dev = dev;
|
||||
|
||||
mpsc_init(&data->iodev.iodev_sq);
|
||||
mpsc_init(&data->io_q);
|
||||
|
||||
k_timer_init(&data->timer, vnd_sensor_timer_expiry, NULL);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue