
On Tue, Jan 29, 2008 at 10:01:35AM -0800, Russ Blaine wrote:
Daniel P. Berrange wrote:
Can you edit the src/xen_internal.c file and in the xenHypervisorGetDomInfo() method, add a printf() for the 'domain_flags' flags variable. IMHO the way we deal with this isn't quite correct. We merely mask out the high bits and then switch on the resulting value. This isn't the way the Xen hypervisor uses this field though. Xen more or less uses the whole thing as as bitmask, allowing near arbitrary combinations of bits to be set. So I think what is happening is there's a combo of bits set which cause the switch() statement to fail all cases, resulting in NOSTATE.
We'll probably need to replace the switch(domain_flags) with something which explicitly tests for the bits we're interested in, rather than looking at the value as a whole.
when xenHypervisorGetDomInfo() returns VIR_DOMAIN_NONE, domain_flags is 0 (sampled after the HVM bit has been masked out). So is there some other state implied by domain_flags being 0? In all cases I have seen, the domain is actually running -- accumulating CPU time, etc.
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. 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; if ( v->is_running ) flags |= XEN_DOMINF_running; info->nr_online_vcpus++; } } 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 Regards, Dan. -- |=- Red Hat, Engineering, Emerging Technologies, Boston. +1 978 392 2496 -=| |=- Perl modules: http://search.cpan.org/~danberr/ -=| |=- Projects: http://freshmeat.net/~danielpb/ -=| |=- GnuPG: 7D3B9505 F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505 -=|