On Wed, 2019-08-07 at 11:22 -0700, Stefano Stabellini wrote: > Hi Dario, George, > > Dom0less with sched=null is broken on staging, it simply hangs soon > after Xen is finished loading things. My impression is that vcpus are > not actually started. I did a git bisection and it pointed to: > > commit d545f1d6c2519a183ed631cfca7aff0baf29fde5 (refs/bisect/bad) > Author: Dario Faggioli <[email protected]> > Date: Mon Aug 5 11:50:55 2019 +0100 > > xen: sched: deal with vCPUs being or becoming online or offline > > Any ideas? > Ok, I've done some basic testing, and inspected the code again, and honestly I am not finding anything really suspicious.
Of course, I'm not really testing dom0less, and I'm not sure I can easily do that. Can you help me with this, e.g., by providing some more info and, if possible, logs? E.g., you say boot stops after Xen loading. Is there a bootlog that we can see (ideally from a debug build, and with "loglvl=all guest_loglvl=all")? Does the system respond to debug-keys? If yes, the log after triggering the 'r' debug-key would be useful. These patches are about vcpus going offline and online... does dom0less play with vcpu onffline/online in any way? I've put together a debug patch (attached), focusing on what the mentioned commit does, but it's nothing more than a shot in the dark, for now... Thanks and Regards -- Dario Faggioli, Ph.D http://about.me/dario.faggioli Virtualization Software Engineer SUSE Labs, SUSE https://www.suse.com/ ------------------------------------------------------------------- <<This happens because _I_ choose it to happen!>> (Raistlin Majere)
diff --git a/xen/common/sched_null.c b/xen/common/sched_null.c
index 26c6f0f129..afd42e552f 100644
--- a/xen/common/sched_null.c
+++ b/xen/common/sched_null.c
@@ -455,6 +455,7 @@ static void null_vcpu_insert(const struct scheduler *ops, struct vcpu *v)
if ( unlikely(!is_vcpu_online(v)) )
{
+ dprintk(XENLOG_G_INFO, "Not inserting %pv (not online!)\n", v);
vcpu_schedule_unlock_irq(lock, v);
return;
}
@@ -516,6 +517,7 @@ static void null_vcpu_remove(const struct scheduler *ops, struct vcpu *v)
/* If offline, the vcpu shouldn't be assigned, nor in the waitqueue */
if ( unlikely(!is_vcpu_online(v)) )
{
+ dprintk(XENLOG_G_INFO, "Not removing %pv (wasn't online!)\n", v);
ASSERT(per_cpu(npc, v->processor).vcpu != v);
ASSERT(list_empty(&nvc->waitq_elem));
goto out;
@@ -635,6 +637,8 @@ static void null_vcpu_sleep(const struct scheduler *ops, struct vcpu *v)
}
else if ( per_cpu(npc, cpu).vcpu == v )
tickled = vcpu_deassign(prv, v);
+
+ dprintk(XENLOG_G_INFO, "%pv is, apparently, going offline (tickled=%d)\n", v, tickled);
}
/* If v is not assigned to a pCPU, or is not running, no need to bother */
@@ -697,6 +701,8 @@ static void null_vcpu_migrate(const struct scheduler *ops, struct vcpu *v,
*/
if ( unlikely(!is_vcpu_online(v)) )
{
+ dprintk(XENLOG_G_INFO, "%pv is, apparently, going offline\n", v);
+
spin_lock(&prv->waitq_lock);
list_del_init(&nvc->waitq_elem);
spin_unlock(&prv->waitq_lock);
signature.asc
Description: This is a digitally signed message part
_______________________________________________ Xen-devel mailing list [email protected] https://lists.xenproject.org/mailman/listinfo/xen-devel
