On Fri, 2021-04-16 at 17:43 -0700, Dan Williams wrote: > The CXL Identify Memory Device output payload emits capacity in 256MB > units. The driver is treating the capacity field as bytes. This was > missed because QEMU reports bytes when it should report bytes / 256MB. > > Fixes: 8adaf747c9f0 ("cxl/mem: Find device capabilities") > Cc: Ben Widawsky <ben.widaw...@intel.com> > Signed-off-by: Dan Williams <dan.j.willi...@intel.com> > --- > drivers/cxl/mem.c | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-)
Looks good, Reviewed-by: Vishal Verma <vishal.l.ve...@intel.com> > > diff --git a/drivers/cxl/mem.c b/drivers/cxl/mem.c > index 1b5078311f7d..2acc6173da36 100644 > --- a/drivers/cxl/mem.c > +++ b/drivers/cxl/mem.c > @@ -4,6 +4,7 @@ > #include <linux/security.h> > #include <linux/debugfs.h> > #include <linux/module.h> > +#include <linux/sizes.h> > #include <linux/mutex.h> > #include <linux/cdev.h> > #include <linux/idr.h> > @@ -1419,6 +1420,7 @@ static int cxl_mem_enumerate_cmds(struct cxl_mem *cxlm) > */ > static int cxl_mem_identify(struct cxl_mem *cxlm) > { > + /* See CXL 2.0 Table 175 Identify Memory Device Output Payload */ > struct cxl_mbox_identify { > char fw_revision[0x10]; > __le64 total_capacity; > @@ -1447,10 +1449,11 @@ static int cxl_mem_identify(struct cxl_mem *cxlm) > * For now, only the capacity is exported in sysfs > */ > cxlm->ram_range.start = 0; > - cxlm->ram_range.end = le64_to_cpu(id.volatile_capacity) - 1; > + cxlm->ram_range.end = le64_to_cpu(id.volatile_capacity) * SZ_256M - 1; > > > > > cxlm->pmem_range.start = 0; > - cxlm->pmem_range.end = le64_to_cpu(id.persistent_capacity) - 1; > + cxlm->pmem_range.end = > + le64_to_cpu(id.persistent_capacity) * SZ_256M - 1; > > > > > memcpy(cxlm->firmware_version, id.fw_revision, sizeof(id.fw_revision)); > > > > >