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

Re: [Xen-devel] [PATCH v3 13/15] tools: implement new generic get value interface and MBA get value command



On 17-09-19 12:02:08, Roger Pau Monn� wrote:
> On Tue, Sep 05, 2017 at 05:32:35PM +0800, Yi Sun wrote:
> > diff --git a/tools/libxl/libxl_psr.c b/tools/libxl/libxl_psr.c
> > index c8d2921..78d5bc5 100644
> > --- a/tools/libxl/libxl_psr.c
> > +++ b/tools/libxl/libxl_psr.c
> > @@ -71,16 +71,30 @@ static void libxl__psr_cmt_log_err_msg(libxl__gc *gc, 
> > int err)
> >      LOGE(ERROR, "%s", msg);
> >  }
> >  
> > -static void libxl__psr_cat_log_err_msg(libxl__gc *gc, int err)
> > +static void libxl__psr_alloc_log_err_msg(libxl__gc *gc,
> > +                                         int err,
> > +                                         libxl_psr_type type)
> >  {
> > +    /*
> > +     * Index is 'libxl_psr_type' so we set two 'CDP' to correspond to
> > +     * DATA and CODE.
> > +     */
> > +    const char * const feat_name[6] = {
> 
> The explicit '6' is not needed.
> 
> > +        "UNKNOWN",
> > +        "L3 CAT",
> > +        "CDP",
> > +        "CDP",
> > +        "L2 CAT",
> > +        "MBA",
> 
> I'm not sure whether you want to use designated initializers here, in
> case someone decides to change the order of the xc_psr_type enum or
> the order here. ie:
> 
> feat_name[]?= {
>     [XC_PSR_CAT_L3_CBM] = "L3 CAT",
>     [XC_PSR_CAT_L3_CBM_CODE..XC_PSR_CAT_L3_CBM_DATA] = "CDP",
>     ...
> }
> 
Got it. Thanks! One correction, the index is 'libxl_psr_type'.

> > +    };
> >      char *msg;
> >  
> >      switch (err) {
> >      case ENODEV:
> > -        msg = "CAT is not supported in this system";
> > +        msg = "is not supported in this system";
> >          break;
> >      case ENOENT:
> > -        msg = "CAT is not enabled on the socket";
> > +        msg = "is not enabled on the socket";
> >          break;
> >      case EOVERFLOW:
> >          msg = "no free COS available";
> > @@ -106,7 +120,7 @@ static void libxl__psr_cat_log_err_msg(libxl__gc *gc, 
> > int err)
> >          return;
> >      }
> >  
> > -    LOGE(ERROR, "%s", msg);
> > +    LOGE(ERROR, "%s: %s", feat_name[type], msg);
> 
> I don't think you should use LOGE here, but rather LOG. LOGE should be
> used when errno is set, which I don't think is the case here.
> 
But two places to call libxl__psr_cat_log_err_msg all set errno in 'xc_'
functions.

> > @@ -347,18 +361,7 @@ int libxl_psr_cat_get_cbm(libxl_ctx *ctx, uint32_t 
> > domid,
> >                            libxl_psr_cbm_type type, uint32_t target,
> >                            uint64_t *cbm_r)
> >  {
> > -    GC_INIT(ctx);
> > -    int rc = 0;
> > -    xc_psr_type xc_type = libxl__psr_cbm_type_to_libxc_psr_type(type);
> > -
> > -    if (xc_psr_cat_get_domain_data(ctx->xch, domid, xc_type,
> > -                                   target, cbm_r)) {
> > -        libxl__psr_cat_log_err_msg(gc, errno);
> > -        rc = ERROR_FAIL;
> > -    }
> > -
> > -    GC_FREE;
> > -    return rc;
> > +    return libxl_psr_get_val(ctx, domid, type, target, cbm_r);
> >  }
> 
> You could even move this to libxl.h as a static function IMHO.
> 
Yes. But I prefer to keep it here with other interfaces together. Is that
acceptable to you?

> > diff --git a/tools/xl/xl_psr.c b/tools/xl/xl_psr.c
> > index 40269b4..46b7788 100644
> > --- a/tools/xl/xl_psr.c
> > +++ b/tools/xl/xl_psr.c
> > -static int psr_cat_print_socket(uint32_t domid, libxl_psr_cat_info *info,
> > -                                unsigned int lvl)
> > +static int psr_print_socket(uint32_t domid,
> > +                            libxl_psr_hw_info *info,
> > +                            libxl_psr_feat_type type,
> > +                            unsigned int lvl)
> >  {
> > -    int rc;
> > -    uint32_t l3_cache_size;
> > -
> >      printf("%-16s: %u\n", "Socket ID", info->id);
> >  
> > -    /* So far, CMT only supports L3 cache. */
> > -    if (lvl == 3) {
> > -        rc = libxl_psr_cmt_get_l3_cache_size(ctx, info->id, 
> > &l3_cache_size);
> > -        if (rc) {
> > -            fprintf(stderr, "Failed to get l3 cache size for socket:%d\n",
> > -                    info->id);
> > -            return -1;
> > +    switch (type) {
> > +    case LIBXL_PSR_FEAT_TYPE_CAT:
> > +    {
> > +        int rc;
> > +        uint32_t l3_cache_size;
> > +
> > +        /* So far, CMT only supports L3 cache. */
> > +        if (lvl == 3) {
> 
> Shouldn't you print some kind of error message if lvl != 3? Or is it
> expected that this function will be called with lvl != 3 and it should
> be ignored?
> 
We only get cache size for level 3 cache. So, if input is lvl=2, we print
nothing.

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