[Libvir] virsh - vcpuinfo cmd not working in 0.2.2
Atsushi SAKAI
sakaia at jp.fujitsu.com
Tue May 8 01:11:56 UTC 2007
Hi, Dan
Thanks for your information.
I am also wondering mlock data.
(I guess old variable used in historical reason.)
I try to check it.
Anyway I change the struct(xen_v2_vcpuinfo) ordering.
(vcpu goes last and other goes to front in Dom0-vcpu0 case.)
Then I successfully get the information.
(This is just temporary, I investigate this issue in my side work)
Thanks
Atsushi SAKAI
"Daniel P. Berrange" <berrange at redhat.com> wrote:
> On Mon, May 07, 2007 at 10:13:57AM +0900, Atsushi SAKAI wrote:
> > Hi, Jan
> >
> > I think you should use 0.2.1 at this moment.
> > libvirt cannot handle Xen-hypervisor-domctl correctly on 0.2.2.
> > But Xen-hypervisor-sysctl works fine.
> > This problem recognized in two weeks ago,
> > but I have no time to investigate this issue.
>
> I've been trying to reproduce / diagnose the problems you reported too
> but not had much luck so far. Every way I look at it the code looks to
> be using the correct hypercall numbers, operation numbers & structs.
> Until I just noticed this:
>
> xenHypervisorDoV2Dom(int handle, xen_op_v2_dom* op)
> {
> ....
> if (mlock(op, sizeof(dom0_op_t)) < 0) {
>
>
> Notice that it is doing sizeof(dom0_op_t) instead of sizeof(xen_op_v2_dom)
>
> There is the same typo with xenHypervisorDoV2Sys.
>
> Now dom0_op_t is defined as
>
> struct dom0_op {
> uint32_t cmd;
> uint32_t interface_version; /* DOM0_INTERFACE_VERSION */
> union {
> struct dom0_msr msr;
> struct dom0_settime settime;
> struct dom0_add_memtype add_memtype;
> struct dom0_del_memtype del_memtype;
> struct dom0_read_memtype read_memtype;
> struct dom0_microcode microcode;
> struct dom0_platform_quirk platform_quirk;
> struct dom0_memory_map_entry physical_memory_map;
> uint8_t pad[128];
> } u;
> };
>
> Which is 4 + 4 + 128 bytes == 136
>
> Nexzt, xen_sysctl is defined as
>
> struct xen_sysctl {
> uint32_t cmd;
> uint32_t interface_version; /* XEN_SYSCTL_INTERFACE_VERSION */
> union {
> struct xen_sysctl_readconsole readconsole;
> struct xen_sysctl_tbuf_op tbuf_op;
> struct xen_sysctl_physinfo physinfo;
> struct xen_sysctl_sched_id sched_id;
> struct xen_sysctl_perfc_op perfc_op;
> struct xen_sysctl_getdomaininfolist getdomaininfolist;
> uint8_t pad[128];
> } u;
> };
>
> Which is also 4 + 4 + 128 bytes == 136
>
> Finally, xen_domctl is defined as
>
> struct xen_domctl {
> uint32_t cmd;
> uint32_t interface_version; /* XEN_DOMCTL_INTERFACE_VERSION */
> domid_t domain;
> union {
> struct xen_domctl_createdomain createdomain;
> struct xen_domctl_getdomaininfo getdomaininfo;
> struct xen_domctl_getmemlist getmemlist;
> struct xen_domctl_getpageframeinfo getpageframeinfo;
> struct xen_domctl_getpageframeinfo2 getpageframeinfo2;
> struct xen_domctl_vcpuaffinity vcpuaffinity;
> struct xen_domctl_shadow_op shadow_op;
> struct xen_domctl_max_mem max_mem;
> struct xen_domctl_vcpucontext vcpucontext;
> struct xen_domctl_getvcpuinfo getvcpuinfo;
> struct xen_domctl_max_vcpus max_vcpus;
> struct xen_domctl_scheduler_op scheduler_op;
> struct xen_domctl_setdomainhandle setdomainhandle;
> struct xen_domctl_setdebugging setdebugging;
> struct xen_domctl_irq_permission irq_permission;
> struct xen_domctl_iomem_permission iomem_permission;
> struct xen_domctl_ioport_permission ioport_permission;
> struct xen_domctl_hypercall_init hypercall_init;
> struct xen_domctl_arch_setup arch_setup;
> struct xen_domctl_settimeoffset settimeoffset;
> uint8_t pad[128];
> } u;
> };
>
>
> Which is cruicially different 4 + 4 + 2 + 128 bytes == 138
>
> So the buffer we're mlock()ing is 2 bytes too small for domctl
> hypercalls. This may or may not explan the bugs, but its a
> worthwhile bug fix to try if you have a system where you can
> reliably reproduce the vcpu problems.
>
> The second thing is that we've just discovered a bug in the Fedora Xen
> kernels 2.6.20 wrt to SMP which could cause random bad things to happen
> So if you're using a Fedora 2.6.20 kernel it is also worth seeing if it
> is still a problem with an older Fedora 2.6.19/18 kernel, or with the
> vanilla upstream Xen
>
> 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 -=|
More information about the libvir-list
mailing list