[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3 15/28] x86/cpu: Sysctl and common infrastructure for levelling context switching
>>> On 15.03.16 at 16:35, <andrew.cooper3@xxxxxxxxxx> wrote: > --- a/xen/arch/x86/cpu/common.c > +++ b/xen/arch/x86/cpu/common.c > @@ -36,6 +36,12 @@ integer_param("cpuid_mask_ext_ecx", > opt_cpuid_mask_ext_ecx); > unsigned int opt_cpuid_mask_ext_edx = ~0u; > integer_param("cpuid_mask_ext_edx", opt_cpuid_mask_ext_edx); > > +unsigned int __initdata expected_levelling_cap; Especially for an __initdata item to be non-static, its use(s) should be visible in a patch adding such a variable. > --- a/xen/include/asm-x86/processor.h > +++ b/xen/include/asm-x86/processor.h > @@ -618,6 +618,37 @@ void microcode_set_module(unsigned int); > int microcode_update(XEN_GUEST_HANDLE_PARAM(const_void), unsigned long len); > int microcode_resume_cpu(unsigned int cpu); > > +#define LCAP_faulting XEN_SYSCTL_CPU_LEVELCAP_faulting > +#define LCAP_1cd (XEN_SYSCTL_CPU_LEVELCAP_ecx | \ > + XEN_SYSCTL_CPU_LEVELCAP_edx) > +#define LCAP_e1cd (XEN_SYSCTL_CPU_LEVELCAP_extd_ecx | \ > + XEN_SYSCTL_CPU_LEVELCAP_extd_edx) > +#define LCAP_Da1 XEN_SYSCTL_CPU_LEVELCAP_xsave_eax > +#define LCAP_6c XEN_SYSCTL_CPU_LEVELCAP_themal_ecx > +#define LCAP_7ab0 (XEN_SYSCTL_CPU_LEVELCAP_l7s0_eax | \ > + XEN_SYSCTL_CPU_LEVELCAP_17s0_ebx) > + > +/* > + * Expected levelling capabilities (given cpuid vendor/family information), > + * and levelling capabilities actually available (given MSR probing). > + */ > +extern unsigned int expected_levelling_cap, levelling_caps; > + > +struct cpuidmasks > +{ > + uint64_t _1cd; > + uint64_t e1cd; > + uint64_t Da1; > + uint64_t _6c; > + uint64_t _7ab0; > +}; > + > +/* Per CPU shadows of masking MSR values, for lazy context switching. */ > +DECLARE_PER_CPU(struct cpuidmasks, cpuidmasks); > + > +/* Default masking MSR values, calculated at boot. */ > +extern struct cpuidmasks cpuidmask_defaults; Would much/all of this not better go into cpuid.h? > --- a/xen/include/public/sysctl.h > +++ b/xen/include/public/sysctl.h > @@ -766,6 +766,27 @@ struct xen_sysctl_tmem_op { > typedef struct xen_sysctl_tmem_op xen_sysctl_tmem_op_t; > DEFINE_XEN_GUEST_HANDLE(xen_sysctl_tmem_op_t); > > +/* > + * XEN_SYSCTL_get_cpu_levelling_caps (x86 specific) > + * > + * Return hardware capabilities concerning masking or faulting of the cpuid > + * instruction for PV guests. > + */ > +struct xen_sysctl_cpu_levelling_caps { > +#define XEN_SYSCTL_CPU_LEVELCAP_faulting (1ul << 0) /* CPUID faulting > */ > +#define XEN_SYSCTL_CPU_LEVELCAP_ecx (1ul << 1) /* 0x00000001.ecx > */ > +#define XEN_SYSCTL_CPU_LEVELCAP_edx (1ul << 2) /* 0x00000001.edx > */ > +#define XEN_SYSCTL_CPU_LEVELCAP_extd_ecx (1ul << 3) /* 0x80000001.ecx > */ > +#define XEN_SYSCTL_CPU_LEVELCAP_extd_edx (1ul << 4) /* 0x80000001.edx > */ > +#define XEN_SYSCTL_CPU_LEVELCAP_xsave_eax (1ul << 5) /* 0x0000000D:1.eax > */ > +#define XEN_SYSCTL_CPU_LEVELCAP_themal_ecx (1ul << 6) /* 0x00000006.ecx > */ thermal > +#define XEN_SYSCTL_CPU_LEVELCAP_l7s0_eax (1ul << 7) /* 0x00000007:0.eax > */ > +#define XEN_SYSCTL_CPU_LEVELCAP_17s0_ebx (1ul << 8) /* 0x00000007:0.ebx > */ There appears to be a 1 here when I think an l is meant. Jan _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |