Shiyang Ruan wrote: > When a memdev is assigned to a region, its Device Physical Address will be > mapped to Host Physical Address. Introduce this helper function to > translate HPA from a given memdev and its DPA. > > Signed-off-by: Shiyang Ruan <ruansy.f...@fujitsu.com> > --- > drivers/cxl/core/memdev.c | 12 ++++++++++++ > drivers/cxl/cxlmem.h | 1 + > 2 files changed, 13 insertions(+) > > diff --git a/drivers/cxl/core/memdev.c b/drivers/cxl/core/memdev.c > index dae8802ecdb0..c304e709ef0e 100644 > --- a/drivers/cxl/core/memdev.c > +++ b/drivers/cxl/core/memdev.c > @@ -319,6 +319,18 @@ static int cxl_validate_poison_dpa(struct cxl_memdev > *cxlmd, u64 dpa) > return 0; > } > > +phys_addr_t cxl_memdev_dpa_to_hpa(struct cxl_memdev *cxlmd, u64 dpa) > +{ > + struct cxl_region *cxlr = cxl_dpa_to_region(cxlmd, dpa); > + > + if (cxlr) > + return cxlr->params.res->start + dpa; > + else { > + dev_dbg(&cxlmd->dev, "device belongs to no region.\n"); > + return 0; > + } > +}
Hmm no, I would not say memdevs are assigned to regions, *endpoint decoders* are assigned to regions. cxl_dpa_to_region() is only an internal helper when the endpoint decoder is unknown. Otherwise endpoint decoders have a direct-link to their region, if mapped. See usage of "cxled->cxld.region".