]> xenbits.xensource.com Git - people/aperard/xen-arm.git/commit
x86: allow VCPUOP_register_vcpu_info to work again on PVHVM guests
authorKonrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Wed, 17 Apr 2013 09:35:38 +0000 (11:35 +0200)
committerJan Beulich <jbeulich@suse.com>
Wed, 17 Apr 2013 09:35:38 +0000 (11:35 +0200)
commit63753b3e0dc56efb1acf94fa46f3fee7bc59281c
tree5ac1e9d1e192c546bafb3ec7dc1b83cf2412706f
parent65a11256f294882d6bd1af4af51e42dbbead650d
x86: allow VCPUOP_register_vcpu_info to work again on PVHVM guests

For details on the hypercall please see commit
c58ae69360ccf2495a19bf4ca107e21cf873c75b (VCPUOP_register_vcpu_info) and
the c/s 23143 (git commit 6b063a4a6f44245a727aa04ef76408b2e00af9c7)
(x86: move pv-only members of struct vcpu to struct pv_vcpu)
that introduced the regression.

The current code allows the PVHVM guest to make this hypercall.
But for PVHVM guest it always returns -EINVAL (-22) for Xen 4.2
and above. Xen 4.1 and earlier worked.

The reason is that the check in map_vcpu_info would fail
at:

  if ( v->arch.vcpu_info_mfn != INVALID_MFN )

The reason is that the vcpu_info_mfn for PVHVM guests ends up by
defualt with the value of zero (introduced by c/s 23143).

The code in vcpu_initialise which initialized vcpu_info_mfn to a
valid value (INVALID_MFN), would never be called for PVHVM:

    if ( is_hvm_domain(d) )
    {
        rc = hvm_vcpu_initialise(v);
        goto done;
    }

    v->arch.pv_vcpu.vcpu_info_mfn = INVALID_MFN;

while previously it would be:

     v->arch.vcpu_info_mfn = INVALID_MFN;

[right at the start of the function in Xen 4.1]

This fixes the problem with Linux advertising this error:
register_vcpu_info failed: err=-22

Signed-off-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
xen/arch/x86/domain.c
xen/include/asm-x86/domain.h