Message ID | 20090618173852.GT12816@random.random (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 06/18/2009 08:38 PM, Andrea Arcangeli wrote: > From: Andrea Arcangeli<aarcange@redhat.com> > > model=2 is not existent when vendor is intel and an errata of P6 says > that any model<= 2 when family is 6 lack sap feature, so windows and > linux 32bit guests disable sap in software and slowdown for no good > reason when running inside kvm on intel CPU. > > Fix is to set model = 3 so it'll be the duron cpu when kvm runs on amd bare > metal (not anymore athlon but userland doesn't see the difference) and it'll be > PII that has sysenter functional like all cpus that run KVM have too when on > intel bare metal. > > Patch will follow, workaround without this fix is -cpu qemu64,model=3. > > There is a bug in skype that it checks if the sep feature is set to > run sysenter on intel chip inside its binary without passing through > ntdll, without verifying the model was<= 2 like windows does, so > windows forbids sysenter but skype calls it anyway. This is skype bug > and it would trigger on real P6 hardware too (but nobody tests skype > on P6). qemu64,-sep fixed skype. But because every time we have an > intel cpu running kvm, we also have sysenter functioning, we boots the > model to 3 so windows 32bit (and linux32bit) gets a boost with > sysenter too. > > Please post to qemu-devel since it affects upstream too. > - .model = 2, > + /* AMD Duron || PII Intel with sep capbility - P6 has no sep */ > + .model = 3, > But detab it first...
diff --git a/target-i386/helper.c b/target-i386/helper.c index 6dc0111..82aef93 100644 --- a/target-i386/helper.c +++ b/target-i386/helper.c @@ -126,7 +126,8 @@ static x86_def_t x86_defs[] = { .vendor2 = CPUID_VENDOR_AMD_2, .vendor3 = CPUID_VENDOR_AMD_3, .family = 6, - .model = 2, + /* AMD Duron || PII Intel with sep capbility - P6 has no sep */ + .model = 3, .stepping = 3, .features = PPRO_FEATURES | /* these features are needed for Win64 and aren't fully implemented */