Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 261f9917 authored by Moshe Shemesh's avatar Moshe Shemesh Committed by Greg Kroah-Hartman
Browse files

Revert "net/mlx5: Add retry mechanism to the command entry index allocation"



commit 4f6626b0e140867fd6d5a2e9d4ceaef97f10f46a upstream.

This reverts commit 410bd754cd73c4a2ac3856d9a03d7b08f9c906bf.

The reverted commit had added a retry mechanism to the command entry
index allocation. The previous patch ensures that there is a free
command entry index once the command work handler holds the command
semaphore. Thus the retry mechanism is not needed.

Fixes: 410bd754cd73 ("net/mlx5: Add retry mechanism to the command entry index allocation")
Signed-off-by: default avatarMoshe Shemesh <moshe@nvidia.com>
Reviewed-by: default avatarEran Ben Elisha <eranbe@nvidia.com>
Signed-off-by: default avatarSaeed Mahameed <saeedm@nvidia.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 6926d427
Loading
Loading
Loading
Loading
+1 −20
Original line number Diff line number Diff line
@@ -887,25 +887,6 @@ static bool opcode_allowed(struct mlx5_cmd *cmd, u16 opcode)
	return cmd->allowed_opcode == opcode;
}

static int cmd_alloc_index_retry(struct mlx5_cmd *cmd)
{
	unsigned long alloc_end = jiffies + msecs_to_jiffies(1000);
	int idx;

retry:
	idx = cmd_alloc_index(cmd);
	if (idx < 0 && time_before(jiffies, alloc_end)) {
		/* Index allocation can fail on heavy load of commands. This is a temporary
		 * situation as the current command already holds the semaphore, meaning that
		 * another command completion is being handled and it is expected to release
		 * the entry index soon.
		 */
		cpu_relax();
		goto retry;
	}
	return idx;
}

static void cmd_work_handler(struct work_struct *work)
{
	struct mlx5_cmd_work_ent *ent = container_of(work, struct mlx5_cmd_work_ent, work);
@@ -923,7 +904,7 @@ static void cmd_work_handler(struct work_struct *work)
	sem = ent->page_queue ? &cmd->pages_sem : &cmd->sem;
	down(sem);
	if (!ent->page_queue) {
		alloc_ret = cmd_alloc_index_retry(cmd);
		alloc_ret = cmd_alloc_index(cmd);
		if (alloc_ret < 0) {
			mlx5_core_err(dev, "failed to allocate command entry\n");
			if (ent->callback) {