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

Commit a19b462f authored by Marc Zyngier's avatar Marc Zyngier
Browse files

irqchip/gic-v3-its: Add post-mortem info on command timeout



If the ITS stops processing commands, we're pretty much toasted
as we cannot update the configuration anymore (and we're not
even sure that the ITS still translates interrups).

If that happens, let's dump some basic information about the
state of affairs before moving on.

Signed-off-by: default avatarMarc Zyngier <marc.zyngier@arm.com>
parent 558b0165
Loading
Loading
Loading
Loading
+10 −6
Original line number Diff line number Diff line
@@ -690,7 +690,7 @@ static void its_flush_cmd(struct its_node *its, struct its_cmd_block *cmd)
		dsb(ishst);
}

static void its_wait_for_range_completion(struct its_node *its,
static int its_wait_for_range_completion(struct its_node *its,
					 struct its_cmd_block *from,
					 struct its_cmd_block *to)
{
@@ -713,12 +713,15 @@ static void its_wait_for_range_completion(struct its_node *its,

		count--;
		if (!count) {
			pr_err_ratelimited("ITS queue timeout\n");
			return;
			pr_err_ratelimited("ITS queue timeout (%llu %llu %llu)\n",
					   from_idx, to_idx, rd_idx);
			return -1;
		}
		cpu_relax();
		udelay(1);
	}

	return 0;
}

/* Warning, macro hell follows */
@@ -754,7 +757,8 @@ post: \
	next_cmd = its_post_commands(its);				\
	raw_spin_unlock_irqrestore(&its->lock, flags);			\
									\
	its_wait_for_range_completion(its, cmd, next_cmd);		\
	if (its_wait_for_range_completion(its, cmd, next_cmd))		\
		pr_err_ratelimited("ITS cmd %ps failed\n", builder);	\
}

static void its_build_sync_cmd(struct its_cmd_block *sync_cmd,