>> 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.