# Commit 33b23e5ab319a6bf9bfd38c4d9268fa6d9d072c6 # Date 2016-09-01 11:41:05 +0100 # Author Andrew Cooper # Committer Andrew Cooper x86/levelling: Pass a vcpu rather than a domain to ctxt_switch_levelling() A subsequent change needs to special-case OSXSAVE handling, which is per-vcpu rather than per-domain. No functional change. Signed-off-by: Andrew Cooper Reviewed-by: Jan Beulich --- a/xen/arch/x86/cpu/amd.c +++ b/xen/arch/x86/cpu/amd.c @@ -203,9 +203,10 @@ static void __init noinline probe_maskin * used to context switch to the default host state (by the cpu bringup-code, * crash path, etc). */ -static void amd_ctxt_switch_levelling(const struct domain *nextd) +static void amd_ctxt_switch_levelling(const struct vcpu *next) { struct cpuidmasks *these_masks = &this_cpu(cpuidmasks); + const struct domain *nextd = next ? next->domain : NULL; const struct cpuidmasks *masks = (nextd && is_pv_domain(nextd) && nextd->arch.pv_domain.cpuidmasks) ? nextd->arch.pv_domain.cpuidmasks : &cpuidmask_defaults; --- a/xen/arch/x86/cpu/common.c +++ b/xen/arch/x86/cpu/common.c @@ -90,11 +90,11 @@ static const struct cpu_dev default_cpu }; static const struct cpu_dev *this_cpu = &default_cpu; -static void default_ctxt_switch_levelling(const struct domain *nextd) +static void default_ctxt_switch_levelling(const struct vcpu *next) { /* Nop */ } -void (* __read_mostly ctxt_switch_levelling)(const struct domain *nextd) = +void (* __read_mostly ctxt_switch_levelling)(const struct vcpu *next) = default_ctxt_switch_levelling; bool_t opt_cpu_info; --- a/xen/arch/x86/cpu/intel.c +++ b/xen/arch/x86/cpu/intel.c @@ -151,9 +151,10 @@ static void __init probe_masking_msrs(vo * used to context switch to the default host state (by the cpu bringup-code, * crash path, etc). */ -static void intel_ctxt_switch_levelling(const struct domain *nextd) +static void intel_ctxt_switch_levelling(const struct vcpu *next) { struct cpuidmasks *these_masks = &this_cpu(cpuidmasks); + const struct domain *nextd = next ? next->domain : NULL; const struct cpuidmasks *masks; if (cpu_has_cpuid_faulting) { --- a/xen/arch/x86/domain.c +++ b/xen/arch/x86/domain.c @@ -2107,7 +2107,7 @@ void context_switch(struct vcpu *prev, s load_segments(next); } - ctxt_switch_levelling(nextd); + ctxt_switch_levelling(next); } context_saved(prev); --- a/xen/include/asm-x86/processor.h +++ b/xen/include/asm-x86/processor.h @@ -211,7 +211,7 @@ extern struct cpuinfo_x86 boot_cpu_data; extern struct cpuinfo_x86 cpu_data[]; #define current_cpu_data cpu_data[smp_processor_id()] -extern void (*ctxt_switch_levelling)(const struct domain *nextd); +extern void (*ctxt_switch_levelling)(const struct vcpu *next); extern u64 host_pat; extern bool_t opt_cpu_info;