|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 18/30] x86/cpu: Rework AMD masking MSR setup
On 17/02/16 07:40, Jan Beulich wrote:
>
>> + if ((rdmsr_amd_safe(msr, &lo, &hi) == 0) &&
>> + (wrmsr_amd_safe(msr, lo, hi) == 0))
>> + levelling_caps |= caps;
>> +
>> + *msr_val = ((uint64_t)hi << 32) | lo;
>> +}
> Why can't this function, currently returning void, simply return the
> value read?
Hmm - it can. This current layout is an artefact of several changes in
design.
>> +static void __init noinline amd_init_levelling(void)
>> {
>> - static unsigned int feat_ecx, feat_edx;
>> - static unsigned int extfeat_ecx, extfeat_edx;
>> - static unsigned int l7s0_eax, l7s0_ebx;
>> - static unsigned int thermal_ecx;
>> - static bool_t skip_feat, skip_extfeat;
>> - static bool_t skip_l7s0_eax_ebx, skip_thermal_ecx;
>> - static enum { not_parsed, no_mask, set_mask } status;
>> - unsigned int eax, ebx, ecx, edx;
>> -
>> - if (status == no_mask)
>> - return;
>> + const struct cpuidmask *m = NULL;
>>
>> - if (status == set_mask)
>> - goto setmask;
>> + probe_masking_msrs();
>>
>> - ASSERT((status == not_parsed) && (c == &boot_cpu_data));
>> - status = no_mask;
>> + if (*opt_famrev != '\0') {
>> + m = get_cpuidmask(opt_famrev);
>>
>> - /* Fam11 doesn't support masking at all. */
>> - if (c->x86 == 0x11)
>> - return;
>> + if (!m)
>> + printk("Invalid processor string: %s\n", opt_famrev);
>> + }
>>
>> - if (~(opt_cpuid_mask_ecx & opt_cpuid_mask_edx &
>> - opt_cpuid_mask_ext_ecx & opt_cpuid_mask_ext_edx &
>> - opt_cpuid_mask_l7s0_eax & opt_cpuid_mask_l7s0_ebx &
>> - opt_cpuid_mask_thermal_ecx)) {
>> - feat_ecx = opt_cpuid_mask_ecx;
>> - feat_edx = opt_cpuid_mask_edx;
>> - extfeat_ecx = opt_cpuid_mask_ext_ecx;
>> - extfeat_edx = opt_cpuid_mask_ext_edx;
>> - l7s0_eax = opt_cpuid_mask_l7s0_eax;
>> - l7s0_ebx = opt_cpuid_mask_l7s0_ebx;
>> - thermal_ecx = opt_cpuid_mask_thermal_ecx;
>> - } else if (*opt_famrev == '\0') {
>> - return;
>> - } else {
>> - const struct cpuidmask *m = get_cpuidmask(opt_famrev);
>> + if ((levelling_caps & LCAP_1cd) == LCAP_1cd) {
>> + uint32_t ecx, edx, tmp;
>>
>> - if (!m) {
>> - printk("Invalid processor string: %s\n", opt_famrev);
>> - printk("CPUID will not be masked\n");
>> - return;
>> + cpuid(0x00000001, &tmp, &tmp, &ecx, &edx);
> Didn't you collect raw CPUID output already?
This is now c_early_init(), which is ahead of populating c->x86_capability
~Andrew
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |