[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v2] x86: amend 'n' debug-key output with SMI count
On 16.02.2024 10:11, Roger Pau Monné wrote: > On Wed, Feb 14, 2024 at 11:15:51AM +0100, Jan Beulich wrote: >> --- a/xen/arch/x86/cpu/common.c >> +++ b/xen/arch/x86/cpu/common.c >> @@ -407,9 +407,15 @@ void __init early_cpu_init(bool verbose) >> paddr_bits -= (ebx >> 6) & 0x3f; >> } >> >> - if (!(c->x86_vendor & (X86_VENDOR_AMD | X86_VENDOR_HYGON))) >> + if (!(c->x86_vendor & (X86_VENDOR_AMD | X86_VENDOR_HYGON))) { >> + uint64_t smi_count; >> + >> park_offline_cpus = opt_mce; >> >> + if (!verbose && !rdmsr_safe(MSR_SMI_COUNT, smi_count)) >> + setup_force_cpu_cap(X86_FEATURE_SMI_COUNT); > > Why make it dependent on !verbose? The call with !verbose is tied to > part of the ucode loading being half-functional (for example > MCU_CONTROL_DIS_MCU_LOAD not being set) but I don't see that as a > signal that SMI count shouldn't be used. > > does it need to be part of the early cpu initialization instead of > being in the (later) Intel specific init code part of the > identify_cpu()? Yes, the condition was inverted. It could likely also be dropped altogether; not sure which one's better: On one hand avoiding multiple setup_force_cpu_cap() seems desirable (albeit not strictly necessary), while otoh the code would be simpler without. >> --- a/xen/arch/x86/nmi.c >> +++ b/xen/arch/x86/nmi.c >> @@ -585,15 +585,34 @@ static void cf_check do_nmi_trigger(unsi >> self_nmi(); >> } >> >> +static DEFINE_PER_CPU(unsigned int, smi_count); >> + >> +static void cf_check read_smi_count(void *unused) >> +{ >> + unsigned int dummy; >> + >> + rdmsr(MSR_SMI_COUNT, this_cpu(smi_count), dummy); >> +} >> + >> static void cf_check do_nmi_stats(unsigned char key) >> { >> const struct vcpu *v; >> unsigned int cpu; >> bool pend, mask; >> >> - printk("CPU\tNMI\n"); >> + printk("CPU\tNMI%s\n", boot_cpu_has(X86_FEATURE_SMI_COUNT) ? "\tSMI" : >> ""); >> + >> + if ( boot_cpu_has(X86_FEATURE_SMI_COUNT) ) >> + on_each_cpu(read_smi_count, NULL, 1); >> + >> for_each_online_cpu ( cpu ) >> - printk("%3u\t%3u\n", cpu, per_cpu(nmi_count, cpu)); >> + { >> + printk("%3u\t%3u", cpu, per_cpu(nmi_count, cpu)); >> + if ( boot_cpu_has(X86_FEATURE_SMI_COUNT) ) >> + printk("\t%3u\n", per_cpu(smi_count, cpu)); >> + else >> + printk("\n"); >> + } >> >> if ( !hardware_domain || !(v = domain_vcpu(hardware_domain, 0)) ) >> return; > > Could you also amend the debug-key help text to mention SMI? Hmm, I had considered that and decided against. I'm uncertain, nevertheless, so could be talked into amending that help text. Just that I can't make it "NMI and SMI statistics" as whether SMI data is available is conditional. Yet "NMI (and maybe SMI) statistics" looks a little clumsy to me ... Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |