From 914007c1c6f6befee20d155bcb97a20e66a1d507 Mon Sep 17 00:00:00 2001 From: Konrad Sztyber Date: Wed, 18 Jan 2023 15:23:22 +0100 Subject: [PATCH] accel: functions to iterate over tasks in a sequence Signed-off-by: Konrad Sztyber Change-Id: I97f011b7eaa7db7e9a9df583aff23321d60bb72f Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/16378 Tested-by: SPDK CI Jenkins Reviewed-by: Aleksey Marchuk Reviewed-by: Jim Harris --- include/spdk_internal/accel_module.h | 19 +++++++++++++++++++ lib/accel/accel.c | 12 ++++++++++++ lib/accel/spdk_accel.map | 2 ++ 3 files changed, 33 insertions(+) diff --git a/include/spdk_internal/accel_module.h b/include/spdk_internal/accel_module.h index b1fc21c37..46e126445 100644 --- a/include/spdk_internal/accel_module.h +++ b/include/spdk_internal/accel_module.h @@ -236,4 +236,23 @@ bool spdk_accel_alloc_sequence_buf(struct spdk_accel_sequence *seq, void *buf, struct spdk_memory_domain *domain, void *domain_ctx, spdk_accel_sequence_get_buf_cb cb_fn, void *cb_ctx); +/** + * Returns the first task remaining to be executed in a given sequence. + * + * \param seq Sequence object. + * + * \return the first remaining task or NULL if all tasks are already completed. + */ +struct spdk_accel_task *spdk_accel_sequence_first_task(struct spdk_accel_sequence *seq); + +/** + * Returns the next remaining task that follows a given task in a sequence. + * + * \param task Accel task. This task must be still oustanding (i.e. it wasn't completed through + * `spdk_accel_task_complete()`). + * + * \return the next task or NULL if `task` was the last task in a sequence. + */ +struct spdk_accel_task *spdk_accel_sequence_next_task(struct spdk_accel_task *task); + #endif diff --git a/lib/accel/accel.c b/lib/accel/accel.c index a4cf970c2..8cc853213 100644 --- a/lib/accel/accel.c +++ b/lib/accel/accel.c @@ -1253,6 +1253,18 @@ spdk_accel_alloc_sequence_buf(struct spdk_accel_sequence *seq, void *buf, return true; } +struct spdk_accel_task * +spdk_accel_sequence_first_task(struct spdk_accel_sequence *seq) +{ + return TAILQ_FIRST(&seq->tasks); +} + +struct spdk_accel_task * +spdk_accel_sequence_next_task(struct spdk_accel_task *task) +{ + return TAILQ_NEXT(task, seq_link); +} + static inline uint64_t accel_get_iovlen(struct iovec *iovs, uint32_t iovcnt) { diff --git a/lib/accel/spdk_accel.map b/lib/accel/spdk_accel.map index 874cd0762..b0b52c628 100644 --- a/lib/accel/spdk_accel.map +++ b/lib/accel/spdk_accel.map @@ -43,6 +43,8 @@ spdk_accel_driver_register; spdk_accel_get_memory_domain; spdk_accel_alloc_sequence_buf; + spdk_accel_sequence_first_task; + spdk_accel_sequence_next_task; local: *; };