Verma, Vishal L wrote:
> On Tue, 2023-02-07 at 19:55 -0800, Ira Weiny wrote:
> > Vishal Verma wrote:
> <..>
> > > 
> > > diff --git a/cxl/region.c b/cxl/region.c
> > > index 38aa142..0945a14 100644
> > > --- a/cxl/region.c
> > > +++ b/cxl/region.c
> > > @@ -380,7 +380,22 @@ static void collect_minsize(struct cxl_ctx *ctx, 
> > > struct parsed_params *p)
> > >                 struct json_object *jobj =
> > >                         json_object_array_get_idx(p->memdevs, i);
> > >                 struct cxl_memdev *memdev = 
> > > json_object_get_userdata(jobj);
> > > -               u64 size = cxl_memdev_get_pmem_size(memdev);
> > > +               u64 size;
> > > +
> > > +               switch(p->mode) {
> > > +               case CXL_DECODER_MODE_RAM:
> > > +                       size = cxl_memdev_get_ram_size(memdev);
> > > +                       break;
> > > +               case CXL_DECODER_MODE_PMEM:
> > > +                       size = cxl_memdev_get_pmem_size(memdev);
> > > +                       break;
> > > +               default:
> > > +                       /*
> > > +                        * This will 'poison' ep_min_size with a 0, and
> > > +                        * subsequently cause the region creation to fail.
> > > +                        */
> > > +                       size = 0;
> > 
> > Why not change collect_minsize() to return int and propagate the error up
> > through create_region_validate_config()?
> > 
> > It seems more confusing to hide a special value in size like this.
> > 
> Hm, true, though the default case should never get hit. In fact I was
> planning to leave it out entirely until gcc warned that I can't skip
> cases if switching for an enum. I think the comment is maybe misleading
> in that it makes one think that this is some special handling. It would
> probably be clearer to make size = 0 in the initial declaration, and
> make the default case a no-op (maybe with a comment that we would never
> get here). Does that sound better?
> > 

To me the question is whether size == 0 is an error or just a valid size
which something at the higher level determines is an error.  To me the
default case here is that mode is incorrectly set to get a valid size.
Your comment implied that as well.

Having size == 0 is ok generally as this is a 'min size'.  So I will not
argue the point too much.

Ira

Reply via email to