On Tue, Feb 01, 2022 at 10:59:28AM -0800, Widawsky, Ben wrote: > On 22-01-31 23:19:51, ira.weiny@xxxxxxxxx wrote: > > From: Ira Weiny <ira.weiny@xxxxxxxxx> > > > > The CDAT read may fail for a number of reasons but mainly it is possible > > to get different parts of a valid state. The checksum in the CDAT table > > protects against this. > > > > Now that the checksum is validated issue a retry if the CDAT read fails. > > For now 2 retries are implemented. > > > > Signed-off-by: Ira Weiny <ira.weiny@xxxxxxxxx> > > > > --- > > NOTE: Is 2 enough? Should this just be delayed until the time when the > > data is actually needed and not there? > > I can't speak to retries at all, but one small issue below. It might make sense > if we keep this to make it a modparam. Not a bad idea. > > > > > Changes from V5: > > New patch -- easy to push off or drop. > > --- > > drivers/cxl/core/memdev.c | 17 ++++++++++++++++- > > 1 file changed, 16 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/cxl/core/memdev.c b/drivers/cxl/core/memdev.c > > index a01068e98333..11d721c56f08 100644 > > --- a/drivers/cxl/core/memdev.c > > +++ b/drivers/cxl/core/memdev.c > > @@ -356,7 +356,8 @@ static const struct file_operations cxl_memdev_fops = { > > .llseek = noop_llseek, > > }; > > > > -static int read_cdat_data(struct cxl_memdev *cxlmd, struct cxl_dev_state *cxlds) > > +static int __read_cdat_data(struct cxl_memdev *cxlmd, > > + struct cxl_dev_state *cxlds) > > { > > struct device *dev = &cxlmd->dev; > > size_t cdat_length; > > @@ -371,6 +372,20 @@ static int read_cdat_data(struct cxl_memdev *cxlmd, struct cxl_dev_state *cxlds) > > return cxl_mem_cdat_read_table(cxlds, &cxlmd->cdat); > > } > > > > +static int read_cdat_data(struct cxl_memdev *cxlmd, > > + struct cxl_dev_state *cxlds) > > +{ > > + int retries = 2; > > + int rc; > > + > > + while (--retries) { > > You either want retries--, or retries = 3... Opps yea. Thanks, Ira > > > + rc = __read_cdat_data(cxlmd, cxlds); > > + if (!rc) > > + break; > > + } > > + return rc; > > +} > > + > > struct cxl_memdev *devm_cxl_add_memdev(struct cxl_dev_state *cxlds) > > { > > struct cxl_memdev *cxlmd; > > -- > > 2.31.1 > >