[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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.