[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: xl/xm save -c fails - set_vcpucontext EOPNOTSUPP (was Re: [Xen-devel] xl save -c issues with Windows 7 Ultimate)



On Tue, 2011-05-10 at 16:50 +0100, Shriram Rajagopalan wrote:
> On Tue, May 10, 2011 at 10:02 AM, Jan Beulich <JBeulich@xxxxxxxxxx>
> wrote:
>         >>> On 10.05.11 at 16:52, Shriram Rajagopalan
>         <rshriram@xxxxxxxxx> wrote:
>         > On Tue, May 10, 2011 at 3:41 AM, Ian Campbell
>         <Ian.Campbell@xxxxxxxxxx>wrote:
>         
>         
>         >> The most plausible looking EOPNOTSUPP from that code is in
>         >> xen/arch/x86/domain.c:arch_set_info_guest() but that is on
>         a PV only
>         >> path.
>         >>
>         >> And that rings with the pv guests I am using. It makes
>         perfect sense,
>         > looking
>         > at that function and especially at the code that returns
>         EOPNOTSUPP (the
>         > only
>         > place in the entire file).
>         >    else
>         >     {
>         >         bool_t fail = v->arch.pv_vcpu.ctrlreg[3] !=
>         c(ctrlreg[3]);
>         >
>         > #ifdef CONFIG_X86_64
>         >         fail |= v->arch.pv_vcpu.ctrlreg[1] != c(ctrlreg[1]);
>         > #endif
>         >
>         >         for ( i = 0; i <
>         ARRAY_SIZE(v->arch.pv_vcpu.gdt_frames); ++i )
>         >             fail |= v->arch.pv_vcpu.gdt_frames[i] !=
>         c(gdt_frames[i]);
>         >         fail |= v->arch.pv_vcpu.gdt_ents != c(gdt_ents);
>         >
>         >         fail |= v->arch.pv_vcpu.ldt_base != c(ldt_base);
>         >         fail |= v->arch.pv_vcpu.ldt_ents != c(ldt_ents);
>         >
>         >         if ( fail )
>         >            return -EOPNOTSUPP;
>         >     }
>         >
>         > This change was introduced by c/s
>         > changeset:   23142:f5e8d152a565
>         > user:        Jan Beulich <jbeulich@xxxxxxxxxx>
>         > date:        Tue Apr 05 13:01:25 2011 +0100
>         > x86: split struct vcpu
>         >
>         > I think I am missing something really obvious in this piece
>         of code. The
>         > xc_domain_resume code tries to modify the return value of
>         shutdown hypercall
>         > (i.e eax register is set to 1) and this code doesnt seem to
>         check those
>         > registers.
>         
>         
>         Correct - the code here checks only for values where the logic
>         needed to support changing the on an already initialized vCPU
>         isn't
>         implemented. Previously, actual vCPU state and what was
>         tracked
>         in struct vcpu could get out of sync in this case, potentially
>         confusing things further down (including possible security
>         issues).
>         
>         You'll want to figure out which part(s) actually differ, and
>         why.
>         Only then we'll be able to tell whether mentioned c/s
>         introduced
>         false positives.
>         
> Bit confused. If I understand correctly, this piece of code checks new
> values 
> of certain registers against old ones, for an already initialized
> VCPU. And AFAIT,
> it is checking the gdts, ldts & control registers. The
> xc_domain_resume code just
> changes one general purpose register eax. basically,
> 
>  get_vcpucontext()
>  set_field(eax, 1) //to indicate SUSPEND_CANCEL
>  set_vcpucontext()
> 
> I dont understand what you mean by "which parts actually differ &
> why".

Either get_vcpucontext is returning something "odd" or set_vcpucontext
is being overzealous in what it checks (the "false positives" Jan refers
too)

> And just a trivial question:
> is the hypervisor binary always compiled to a 32-bit elf? somehow, the
> symbols file xen-syms-* is getting compiled to 64 bit ELF binary while
> the xen binary is getting compiled to 32-bit binary. 

The hypervisor binary (32 or 64 bit) is always wrapped up as a 32 bit
ELF, see the use of xen/arch/x86/boot/mkelf32.c. Something to do with
keeping a bootloader happy, I think...

Ian.



_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.