Bug 871265
Summary: | lahf_lm flag is not recognized by guest kernel | ||
---|---|---|---|
Product: | Red Hat Enterprise Linux 6 | Reporter: | Suqin Huang <shuang> |
Component: | qemu-kvm | Assignee: | Eduardo Habkost <ehabkost> |
Status: | CLOSED WONTFIX | QA Contact: | Virtualization Bugs <virt-bugs> |
Severity: | unspecified | Docs Contact: | |
Priority: | unspecified | ||
Version: | 6.4 | CC: | acathrow, areis, bsarathy, dyasny, mkenneth, virt-maint |
Target Milestone: | rc | ||
Target Release: | --- | ||
Hardware: | Unspecified | ||
OS: | Unspecified | ||
Whiteboard: | |||
Fixed In Version: | Doc Type: | Known Issue | |
Doc Text: |
AMD Opteron G1, G2 or G3 CPU models on qemu-kvm use the family and models values as follows: family=15 and model=6. If these values are larger than 20, the lahfm_lm CPU feature is ignored by Linux guests, even when the feature is enabled. To work around this problem, use a different CPU model, for example AMD Opteron G4.
|
Story Points: | --- |
Clone Of: | Environment: | ||
Last Closed: | 2012-11-20 13:47:28 UTC | Type: | Bug |
Regression: | --- | Mount Type: | --- |
Documentation: | --- | CRM: | |
Verified Versions: | Category: | --- | |
oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
Cloudforms Team: | --- | Target Upstream Version: | |
Embargoed: |
Description
Suqin Huang
2012-10-30 05:29:33 UTC
The bit is set on the CPUID info: eax in: 0x80000001, eax = 00000f61 ebx = 00000000 ecx = 000000e1 edx = 2193fbfd (it's bit 0 on CPUID[0x80000001].ECX) The guest chooses to ignore it because of the low model value. This is the guest-side kernel code: /* On C+ stepping K8 rep microcode works well for copy/memset */ if (c->x86 == 0xf) { u32 level; level = cpuid_eax(1); if ((level >= 0x0f48 && level < 0x0f50) || level >= 0x0f58) set_cpu_cap(c, X86_FEATURE_REP_GOOD); /* * Some BIOSes incorrectly force this feature, but only K8 * revision D (model = 0x14) and later actually support it. * (AMD Erratum #110, docId: 25759). */ if (c->x86_model < 0x14 && cpu_has(c, X86_FEATURE_LAHF_LM)) { u64 val; clear_cpu_cap(c, X86_FEATURE_LAHF_LM); if (!rdmsrl_amd_safe(0xc001100d, &val)) { val &= ~(1ULL << 32); wrmsrl_amd_safe(0xc001100d, val); } } } The only way to fix it would be to update the Opteron_G* models to use a higher family/model value instead of family=15,model=6. |