Commit 23dc652d authored by Alexey Marchuk's avatar Alexey Marchuk Committed by Konrad Sztyber
Browse files

lib/accel: Allow to complete any task in the sequence



Current implementation assumes that only first task
can be completed but platform driver can optimize
the sequence and merge a task in the middle

Signed-off-by: default avatarAlexey Marchuk <alexeymar@nvidia.com>
Change-Id: Iccf3f4b3ff92e6bd88a393d36332c5c926a7354a
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/24691


Reviewed-by: default avatarKonrad Sztyber <konrad.sztyber@intel.com>
Reviewed-by: default avatarBen Walker <ben@nvidia.com>
Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
Community-CI: Mellanox Build Bot
Reviewed-by: default avatarShuhei Matsumoto <smatsumoto@nvidia.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
parent 9bdeb23a
Loading
Loading
Loading
Loading
+4 −8
Original line number Diff line number Diff line
@@ -180,7 +180,8 @@ SPDK_STATIC_ASSERT(sizeof(struct spdk_accel_sequence) == 64, "invalid size");
#define accel_update_task_stats(ch, task, event, v) \
	accel_update_stats(ch, operations[(task)->op_code].event, v)

static inline void accel_sequence_task_cb(void *cb_arg, int status);
static inline void accel_sequence_task_cb(struct spdk_accel_sequence *seq,
		struct spdk_accel_task *task, int status);

static inline void
accel_sequence_set_state(struct spdk_accel_sequence *seq, enum accel_sequence_state state)
@@ -319,7 +320,7 @@ spdk_accel_task_complete(struct spdk_accel_task *accel_task, int status)
	}

	if (accel_task->seq) {
		accel_sequence_task_cb(accel_task->seq, status);
		accel_sequence_task_cb(accel_task->seq, accel_task, status);
		return;
	}

@@ -1133,8 +1134,6 @@ accel_sequence_put(struct spdk_accel_sequence *seq)
	accel_update_stats(ch, sequence_outstanding, -1);
}

static void accel_sequence_task_cb(void *cb_arg, int status);

static inline struct spdk_accel_task *
accel_sequence_get_task(struct accel_io_channel *ch, struct spdk_accel_sequence *seq,
			spdk_accel_step_cb cb_fn, void *cb_arg)
@@ -2374,11 +2373,8 @@ accel_process_sequence(struct spdk_accel_sequence *seq)
}

static void
accel_sequence_task_cb(void *cb_arg, int status)
accel_sequence_task_cb(struct spdk_accel_sequence *seq, struct spdk_accel_task *task, int status)
{
	struct spdk_accel_sequence *seq = cb_arg;
	struct spdk_accel_task *task = TAILQ_FIRST(&seq->tasks);

	switch (seq->state) {
	case ACCEL_SEQUENCE_STATE_AWAIT_TASK:
		accel_sequence_set_state(seq, ACCEL_SEQUENCE_STATE_COMPLETE_TASK);