[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Xen-devel] [PATCH v12 13/23] x86: refactor psr: CDP: implement CPU init flow.



On 17-06-30 00:40:35, Jan Beulich wrote:
> >>> Yi Sun <yi.y.sun@xxxxxxxxxxxxxxx> 06/14/17 3:26 AM >>>
> > @@ -253,6 +271,26 @@ static void cat_init_feature(const struct cpuid_leaf 
> > *regs,
> >  
> >          break;
> >  
> > +    case PSR_SOCKET_L3_CDP:
> > +    {
> > +        uint64_t val;
> > +
> > +        /* Cut half of cos_max when CDP is enabled. */
> > +        feat->cos_max >>= 1;
> 
> I'm afraid this is off by one in the unusual but possible case of cos_max
> being an even number.
> 
This accords to spec:
"For CDP operations, COS_MAX_CDP is equal to (CPUID.(EAX=10H, 
ECX=1):EDX.COS_MAX_CAT >>1)."

HW should make sure it is even number.

> > +        wrmsrl(MSR_IA32_PSR_L3_MASK(0), cat_default_val(feat->cbm_len));
> > +        wrmsrl(MSR_IA32_PSR_L3_MASK(1), cat_default_val(feat->cbm_len));
> > +        rdmsrl(MSR_IA32_PSR_L3_QOS_CFG, val);
> > +        wrmsrl(MSR_IA32_PSR_L3_QOS_CFG,
> > +               val | (1ull << PSR_L3_QOS_CDP_ENABLE_BIT));
> > +
> > +        /* cos=0 is reserved as default cbm(all bits within cbm_len are 
> > 1). */
> 
> Along the lines of a comment to an earlier patch, please add a blank ahead of
> the opeing paren.
> 
Got it.

> > +        get_cdp_code(feat, 0) = cat_default_val(feat->cbm_len);
> > +        get_cdp_data(feat, 0) = cat_default_val(feat->cbm_len);
> 
> Wouldn't you better do this prior to enabling CDP?
> 
Sure.

> > @@ -1294,11 +1344,21 @@ static void psr_cpu_init(void)
> >      {
> >          cpuid_count_leaf(PSR_CPUID_LEVEL_CAT, 1, ®s);
> >  
> > -        feat = feat_l3_cat;
> > -        feat_l3_cat = NULL;
> > -        feat_props[PSR_SOCKET_L3_CAT] = &l3_cat_props;
> > -
> > -        cat_init_feature(®s, feat, info, PSR_SOCKET_L3_CAT);
> > +        if ( (regs.c & PSR_CAT_CDP_CAPABILITY) && (opt_psr & PSR_CDP) &&
> > +             !info->features[PSR_SOCKET_L3_CDP] )
> 
> Doesn't this last check mean you'd set up CAT in case would come here for
> the 2nd CPU on a socket? In the end the check is simplky pointless afaict,
> due to psr_cpu_init() calling cat_init_feature() only if ->feat_init is still
> false. But please remove it as being potentially confusing (and inconsistent
> with the else branch).
> 
Ok, will remove the last check here.

> Jan

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

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