
Daniel P. Berrange wrote:
What hypervisor version are you running. I'm struggling to see the codepath in the hypervisor 'getdomaininfo' call which could lead to domain_flags being zero. AFAICT, as well as the HVM flags, there must always be at least one other bit set.
This is opensolaris 81 with xen 3.1.2. Not having studied this code extensively, I do see a path that could cause this: flags starts out life as XEN_DOMINF_blocked That flag then gets cleared in this marked line:
int flags = XEN_DOMINF_blocked;
for_each_vcpu ( d, v ) { .... if ( !test_bit(_VPF_down, &v->pause_flags) ) { if ( !(v->pause_flags & VPF_blocked) ) flags &= ~XEN_DOMINF_blocked; <-----here if ( v->is_running ) flags |= XEN_DOMINF_running; info->nr_online_vcpus++; } }
and then no bits are set in the next block.
Guarenteed either XEN_DOMINF_blocked or XEN_DOMINF_running is set now.
And this next block, simply sets a few more bits
info->flags = flags | ((d->is_dying == DOMDYING_dead) ? XEN_DOMINF_dying : 0) | (d->is_shut_down ? XEN_DOMINF_shutdown : 0) | (d->is_paused_by_controller ? XEN_DOMINF_paused : 0) | (d->debugger_attached ? XEN_DOMINF_debugged : 0) | d->shutdown_code << XEN_DOMINF_shutdownshift;
if ( is_hvm_domain(d) ) info->flags |= XEN_DOMINF_hvm_guest;
This is all in getdomaininfo, from xen/common/domctl.c
----------------------------------------------------- Russ Blaine | Solaris Kernel | russell.blaine@sun.com