On Sun, Oct 24, 2010 at 03:38:46PM +0200, Avi Kivity wrote: > This allows Linux to mask cpuid bits if, for example, nx is enabled on only > some cpus. > > Signed-off-by: Avi Kivity <avi@xxxxxxxxxx> > --- > arch/x86/kvm/x86.c | 9 +++++++++ > 1 files changed, 9 insertions(+), 0 deletions(-) > > diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c > index 48ce015..54fda7e 100644 > --- a/arch/x86/kvm/x86.c > +++ b/arch/x86/kvm/x86.c > @@ -2229,6 +2229,11 @@ out: > return r; > } > > +static void cpuid_mask(u32 *word, int wordnum) > +{ > + *word &= boot_cpu_data.x86_capability[wordnum]; > +} > + > static void do_cpuid_1_ent(struct kvm_cpuid_entry2 *entry, u32 function, > u32 index) > { > @@ -2303,7 +2308,9 @@ static void do_cpuid_ent(struct kvm_cpuid_entry2 *entry, u32 function, > break; > case 1: > entry->edx &= kvm_supported_word0_x86_features; > + cpuid_mask(&entry->edx, 0); > entry->ecx &= kvm_supported_word4_x86_features; > + cpuid_mask(&entry->edx, 4); ecx? > /* we support x2apic emulation even if host does not support > * it since we emulate x2apic in software */ > entry->ecx |= F(X2APIC); > @@ -2394,7 +2401,9 @@ static void do_cpuid_ent(struct kvm_cpuid_entry2 *entry, u32 function, > break; > case 0x80000001: > entry->edx &= kvm_supported_word1_x86_features; > + cpuid_mask(&entry->edx, 1); > entry->ecx &= kvm_supported_word6_x86_features; > + cpuid_mask(&entry->edx, 6); ecx? -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html