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

Re: [Xen-devel] [PATCH v3 09/15] tools: implement the new libxc get hw info interface



On 17-09-19 11:15:11, Roger Pau Monn� wrote:
> On Tue, Sep 05, 2017 at 05:32:31PM +0800, Yi Sun wrote:
> > diff --git a/tools/libxc/include/xenctrl.h b/tools/libxc/include/xenctrl.h
> > index c7710b8..bbdf8e2 100644
> > --- a/tools/libxc/include/xenctrl.h
> > +++ b/tools/libxc/include/xenctrl.h
> > @@ -2458,6 +2458,31 @@ enum xc_psr_cat_type {
> >  };
> >  typedef enum xc_psr_cat_type xc_psr_cat_type;
> >  
> > +enum xc_psr_feat_type {
> > +    XC_PSR_FEAT_UNKNOWN,
> 
> You don't seem to have such an unknown type in the libxl layer, any
> reason you need it at the libxc layer?
> 
It will be used in libxl_psr.c to check if libxl type convertion to libxc type
is correct.

But per your suggestion in libxl_psr.c, I may drop UNKNOWN.

> > +    XC_PSR_FEAT_CAT_L3,
> > +    XC_PSR_FEAT_CAT_L2,
> > +    XC_PSR_FEAT_MBA,
> 
> I think you can drop the _FEAT_ from the enum names.
> 
Ok.

> > +};
> > +typedef enum xc_psr_feat_type xc_psr_feat_type;
> > +
> > +struct xc_psr_hw_info {
> > +    union {
> > +        struct {
> > +            uint32_t cos_max;
> > +            uint32_t cbm_len;
> > +            bool     cdp_enabled;
> > +        } xc_cat;
> 
> No need for the 'xc_cat', just 'cat' please (and 'mba' below).
> 
Ok.

> > +
> > +        struct {
> > +            uint32_t cos_max;
> > +            uint32_t thrtl_max;
> > +            bool     linear;
> > +        } xc_mba;
> > +    } u;
> > +};
> > +typedef struct xc_psr_hw_info xc_psr_hw_info;
> > +
[...]

> > -int xc_psr_cat_get_info(xc_interface *xch, uint32_t socket, unsigned int 
> > lvl,
> > -                        uint32_t *cos_max, uint32_t *cbm_len, bool 
> > *cdp_enabled)
> > +int xc_psr_get_hw_info(xc_interface *xch, uint32_t socket,
> > +                       xc_psr_feat_type type, xc_psr_hw_info *hw_info)
> >  {
[...]

> > +    case XC_PSR_FEAT_MBA:
> > +        sysctl.u.psr_alloc.cmd = XEN_SYSCTL_PSR_ALLOC_get_mba_info;
> > +        rc = xc_sysctl(xch, &sysctl);
> > +        if ( !rc )
> > +        {
> > +            hw_info->u.xc_mba.cos_max =
> > +                        sysctl.u.psr_alloc.u.mba_info.cos_max;
> > +            hw_info->u.xc_mba.thrtl_max =
> > +                        sysctl.u.psr_alloc.u.mba_info.thrtl_max;
> > +            hw_info->u.xc_mba.linear =
> > +                        sysctl.u.psr_alloc.u.mba_info.flags &
> > +                        XEN_SYSCTL_PSR_ALLOC_MBA_LINEAR;
> >          }
> 
> Would it help to prevent line breaks to change the indentation above
> to:
> 
> rc = xc_sysctl(...);
> if ( rc )
>     break;
> 
> hw_info->u....
> 
> ?
Let me try.

> 
> >          break;
> >      default:
> > diff --git a/tools/libxl/libxl_psr.c b/tools/libxl/libxl_psr.c
> > index 4a6978e..dd412cc 100644
> > --- a/tools/libxl/libxl_psr.c
> > +++ b/tools/libxl/libxl_psr.c
> > @@ -361,6 +361,27 @@ int libxl_psr_cat_get_cbm(libxl_ctx *ctx, uint32_t 
> > domid,
> >      return rc;
> >  }
> >  
> > +static xc_psr_feat_type libxl__feat_type_to_libxc_feat_type(
> > +                            libxl_psr_feat_type type, unsigned int lvl)
> > +{
> > +    xc_psr_feat_type xc_type = XC_PSR_FEAT_UNKNOWN;
> > +
> > +    switch (type) {
> > +    case LIBXL_PSR_FEAT_TYPE_CAT:
> > +        if (lvl == 3)
> > +            xc_type = XC_PSR_FEAT_CAT_L3;
> > +        if (lvl == 2)
> > +            xc_type = XC_PSR_FEAT_CAT_L2;
> > +        break;
> > +    case LIBXL_PSR_FEAT_TYPE_MBA:
> > +        xc_type = XC_PSR_FEAT_MBA;
> > +    default:
> > +        break;
> 
> assert?
> 
> libxl_psr_feat_type cannot have any other value apart from the two
> that you list above.
> 
Ok, may consider it.

> > +    }
> > +
> > +    return xc_type;
> > +}
> > +
> > @@ -385,16 +408,27 @@ int libxl_psr_cat_get_info(libxl_ctx *ctx, 
> > libxl_psr_cat_info **info,
> >          goto out;
> >      }
> >  
> > +    xc_type = libxl__feat_type_to_libxc_feat_type(LIBXL_PSR_FEAT_TYPE_CAT, 
> > lvl);
> > +    if (xc_type == XC_PSR_FEAT_UNKNOWN) {
> > +        LOG(ERROR, "feature type or lvl is wrong");
> > +        rc = ERROR_FAIL;
> > +        goto out;
> > +    }
> > +
> >      ptr = libxl__malloc(NOGC, nr_sockets * sizeof(libxl_psr_cat_info));
> >  
> >      libxl_for_each_set_bit(socketid, socketmap) {
> >          ptr[i].id = socketid;
> > -        if (xc_psr_cat_get_info(ctx->xch, socketid, lvl, &ptr[i].cos_max,
> > -                                &ptr[i].cbm_len, &ptr[i].cdp_enabled)) {
> > +        if (xc_psr_get_hw_info(ctx->xch, socketid, xc_type, &hw_info)) {
> 
> It might be nice to LOG the errno here, or else you lose it AFAICT.
> 
Ok.

> Thanks, Roger.

_______________________________________________
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®.