• Ankur Arora's avatar
    xen/vcpu: Handle xen_vcpu_setup() failure in hotplug · c9b5d98b
    Ankur Arora authored
    The hypercall VCPUOP_register_vcpu_info can fail. This failure is
    handled by making per_cpu(xen_vcpu, cpu) point to its shared_info
    slot and those without one (cpu >= MAX_VIRT_CPUS) be NULL.
    
    For PVH/PVHVM, this is not enough, because we also need to pull
    these VCPUs out of circulation.
    
    Fix for PVH/PVHVM: on registration failure in the cpuhp prepare
    callback (xen_cpu_up_prepare_hvm()), return an error to the cpuhp
    state-machine so it can fail the CPU init.
    
    Fix for PV: the registration happens before smp_init(), so, in the
    failure case we clamp setup_max_cpus and limit the number of VCPUs
    that smp_init() will bring-up to MAX_VIRT_CPUS.
    This is functionally correct but it makes the code a bit simpler
    if we get rid of this explicit clamping: for VCPUs that don't have
    valid xen_vcpu, fail the CPU init in the cpuhp prepare callback
    (xen_cpu_up_prepare_pv()).
    Reviewed-by: default avatarBoris Ostrovsky <boris.ostrovsky@oracle.com>
    Signed-off-by: default avatarAnkur Arora <ankur.a.arora@oracle.com>
    Signed-off-by: default avatarJuergen Gross <jgross@suse.com>
    c9b5d98b
xen-ops.h 4.52 KB