File 5a4fd893-3-x86-hvm-rename-update_guest_vendor-to-cpuid_policy_changed.patch of Package xen.6649
# Commit 3bea00966eb6680410c89df764d075a8fbacc3cc
# Date 2018-01-05 19:57:07 +0000
# Author Andrew Cooper <andrew.cooper3@citrix.com>
# Committer Andrew Cooper <andrew.cooper3@citrix.com>
x86/hvm: Rename update_guest_vendor() callback to cpuid_policy_changed()
It will shortly be used for more than just changing the vendor.
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Reviewed-by: Wei Liu <wei.liu2@citrix.com>
Reviewed-by: Jan Beulich <jbeulich@suse.com>
--- a/xen/arch/x86/domctl.c
+++ b/xen/arch/x86/domctl.c
@@ -51,6 +51,8 @@ static int gdbsx_guest_mem_io(domid_t do
static void update_domain_cpuid_info(struct domain *d,
const xen_domctl_cpuid_t *ctl)
{
+ bool_t call_policy_changed = 0; /* Avoid for_each_vcpu() unnecessarily */
+
switch ( ctl->input[0] )
{
case 0: {
@@ -69,14 +71,7 @@ static void update_domain_cpuid_info(str
int old_vendor = d->arch.x86_vendor;
d->arch.x86_vendor = get_cpu_vendor(vendor_id.str, gcv_guest);
-
- if ( is_hvm_domain(d) && (d->arch.x86_vendor != old_vendor) )
- {
- struct vcpu *v;
-
- for_each_vcpu( d, v )
- hvm_update_guest_vendor(v);
- }
+ call_policy_changed = (d->arch.x86_vendor != old_vendor);
break;
}
@@ -235,6 +230,14 @@ static void update_domain_cpuid_info(str
}
break;
}
+
+ if ( is_hvm_domain(d) && call_policy_changed )
+ {
+ struct vcpu *v;
+
+ for_each_vcpu( d, v )
+ hvm_cpuid_policy_changed(v);
+ }
}
#define MAX_IOPORTS 0x10000
--- a/xen/arch/x86/hvm/hvm.c
+++ b/xen/arch/x86/hvm/hvm.c
@@ -1565,7 +1565,7 @@ int hvm_vcpu_initialise(struct vcpu *v)
hvm_set_guest_tsc(v, 0);
}
- hvm_update_guest_vendor(v);
+ hvm_cpuid_policy_changed(v);
return 0;
--- a/xen/arch/x86/hvm/svm/svm.c
+++ b/xen/arch/x86/hvm/svm/svm.c
@@ -610,7 +610,7 @@ static void svm_update_guest_efer(struct
vmcb_set_efer(vmcb, new_efer);
}
-static void svm_update_guest_vendor(struct vcpu *v)
+static void svm_cpuid_policy_changed(struct vcpu *v)
{
struct arch_svm_struct *arch_svm = &v->arch.hvm_svm;
struct vmcb_struct *vmcb = arch_svm->vmcb;
@@ -2263,7 +2263,7 @@ static struct hvm_function_table __initd
.get_shadow_gs_base = svm_get_shadow_gs_base,
.update_guest_cr = svm_update_guest_cr,
.update_guest_efer = svm_update_guest_efer,
- .update_guest_vendor = svm_update_guest_vendor,
+ .cpuid_policy_changed = svm_cpuid_policy_changed,
.set_guest_pat = svm_set_guest_pat,
.get_guest_pat = svm_get_guest_pat,
.set_tsc_offset = svm_set_tsc_offset,
--- a/xen/arch/x86/hvm/vmx/vmx.c
+++ b/xen/arch/x86/hvm/vmx/vmx.c
@@ -74,7 +74,6 @@ static void vmx_free_vlapic_mapping(stru
static void vmx_install_vlapic_mapping(struct vcpu *v);
static void vmx_update_guest_cr(struct vcpu *v, unsigned int cr);
static void vmx_update_guest_efer(struct vcpu *v);
-static void vmx_update_guest_vendor(struct vcpu *v);
static void vmx_cpuid_intercept(
unsigned int *eax, unsigned int *ebx,
unsigned int *ecx, unsigned int *edx);
@@ -543,7 +542,7 @@ void vmx_update_exception_bitmap(struct
__vmwrite(EXCEPTION_BITMAP, bitmap);
}
-static void vmx_update_guest_vendor(struct vcpu *v)
+static void vmx_cpuid_policy_changed(struct vcpu *v)
{
if ( opt_hvm_fep ||
(v->domain->arch.x86_vendor != boot_cpu_data.x86_vendor) )
@@ -2184,7 +2183,7 @@ static struct hvm_function_table __initd
.update_host_cr3 = vmx_update_host_cr3,
.update_guest_cr = vmx_update_guest_cr,
.update_guest_efer = vmx_update_guest_efer,
- .update_guest_vendor = vmx_update_guest_vendor,
+ .cpuid_policy_changed = vmx_cpuid_policy_changed,
.set_guest_pat = vmx_set_guest_pat,
.get_guest_pat = vmx_get_guest_pat,
.set_tsc_offset = vmx_set_tsc_offset,
--- a/xen/include/asm-x86/hvm/hvm.h
+++ b/xen/include/asm-x86/hvm/hvm.h
@@ -142,7 +142,7 @@ struct hvm_function_table {
void (*update_guest_cr)(struct vcpu *v, unsigned int cr);
void (*update_guest_efer)(struct vcpu *v);
- void (*update_guest_vendor)(struct vcpu *v);
+ void (*cpuid_policy_changed)(struct vcpu *v);
int (*get_guest_pat)(struct vcpu *v, u64 *);
int (*set_guest_pat)(struct vcpu *v, u64);
@@ -345,9 +345,9 @@ static inline void hvm_update_guest_efer
hvm_funcs.update_guest_efer(v);
}
-static inline void hvm_update_guest_vendor(struct vcpu *v)
+static inline void hvm_cpuid_policy_changed(struct vcpu *v)
{
- hvm_funcs.update_guest_vendor(v);
+ hvm_funcs.cpuid_policy_changed(v);
}
/*