Shut up unhandled MSR warnings
Borislav Petkov
maintainerHey Paolo,
do we apply stuff like that below?
When booting guests all the time here, dmesg gets filled up with those "unhandled rdmsr" useless warnings. The patch below shuts them up.
The only problem is that the IC CFG MSR has those fields defined starting from F15h and I don't see a way to check the family/model/stepping of the guest CPU in kvm. Is there?
Thanks.
---
arch/x86/include/asm/msr-index.h +1 -0
@@ -315,6 +315,7 @@#define MSR_F15H_PERF_CTR 0xc0010201#define MSR_F15H_NB_PERF_CTL 0xc0010240#define MSR_F15H_NB_PERF_CTR 0xc0010241 +#define MSR_F15H_IC_CFG 0xc0011021/* Fam 10h MSRs */ #define MSR_FAM10H_MMIO_CONF_BASE 0xc0010058
arch/x86/kernel/cpu/amd.c +2 -2
@@ -665,9 +665,9 @@ static void init_amd_bd(struct cpuinfo_x86 *c)* Disable it on the affected CPUs. */ if ((c->x86_model >=0x02 ) && (c->x86_model <0x20 )) { -if (!rdmsrl_safe (0xc0011021 , &value) && !(value &0x1E )) { +if (!rdmsrl_safe (MSR_F15H_IC_CFG , &value) && !(value &0x1E )) { value |=0x1E ; -wrmsrl_safe (0xc0011021 , value); +wrmsrl_safe (MSR_F15H_IC_CFG , value); } } }
arch/x86/kvm/svm.c +3 -0
@@ -3141,6 +3141,9 @@ static int svm_get_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info)case MSR_IA32_UCODE_REV : msr_info->data =0x01000065 ;break ; +case MSR_F15H_IC_CFG : + msr_info->data =0x1E ; +break ;default :return kvm_get_msr_common (vcpu, msr_info); }
Signature · 4 lines
Regards/Gruss,
Boris.
ECO tip #101: Trim your mails when you reply.Paolo Bonzini
maintainerQuoted 3 lines · Borislav Petkov
Hey Paolo,
do we apply stuff like that below?
If we really need to, we do.
Quoted 6 lines
When booting guests all the time here, dmesg gets filled up with those "unhandled rdmsr" useless warnings. The patch below shuts them up.
The only problem is that the IC CFG MSR has those fields defined starting from F15h and I don't see a way to check the family/model/stepping of the guest CPU in kvm. Is there?
Yes, see guest_cpuid_has_* for an example of reading the CPUID values.
But if it's defined for _all_ models starting at family 21, we can just do it unconditionally.
Paolo
Borislav Petkov
maintainerQuoted 4 lines · Paolo Bonzini
Yes, see guest_cpuid_has_* for an example of reading the CPUID values.
But if it's defined for _all_ models starting at family 21, we can just do it unconditionally.
The thing is, those bits are Reserved again on the next family 22. Lemme take a look at guest_cpuid_has_* and see how ugly it gets.
Thanks.
Signature · 4 lines
Regards/Gruss,
Boris.
ECO tip #101: Trim your mails when you reply.Borislav Petkov
maintainerQuoted 8 lines · Borislav Petkov
Quoted 4 lines · Paolo Bonzini
Yes, see guest_cpuid_has_* for an example of reading the CPUID values.
But if it's defined for _all_ models starting at family 21, we can just do it unconditionally.
The thing is, those bits are Reserved again on the next family 22. Lemme take a look at guest_cpuid_has_* and see how ugly it gets.
Ok, I see there's guest_cpuid_is_amd() but I'd need also family and model.
How about adding also
guest_cpuid_family(), guest_cpuid_model(), guest_cpuid_stepping()? Those could be quite useful in other contexts maybe.
Or, I can do a single function which simply returns CPUID_1_EAX of the guest vcpu and caller can then pick stuff apart...
Thoughts?
Signature · 4 lines
Regards/Gruss,
Boris.
ECO tip #101: Trim your mails when you reply.Paolo Bonzini
maintainerQuoted 8 lines · Borislav Petkov
Quoted 7 lines
Quoted 7 lines
Quoted 4 lines
Quoted 4 lines
Yes, see guest_cpuid_has_* for an example of reading the CPUID values.
But if it's defined for _all_ models starting at family 21, we can just do it unconditionally.
The thing is, those bits are Reserved again on the next family 22. Lemme take a look at guest_cpuid_has_* and see how ugly it gets.
Quoted 6 lines
Ok, I see there's
guest_cpuid_is_amd()but I'd need also family and model.How about adding also
guest_cpuid_family(),guest_cpuid_model(),guest_cpuid_stepping()? Those could be quite useful in other contexts maybe.
Sure, that's what I meant by "for an example". :)
Paolo