Message ID | 20241118164434.7551-27-alejandro.lucero-palau@amd.com |
---|---|
State | New |
Headers | show |
Series | cxl: add type2 device basic support | expand |
On Mon, 18 Nov 2024 16:44:33 +0000 <alejandro.lucero-palau@amd.com> wrote: LGTM. Reviewed-by: Zhi Wang <zhiw@nvidia.com> > From: Alejandro Lucero <alucerop@amd.com> > > A CXL region struct contains the physical address to work with. > > Add a function for given a opaque cxl region struct returns the params > to be used for mapping such memory range. > > Signed-off-by: Alejandro Lucero <alucerop@amd.com> > --- > drivers/cxl/core/region.c | 16 ++++++++++++++++ > drivers/cxl/cxl.h | 2 ++ > include/cxl/cxl.h | 2 ++ > 3 files changed, 20 insertions(+) > > diff --git a/drivers/cxl/core/region.c b/drivers/cxl/core/region.c > index eff3ad788077..fa44a60549f7 100644 > --- a/drivers/cxl/core/region.c > +++ b/drivers/cxl/core/region.c > @@ -2663,6 +2663,22 @@ static struct cxl_region *devm_cxl_add_region(struct cxl_root_decoder *cxlrd, > return ERR_PTR(rc); > } > > +int cxl_get_region_params(struct cxl_region *region, resource_size_t *start, > + resource_size_t *end) > +{ > + if (!region) > + return -ENODEV; > + > + if (!region->params.res) > + return -ENOSPC; > + > + *start = region->params.res->start; > + *end = region->params.res->end; > + > + return 0; > +} > +EXPORT_SYMBOL_NS_GPL(cxl_get_region_params, CXL); > + > static ssize_t __create_region_show(struct cxl_root_decoder *cxlrd, char *buf) > { > return sysfs_emit(buf, "region%u\n", atomic_read(&cxlrd->region_id)); > diff --git a/drivers/cxl/cxl.h b/drivers/cxl/cxl.h > index ee3385db5663..7b46d313e581 100644 > --- a/drivers/cxl/cxl.h > +++ b/drivers/cxl/cxl.h > @@ -913,6 +913,8 @@ void cxl_coordinates_combine(struct access_coordinate *out, > > bool cxl_endpoint_decoder_reset_detected(struct cxl_port *port); > > +int cxl_get_region_params(struct cxl_region *region, resource_size_t *start, > + resource_size_t *end); > /* > * Unit test builds overrides this to __weak, find the 'strong' version > * of these symbols in tools/testing/cxl/. > diff --git a/include/cxl/cxl.h b/include/cxl/cxl.h > index 2a8ebabfc1dd..f14a3f292ad8 100644 > --- a/include/cxl/cxl.h > +++ b/include/cxl/cxl.h > @@ -77,4 +77,6 @@ struct cxl_region *cxl_create_region(struct cxl_root_decoder *cxlrd, > bool avoid_dax); > > int cxl_accel_region_detach(struct cxl_endpoint_decoder *cxled); > +int cxl_get_region_params(struct cxl_region *region, resource_size_t *start, > + resource_size_t *end); > #endif
On Mon, Nov 18, 2024 at 04:44:33PM +0000, alejandro.lucero-palau@amd.com wrote: > From: Alejandro Lucero <alucerop@amd.com> > > A CXL region struct contains the physical address to work with. > > Add a function for given a opaque cxl region struct returns the params > to be used for mapping such memory range. I may not be understanding what needs to be opaque here. Why not just 'add function to get a region resource' and then add 'cxl_get_region_resource(). Region params usually refers to the member of struct cxl_region that is called 'params' and that includes more than the resource. --Alison > > Signed-off-by: Alejandro Lucero <alucerop@amd.com> > --- > drivers/cxl/core/region.c | 16 ++++++++++++++++ > drivers/cxl/cxl.h | 2 ++ > include/cxl/cxl.h | 2 ++ > 3 files changed, 20 insertions(+) > > diff --git a/drivers/cxl/core/region.c b/drivers/cxl/core/region.c > index eff3ad788077..fa44a60549f7 100644 > --- a/drivers/cxl/core/region.c > +++ b/drivers/cxl/core/region.c > @@ -2663,6 +2663,22 @@ static struct cxl_region *devm_cxl_add_region(struct cxl_root_decoder *cxlrd, > return ERR_PTR(rc); > } > > +int cxl_get_region_params(struct cxl_region *region, resource_size_t *start, > + resource_size_t *end) > +{ > + if (!region) > + return -ENODEV; > + > + if (!region->params.res) > + return -ENOSPC; > + > + *start = region->params.res->start; > + *end = region->params.res->end; > + > + return 0; > +} > +EXPORT_SYMBOL_NS_GPL(cxl_get_region_params, CXL); > + > static ssize_t __create_region_show(struct cxl_root_decoder *cxlrd, char *buf) > { > return sysfs_emit(buf, "region%u\n", atomic_read(&cxlrd->region_id)); > diff --git a/drivers/cxl/cxl.h b/drivers/cxl/cxl.h > index ee3385db5663..7b46d313e581 100644 > --- a/drivers/cxl/cxl.h > +++ b/drivers/cxl/cxl.h > @@ -913,6 +913,8 @@ void cxl_coordinates_combine(struct access_coordinate *out, > > bool cxl_endpoint_decoder_reset_detected(struct cxl_port *port); > > +int cxl_get_region_params(struct cxl_region *region, resource_size_t *start, > + resource_size_t *end); > /* > * Unit test builds overrides this to __weak, find the 'strong' version > * of these symbols in tools/testing/cxl/. > diff --git a/include/cxl/cxl.h b/include/cxl/cxl.h > index 2a8ebabfc1dd..f14a3f292ad8 100644 > --- a/include/cxl/cxl.h > +++ b/include/cxl/cxl.h > @@ -77,4 +77,6 @@ struct cxl_region *cxl_create_region(struct cxl_root_decoder *cxlrd, > bool avoid_dax); > > int cxl_accel_region_detach(struct cxl_endpoint_decoder *cxled); > +int cxl_get_region_params(struct cxl_region *region, resource_size_t *start, > + resource_size_t *end); > #endif > -- > 2.17.1 > >
On 11/18/24 9:44 AM, alejandro.lucero-palau@amd.com wrote: > From: Alejandro Lucero <alucerop@amd.com> > > A CXL region struct contains the physical address to work with. > > Add a function for given a opaque cxl region struct returns the params > to be used for mapping such memory range. > > Signed-off-by: Alejandro Lucero <alucerop@amd.com> > --- > drivers/cxl/core/region.c | 16 ++++++++++++++++ > drivers/cxl/cxl.h | 2 ++ > include/cxl/cxl.h | 2 ++ > 3 files changed, 20 insertions(+) > > diff --git a/drivers/cxl/core/region.c b/drivers/cxl/core/region.c > index eff3ad788077..fa44a60549f7 100644 > --- a/drivers/cxl/core/region.c > +++ b/drivers/cxl/core/region.c > @@ -2663,6 +2663,22 @@ static struct cxl_region *devm_cxl_add_region(struct cxl_root_decoder *cxlrd, > return ERR_PTR(rc); > } > > +int cxl_get_region_params(struct cxl_region *region, resource_size_t *start, > + resource_size_t *end) Maybe just pass in a 'struct range' ptr and call it cxl_get_region_range()? DJ > +{ > + if (!region) > + return -ENODEV; > + > + if (!region->params.res) > + return -ENOSPC; > + > + *start = region->params.res->start; > + *end = region->params.res->end; > + > + return 0; > +} > +EXPORT_SYMBOL_NS_GPL(cxl_get_region_params, CXL); > + > static ssize_t __create_region_show(struct cxl_root_decoder *cxlrd, char *buf) > { > return sysfs_emit(buf, "region%u\n", atomic_read(&cxlrd->region_id)); > diff --git a/drivers/cxl/cxl.h b/drivers/cxl/cxl.h > index ee3385db5663..7b46d313e581 100644 > --- a/drivers/cxl/cxl.h > +++ b/drivers/cxl/cxl.h > @@ -913,6 +913,8 @@ void cxl_coordinates_combine(struct access_coordinate *out, > > bool cxl_endpoint_decoder_reset_detected(struct cxl_port *port); > > +int cxl_get_region_params(struct cxl_region *region, resource_size_t *start, > + resource_size_t *end); > /* > * Unit test builds overrides this to __weak, find the 'strong' version > * of these symbols in tools/testing/cxl/. > diff --git a/include/cxl/cxl.h b/include/cxl/cxl.h > index 2a8ebabfc1dd..f14a3f292ad8 100644 > --- a/include/cxl/cxl.h > +++ b/include/cxl/cxl.h > @@ -77,4 +77,6 @@ struct cxl_region *cxl_create_region(struct cxl_root_decoder *cxlrd, > bool avoid_dax); > > int cxl_accel_region_detach(struct cxl_endpoint_decoder *cxled); > +int cxl_get_region_params(struct cxl_region *region, resource_size_t *start, > + resource_size_t *end); > #endif
diff --git a/drivers/cxl/core/region.c b/drivers/cxl/core/region.c index eff3ad788077..fa44a60549f7 100644 --- a/drivers/cxl/core/region.c +++ b/drivers/cxl/core/region.c @@ -2663,6 +2663,22 @@ static struct cxl_region *devm_cxl_add_region(struct cxl_root_decoder *cxlrd, return ERR_PTR(rc); } +int cxl_get_region_params(struct cxl_region *region, resource_size_t *start, + resource_size_t *end) +{ + if (!region) + return -ENODEV; + + if (!region->params.res) + return -ENOSPC; + + *start = region->params.res->start; + *end = region->params.res->end; + + return 0; +} +EXPORT_SYMBOL_NS_GPL(cxl_get_region_params, CXL); + static ssize_t __create_region_show(struct cxl_root_decoder *cxlrd, char *buf) { return sysfs_emit(buf, "region%u\n", atomic_read(&cxlrd->region_id)); diff --git a/drivers/cxl/cxl.h b/drivers/cxl/cxl.h index ee3385db5663..7b46d313e581 100644 --- a/drivers/cxl/cxl.h +++ b/drivers/cxl/cxl.h @@ -913,6 +913,8 @@ void cxl_coordinates_combine(struct access_coordinate *out, bool cxl_endpoint_decoder_reset_detected(struct cxl_port *port); +int cxl_get_region_params(struct cxl_region *region, resource_size_t *start, + resource_size_t *end); /* * Unit test builds overrides this to __weak, find the 'strong' version * of these symbols in tools/testing/cxl/. diff --git a/include/cxl/cxl.h b/include/cxl/cxl.h index 2a8ebabfc1dd..f14a3f292ad8 100644 --- a/include/cxl/cxl.h +++ b/include/cxl/cxl.h @@ -77,4 +77,6 @@ struct cxl_region *cxl_create_region(struct cxl_root_decoder *cxlrd, bool avoid_dax); int cxl_accel_region_detach(struct cxl_endpoint_decoder *cxled); +int cxl_get_region_params(struct cxl_region *region, resource_size_t *start, + resource_size_t *end); #endif