[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2 for-4.7 12/14] libxl: fix passing the type argument to xc_psr_*
On Thu, Apr 28, 2016 at 09:49:11PM +0100, Wei Liu wrote: > On Thu, Apr 28, 2016 at 06:29:03PM +0100, Ian Jackson wrote: > > Wei Liu writes ("Re: [PATCH v2 for-4.7 12/14] libxl: fix passing the type > > argument to xc_psr_*"): > > > On Tue, Apr 26, 2016 at 04:52:21PM +0200, Roger Pau Monne wrote: > > > > The xc_psr_* functions expect the type to be xc_psr_cat_type instead of > > > > libxl_psr_cbm_type, so do the conversion. > > > > > > > > Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx> > > > > > > Acked-by: Wei Liu <wei.liu2@xxxxxxxxxx> > > > > Nacked-by: Ian Jackson <ian.jackson@xxxxxxxxxxxxx> > > > > > > - if (xc_psr_cat_set_domain_data(ctx->xch, domid, type, socketid, > > cbm)) { > > > > + if (xc_psr_cat_set_domain_data(ctx->xch, domid, (xc_psr_cat_typ > > e)type, > > > > + socketid, cbm)) { > > > > I'm very much against introducing casts which are not absolutely > > necessary. Casts are a big hammer which can suppress important > > warnings (such as conversions between integers and pointers). > > > > This anomaly with the same enum defined in two places with two names > > is pretty poor. But if we are to perpetuate it, as perhaps we must, > > then rather than casting at each conversion point, we should introduce > > an inline function which contains the cast. That way each call site > > remains more typesafe. > > > > The two enums aren't going away any time soon. > > Does the following diff meet your requirement? Hello, Thanks for doing this. > ---8<--- > diff --git a/tools/libxl/libxl_psr.c b/tools/libxl/libxl_psr.c > index 40f2d5f..7a34c04 100644 > --- a/tools/libxl/libxl_psr.c > +++ b/tools/libxl/libxl_psr.c > @@ -293,12 +293,18 @@ out: > return rc; > } > > +static inline xc_psr_cat_type libxl_psr_cbm_type_to_libxc_psr_cat_type( ^ extra _ needed. > + libxl_psr_cbm_type type) > +{ > + BUILD_BUG_ON(sizeof(libxl_psr_cbm_type) != sizeof(xc_psr_cat_type)); > + return (xc_psr_cat_type)type; In order to prevent using a cast, we could use a union: union { libxl_psr_cbm_type libxl_psr; xc_psr_cat_type xc_psr; } u; u.libxl_psr = type; return u.xc_psr; > +} > + > int libxl_psr_cat_set_cbm(libxl_ctx *ctx, uint32_t domid, > libxl_psr_cbm_type type, libxl_bitmap *target_map, > uint64_t cbm) > { > GC_INIT(ctx); > - BUILD_BUG_ON(sizeof(libxl_psr_cbm_type) != sizeof(xc_psr_cat_type)); > int rc; > int socketid, nr_sockets; > > @@ -309,9 +315,13 @@ int libxl_psr_cat_set_cbm(libxl_ctx *ctx, uint32_t domid, > } > > libxl_for_each_set_bit(socketid, *target_map) { > + xc_psr_cat_type xc_type; > + > if (socketid >= nr_sockets) > break; > - if (xc_psr_cat_set_domain_data(ctx->xch, domid, > (xc_psr_cat_type)type, > + > + xc_type = libxl_psr_cbm_type_to_libxc_psr_cat_type(type); > + if (xc_psr_cat_set_domain_data(ctx->xch, domid, xc_type, > socketid, cbm)) { > libxl__psr_cat_log_err_msg(gc, errno); > rc = ERROR_FAIL; > @@ -329,8 +339,9 @@ int libxl_psr_cat_get_cbm(libxl_ctx *ctx, uint32_t domid, > { > GC_INIT(ctx); > int rc = 0; > + xc_psr_cat_type xc_type = libxl_psr_cbm_type_to_libxc_psr_cat_type(type); > > - if (xc_psr_cat_get_domain_data(ctx->xch, domid, (xc_psr_cat_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; _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |