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

Commit b93d51dc authored by Ian Campbell's avatar Ian Campbell Committed by Ingo Molnar
Browse files

x86, xen: record and display initiator of each multicall when debugging



Store the caller for each multicall so we can report it on failure.

Signed-off-by: default avatarIan Campbell <ian.campbell@citrix.com>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 9033304a
Loading
Loading
Loading
Loading
+7 −2
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ struct mc_buffer {
	struct multicall_entry entries[MC_BATCH];
#if MC_DEBUG
	struct multicall_entry debug[MC_BATCH];
	void *caller[MC_BATCH];
#endif
	unsigned char args[MC_ARGS];
	struct callback {
@@ -154,11 +155,12 @@ void xen_mc_flush(void)
			       ret, smp_processor_id());
			dump_stack();
			for (i = 0; i < b->mcidx; i++) {
				printk(KERN_DEBUG "  call %2d/%d: op=%lu arg=[%lx] result=%ld\n",
				printk(KERN_DEBUG "  call %2d/%d: op=%lu arg=[%lx] result=%ld\t%pF\n",
				       i+1, b->mcidx,
				       b->debug[i].op,
				       b->debug[i].args[0],
				       b->entries[i].result);
				       b->entries[i].result,
				       b->caller[i]);
			}
		}
#endif
@@ -197,6 +199,9 @@ struct multicall_space __xen_mc_entry(size_t args)
	}

	ret.mc = &b->entries[b->mcidx];
#ifdef MC_DEBUG
	b->caller[b->mcidx] = __builtin_return_address(0);
#endif
	b->mcidx++;
	ret.args = &b->args[argidx];
	b->argidx = argidx + args;