We warn when we see data for a vcpu moving into a non-RUNNING state,
just so that people know why we're ignoring it. On full traces, this
happens only once. However, if the trace was limited to a subset of
pcpus, then this will happen every time the domain in question is
woken on that pcpu.
Add a 'delayed_init' flag to the vcpu struct to indicate when a vcpu
has experienced a delayed init. Print a warning message once when
entering the state, and once when leaving it.
Signed-off-by: George Dunlap <george.dunlap@cloud.com>
Release-acked-by: Henry Wang <Henry.Wang@arm.com>
Acked-by: Anthony PERARD <anthony.perard@citrix.com>
struct vcpu_data {
int vid;
struct domain_data *d; /* up-pointer */
- unsigned activated:1;
+ unsigned activated:1, delayed_init:1;
int guest_paging_levels;
* bring a vcpu out of INIT until it's seen to be actually
* running somewhere. */
if ( new_runstate != RUNSTATE_RUNNING ) {
- fprintf(warn, "First schedule for d%dv%d doesn't take us into a running state; leaving INIT\n",
- v->d->did, v->vid);
+ if ( !v->delayed_init ) {
+ fprintf(warn, "First schedule for d%dv%d doesn't take us into a running state; leaving in INIT\n",
+ v->d->did, v->vid);
+ v->delayed_init = 1;
+ }
return;
+ } else if ( v->delayed_init ) {
+ fprintf(warn, "d%dv%d RUNSTATE_RUNNING detected, leaving INIT",
+ v->d->did, v->vid);
+ v->delayed_init = 0;
}
tsc = ri_tsc;