Commit 5914f02b authored by Ben Walker's avatar Ben Walker Committed by Tomasz Zawadzki
Browse files

accel: Don't query the channel queue depth. Rely on -EBUSY



We can just queue things up until we get -EBUSY and not track the queue
depth.

Signed-off-by: default avatarBen Walker <benjamin.walker@intel.com>
Change-Id: I49d3bcae0e6705a322de54fa91c9e1c6dfaea0c2
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/11028


Community-CI: Broadcom CI <spdk-ci.pdl@broadcom.com>
Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarChangpeng Liu <changpeng.liu@intel.com>
parent c1ec9241
Loading
Loading
Loading
Loading
+6 −14
Original line number Diff line number Diff line
@@ -54,7 +54,6 @@ uint32_t g_config_number;

enum channel_state {
	IDXD_CHANNEL_ACTIVE,
	IDXD_CHANNEL_PAUSED,
	IDXD_CHANNEL_ERROR,
};

@@ -75,7 +74,6 @@ struct idxd_io_channel {
	enum channel_state		state;
	struct spdk_poller		*poller;
	uint32_t			num_outstanding;
	uint32_t			max_outstanding;
	TAILQ_HEAD(, spdk_accel_task)	queued_tasks;
};

@@ -114,7 +112,6 @@ idxd_select_device(struct idxd_io_channel *chan)
		 */
		chan->chan = spdk_idxd_get_channel(dev->idxd);
		if (chan->chan != NULL) {
			chan->max_outstanding = spdk_idxd_chan_get_max_operations(chan->chan);
			SPDK_DEBUGLOG(accel_idxd, "On socket %d using device on socket %d\n",
				      socket_id, spdk_idxd_get_socket(dev->idxd));
			return dev;
@@ -138,9 +135,7 @@ idxd_done(void *cb_arg, int status)

	assert(chan->num_outstanding > 0);
	spdk_trace_record(TRACE_IDXD_OP_COMPLETE, 0, 0, 0, chan->num_outstanding - 1);
	if (chan->num_outstanding-- == chan->max_outstanding) {
		chan->state = IDXD_CHANNEL_ACTIVE;
	}
	chan->num_outstanding--;

	spdk_accel_task_complete(accel_task, status);
}
@@ -156,11 +151,6 @@ _process_single_task(struct spdk_io_channel *ch, struct spdk_accel_task *task)
	struct iovec siov = {};
	struct iovec diov = {};

	if (chan->num_outstanding == chan->max_outstanding) {
		chan->state = IDXD_CHANNEL_PAUSED;
		return -EBUSY;
	}

	switch (task->op_code) {
	case ACCEL_OPCODE_MEMMOVE:
		siov.iov_base = task->src;
@@ -239,9 +229,7 @@ idxd_submit_tasks(struct spdk_io_channel *ch, struct spdk_accel_task *first_task

	task = first_task;

	if (chan->state == IDXD_CHANNEL_PAUSED) {
		goto queue_tasks;
	} else if (chan->state == IDXD_CHANNEL_ERROR) {
	if (chan->state == IDXD_CHANNEL_ERROR) {
		while (task) {
			tmp = TAILQ_NEXT(task, link);
			spdk_accel_task_complete(task, -EINVAL);
@@ -250,6 +238,10 @@ idxd_submit_tasks(struct spdk_io_channel *ch, struct spdk_accel_task *first_task
		return 0;
	}

	if (!TAILQ_EMPTY(&chan->queued_tasks)) {
		goto queue_tasks;
	}

	/* The caller will either submit a single task or a group of tasks that are
	 * linked together but they cannot be on a list. For example, see idxd_poll()
	 * where a list of queued tasks is being resubmitted, the list they are on