[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v7 03/14] x86: detect and initialize Intel CAT feature
On Mon, May 18, 2015 at 02:33:51PM +0100, Jan Beulich wrote: > >>> On 08.05.15 at 10:56, <chao.p.peng@xxxxxxxxxxxxxxx> wrote: > > --- a/xen/arch/x86/psr.c > > +++ b/xen/arch/x86/psr.c > > @@ -19,14 +19,26 @@ > > #include <asm/psr.h> > > > > #define PSR_CMT (1<<0) > > +#define PSR_CAT (1<<1) > > + > > +struct psr_cat_socket_info { > > + unsigned int cbm_len; > > + unsigned int cos_max; > > +}; > > > > struct psr_assoc { > > uint64_t val; > > }; > > > > struct psr_cmt *__read_mostly psr_cmt; > > + > > +static unsigned long *__read_mostly cat_socket_init_bitmap; > > +static unsigned long *__read_mostly cat_socket_enable_bitmap; > > Didn't we agree to fold these two into one? Apart from that the > _bitmap name tag doesn't seem very useful... Looks like this? static unsigned long *__read_mostly cat_socket_init, *__read_mostly cat_socket_enable; > > + cpuid_count(PSR_CPUID_LEVEL_CAT, 0, &eax, &ebx, &ecx, &edx); > > + if ( ebx & PSR_RESOURCE_TYPE_L3 ) > > + { > > + cpuid_count(PSR_CPUID_LEVEL_CAT, 1, &eax, &ebx, &ecx, &edx); > > + info = cat_socket_info + socket; > > + info->cbm_len = (eax & 0x1f) + 1; > > + info->cos_max = min(opt_cos_max, edx & 0xffff); > > > Is opt_cos_max being zero (or even one) going to result in a useful / > working environment? I.e. shouldn't you rather disable CAT in that > case? OK, I will disable CAT in init_psr_cat() for this case. > > > +static void cat_cpu_fini(void) > > +{ > > + unsigned int cpu = smp_processor_id(); > > + unsigned int socket = cpu_to_socket(cpu); > > This is the only use of "cpu", i.e. the variable is pretty pointless. > > > static int cpu_callback( > > struct notifier_block *nfb, unsigned long action, void *hcpu) > > { > > if ( action == CPU_STARTING ) > > psr_cpu_init(); > > + else if ( action == CPU_DYING ) > > + psr_cpu_fini(); > > Are these the right notifiers for doing things involving memory > allocation / freeing? psr_cpu_fini() does not really have memory allocation/freeing but psr_cpu_init() does have. While one thing to clarify is: psr_cpu_init() will not propagate the error even when the memory allocation fails(instead it disables the CAT on the socket). If there is still problem then perhaps I need change CPU_STARTING back to CPU_ONLINE and make on_selected_cpus() call on target cpu. Chao _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |