From: Navneet Singh <navneet.singh@intel.com>
Extent information can be helpful to the user to coordinate memory usage
with the external orchestrator and FM.
Expose the details of region extents by creating the following
sysfs entries.
/sys/bus/cxl/devices/dax_regionX/extentX.Y
/sys/bus/cxl/devices/dax_regionX/extentX.Y/offset
/sys/bus/cxl/devices/dax_regionX/extentX.Y/length
/sys/bus/cxl/devices/dax_regionX/extentX.Y/tag
Signed-off-by: Navneet Singh <navneet.singh@intel.com>
Co-developed-by: Ira Weiny <ira.weiny@intel.com>
Signed-off-by: Ira Weiny <ira.weiny@intel.com>
---
Changes:
[djiang: Split sysfs docs up]
[iweiny: Adjust sysfs docs dates]
---
Documentation/ABI/testing/sysfs-bus-cxl | 32 ++++++++++++++++++
drivers/cxl/core/extent.c | 58 +++++++++++++++++++++++++++++++++
2 files changed, 90 insertions(+)
diff --git a/Documentation/ABI/testing/sysfs-bus-cxl b/Documentation/ABI/testing/sysfs-bus-cxl
index b63ab622515f..64918180a3c9 100644
--- a/Documentation/ABI/testing/sysfs-bus-cxl
+++ b/Documentation/ABI/testing/sysfs-bus-cxl
@@ -632,3 +632,35 @@ Description:
See Documentation/ABI/stable/sysfs-devices-node. access0 provides
the number to the closest initiator and access1 provides the
number to the closest CPU.
+
+What: /sys/bus/cxl/devices/dax_regionX/extentX.Y/offset
+Date: December, 2024
+KernelVersion: v6.13
+Contact: linux-cxl@vger.kernel.org
+Description:
+ (RO) [For Dynamic Capacity regions only] Users can use the
+ extent information to create DAX devices on specific extents.
+ This is done by creating and destroying DAX devices in specific
+ sequences and looking at the mappings created. Extent offset
+ within the region.
+
+What: /sys/bus/cxl/devices/dax_regionX/extentX.Y/length
+Date: December, 2024
+KernelVersion: v6.13
+Contact: linux-cxl@vger.kernel.org
+Description:
+ (RO) [For Dynamic Capacity regions only] Users can use the
+ extent information to create DAX devices on specific extents.
+ This is done by creating and destroying DAX devices in specific
+ sequences and looking at the mappings created. Extent length
+ within the region.
+
+What: /sys/bus/cxl/devices/dax_regionX/extentX.Y/tag
+Date: December, 2024
+KernelVersion: v6.13
+Contact: linux-cxl@vger.kernel.org
+Description:
+ (RO) [For Dynamic Capacity regions only] Users can use the
+ extent information to create DAX devices on specific extents.
+ This is done by creating and destroying DAX devices in specific
+ sequences and looking at the mappings created. Extent tag.
diff --git a/drivers/cxl/core/extent.c b/drivers/cxl/core/extent.c
index 69a7614ba6a9..a1eb6e8e4f1a 100644
--- a/drivers/cxl/core/extent.c
+++ b/drivers/cxl/core/extent.c
@@ -6,6 +6,63 @@
#include "core.h"
+static ssize_t offset_show(struct device *dev, struct device_attribute *attr,
+ char *buf)
+{
+ struct region_extent *region_extent = to_region_extent(dev);
+
+ return sysfs_emit(buf, "%#llx\n", region_extent->hpa_range.start);
+}
+static DEVICE_ATTR_RO(offset);
+
+static ssize_t length_show(struct device *dev, struct device_attribute *attr,
+ char *buf)
+{
+ struct region_extent *region_extent = to_region_extent(dev);
+ u64 length = range_len(®ion_extent->hpa_range);
+
+ return sysfs_emit(buf, "%#llx\n", length);
+}
+static DEVICE_ATTR_RO(length);
+
+static ssize_t tag_show(struct device *dev, struct device_attribute *attr,
+ char *buf)
+{
+ struct region_extent *region_extent = to_region_extent(dev);
+
+ return sysfs_emit(buf, "%pUb\n", ®ion_extent->tag);
+}
+static DEVICE_ATTR_RO(tag);
+
+static struct attribute *region_extent_attrs[] = {
+ &dev_attr_offset.attr,
+ &dev_attr_length.attr,
+ &dev_attr_tag.attr,
+ NULL,
+};
+
+static uuid_t empty_tag = { 0 };
+
+static umode_t region_extent_visible(struct kobject *kobj,
+ struct attribute *a, int n)
+{
+ struct device *dev = kobj_to_dev(kobj);
+ struct region_extent *region_extent = to_region_extent(dev);
+
+ if (a == &dev_attr_tag.attr &&
+ uuid_equal(®ion_extent->tag, &empty_tag))
+ return 0;
+
+ return a->mode;
+}
+
+static const struct attribute_group region_extent_attribute_group = {
+ .attrs = region_extent_attrs,
+ .is_visible = region_extent_visible,
+};
+
+__ATTRIBUTE_GROUPS(region_extent_attribute);
+
static void cxled_release_extent(struct cxl_endpoint_decoder *cxled,
struct cxled_extent *ed_extent)
{
@@ -44,6 +101,7 @@ static void region_extent_release(struct device *dev)
static const struct device_type region_extent_type = {
.name = "extent",
.release = region_extent_release,
+ .groups = region_extent_attribute_groups,
};
bool is_region_extent(struct device *dev)
--
2.46.0
On Mon, Oct 07, 2024 at 06:16:28PM -0500, ira.weiny@intel.com wrote: > From: Navneet Singh <navneet.singh@intel.com> > > Extent information can be helpful to the user to coordinate memory usage > with the external orchestrator and FM. > > Expose the details of region extents by creating the following > sysfs entries. > > /sys/bus/cxl/devices/dax_regionX/extentX.Y > /sys/bus/cxl/devices/dax_regionX/extentX.Y/offset > /sys/bus/cxl/devices/dax_regionX/extentX.Y/length > /sys/bus/cxl/devices/dax_regionX/extentX.Y/tag > > Signed-off-by: Navneet Singh <navneet.singh@intel.com> > Co-developed-by: Ira Weiny <ira.weiny@intel.com> > Signed-off-by: Ira Weiny <ira.weiny@intel.com> > Reviewed-by: Fan Ni <fan.ni@samsung.com> Tested-by: Fan Ni <fan.ni@samsung.com> > --- > Changes: > [djiang: Split sysfs docs up] > [iweiny: Adjust sysfs docs dates] > --- > Documentation/ABI/testing/sysfs-bus-cxl | 32 ++++++++++++++++++ > drivers/cxl/core/extent.c | 58 +++++++++++++++++++++++++++++++++ > 2 files changed, 90 insertions(+) > > diff --git a/Documentation/ABI/testing/sysfs-bus-cxl b/Documentation/ABI/testing/sysfs-bus-cxl > index b63ab622515f..64918180a3c9 100644 > --- a/Documentation/ABI/testing/sysfs-bus-cxl > +++ b/Documentation/ABI/testing/sysfs-bus-cxl > @@ -632,3 +632,35 @@ Description: > See Documentation/ABI/stable/sysfs-devices-node. access0 provides > the number to the closest initiator and access1 provides the > number to the closest CPU. > + > +What: /sys/bus/cxl/devices/dax_regionX/extentX.Y/offset > +Date: December, 2024 > +KernelVersion: v6.13 > +Contact: linux-cxl@vger.kernel.org > +Description: > + (RO) [For Dynamic Capacity regions only] Users can use the > + extent information to create DAX devices on specific extents. > + This is done by creating and destroying DAX devices in specific > + sequences and looking at the mappings created. Extent offset > + within the region. > + > +What: /sys/bus/cxl/devices/dax_regionX/extentX.Y/length > +Date: December, 2024 > +KernelVersion: v6.13 > +Contact: linux-cxl@vger.kernel.org > +Description: > + (RO) [For Dynamic Capacity regions only] Users can use the > + extent information to create DAX devices on specific extents. > + This is done by creating and destroying DAX devices in specific > + sequences and looking at the mappings created. Extent length > + within the region. > + > +What: /sys/bus/cxl/devices/dax_regionX/extentX.Y/tag > +Date: December, 2024 > +KernelVersion: v6.13 > +Contact: linux-cxl@vger.kernel.org > +Description: > + (RO) [For Dynamic Capacity regions only] Users can use the > + extent information to create DAX devices on specific extents. > + This is done by creating and destroying DAX devices in specific > + sequences and looking at the mappings created. Extent tag. > diff --git a/drivers/cxl/core/extent.c b/drivers/cxl/core/extent.c > index 69a7614ba6a9..a1eb6e8e4f1a 100644 > --- a/drivers/cxl/core/extent.c > +++ b/drivers/cxl/core/extent.c > @@ -6,6 +6,63 @@ > > #include "core.h" > > +static ssize_t offset_show(struct device *dev, struct device_attribute *attr, > + char *buf) > +{ > + struct region_extent *region_extent = to_region_extent(dev); > + > + return sysfs_emit(buf, "%#llx\n", region_extent->hpa_range.start); > +} > +static DEVICE_ATTR_RO(offset); > + > +static ssize_t length_show(struct device *dev, struct device_attribute *attr, > + char *buf) > +{ > + struct region_extent *region_extent = to_region_extent(dev); > + u64 length = range_len(®ion_extent->hpa_range); > + > + return sysfs_emit(buf, "%#llx\n", length); > +} > +static DEVICE_ATTR_RO(length); > + > +static ssize_t tag_show(struct device *dev, struct device_attribute *attr, > + char *buf) > +{ > + struct region_extent *region_extent = to_region_extent(dev); > + > + return sysfs_emit(buf, "%pUb\n", ®ion_extent->tag); > +} > +static DEVICE_ATTR_RO(tag); > + > +static struct attribute *region_extent_attrs[] = { > + &dev_attr_offset.attr, > + &dev_attr_length.attr, > + &dev_attr_tag.attr, > + NULL, > +}; > + > +static uuid_t empty_tag = { 0 }; > + > +static umode_t region_extent_visible(struct kobject *kobj, > + struct attribute *a, int n) > +{ > + struct device *dev = kobj_to_dev(kobj); > + struct region_extent *region_extent = to_region_extent(dev); > + > + if (a == &dev_attr_tag.attr && > + uuid_equal(®ion_extent->tag, &empty_tag)) > + return 0; > + > + return a->mode; > +} > + > +static const struct attribute_group region_extent_attribute_group = { > + .attrs = region_extent_attrs, > + .is_visible = region_extent_visible, > +}; > + > +__ATTRIBUTE_GROUPS(region_extent_attribute); > + > static void cxled_release_extent(struct cxl_endpoint_decoder *cxled, > struct cxled_extent *ed_extent) > { > @@ -44,6 +101,7 @@ static void region_extent_release(struct device *dev) > static const struct device_type region_extent_type = { > .name = "extent", > .release = region_extent_release, > + .groups = region_extent_attribute_groups, > }; > > bool is_region_extent(struct device *dev) > > -- > 2.46.0 > -- Fan Ni
On Mon, 07 Oct 2024 18:16:28 -0500 ira.weiny@intel.com wrote: > From: Navneet Singh <navneet.singh@intel.com> > > Extent information can be helpful to the user to coordinate memory usage > with the external orchestrator and FM. > > Expose the details of region extents by creating the following > sysfs entries. > > /sys/bus/cxl/devices/dax_regionX/extentX.Y > /sys/bus/cxl/devices/dax_regionX/extentX.Y/offset > /sys/bus/cxl/devices/dax_regionX/extentX.Y/length > /sys/bus/cxl/devices/dax_regionX/extentX.Y/tag > > Signed-off-by: Navneet Singh <navneet.singh@intel.com> > Co-developed-by: Ira Weiny <ira.weiny@intel.com> > Signed-off-by: Ira Weiny <ira.weiny@intel.com> > Trivial comments inline. Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> > --- > Changes: > [djiang: Split sysfs docs up] > [iweiny: Adjust sysfs docs dates] > --- > Documentation/ABI/testing/sysfs-bus-cxl | 32 ++++++++++++++++++ > drivers/cxl/core/extent.c | 58 +++++++++++++++++++++++++++++++++ > 2 files changed, 90 insertions(+) > > diff --git a/Documentation/ABI/testing/sysfs-bus-cxl b/Documentation/ABI/testing/sysfs-bus-cxl > index b63ab622515f..64918180a3c9 100644 > --- a/Documentation/ABI/testing/sysfs-bus-cxl > +++ b/Documentation/ABI/testing/sysfs-bus-cxl > @@ -632,3 +632,35 @@ Description: > See Documentation/ABI/stable/sysfs-devices-node. access0 provides > the number to the closest initiator and access1 provides the > number to the closest CPU. > + > +What: /sys/bus/cxl/devices/dax_regionX/extentX.Y/offset > +Date: December, 2024 > +KernelVersion: v6.13 > +Contact: linux-cxl@vger.kernel.org > +Description: > + (RO) [For Dynamic Capacity regions only] Users can use the > + extent information to create DAX devices on specific extents. > + This is done by creating and destroying DAX devices in specific > + sequences and looking at the mappings created. Similar to earlier patch, maybe put this doc for the directory, then have much less duplication? > Extent offset > + within the region. > + > +What: /sys/bus/cxl/devices/dax_regionX/extentX.Y/length > +Date: December, 2024 > +KernelVersion: v6.13 > +Contact: linux-cxl@vger.kernel.org > +Description: > + (RO) [For Dynamic Capacity regions only] Users can use the > + extent information to create DAX devices on specific extents. > + This is done by creating and destroying DAX devices in specific > + sequences and looking at the mappings created. Extent length > + within the region. > + > +What: /sys/bus/cxl/devices/dax_regionX/extentX.Y/tag > +Date: December, 2024 > +KernelVersion: v6.13 > +Contact: linux-cxl@vger.kernel.org > +Description: > + (RO) [For Dynamic Capacity regions only] Users can use the > + extent information to create DAX devices on specific extents. > + This is done by creating and destroying DAX devices in specific > + sequences and looking at the mappings created. Extent tag. Maybe say we are treating it as a UUID? > diff --git a/drivers/cxl/core/extent.c b/drivers/cxl/core/extent.c > index 69a7614ba6a9..a1eb6e8e4f1a 100644 > --- a/drivers/cxl/core/extent.c > +++ b/drivers/cxl/core/extent.c > @@ -6,6 +6,63 @@ > +static struct attribute *region_extent_attrs[] = { > + &dev_attr_offset.attr, > + &dev_attr_length.attr, > + &dev_attr_tag.attr, > + NULL, No need for trailing comma (one of my 'favourite' review comments :) > +};
Jonathan Cameron wrote: > On Mon, 07 Oct 2024 18:16:28 -0500 > ira.weiny@intel.com wrote: > > > From: Navneet Singh <navneet.singh@intel.com> > > > > Extent information can be helpful to the user to coordinate memory usage > > with the external orchestrator and FM. > > > > Expose the details of region extents by creating the following > > sysfs entries. > > > > /sys/bus/cxl/devices/dax_regionX/extentX.Y > > /sys/bus/cxl/devices/dax_regionX/extentX.Y/offset > > /sys/bus/cxl/devices/dax_regionX/extentX.Y/length > > /sys/bus/cxl/devices/dax_regionX/extentX.Y/tag > > > > Signed-off-by: Navneet Singh <navneet.singh@intel.com> > > Co-developed-by: Ira Weiny <ira.weiny@intel.com> > > Signed-off-by: Ira Weiny <ira.weiny@intel.com> > > > Trivial comments inline. > > Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> Thanks! > > > --- > > Changes: > > [djiang: Split sysfs docs up] > > [iweiny: Adjust sysfs docs dates] > > --- > > Documentation/ABI/testing/sysfs-bus-cxl | 32 ++++++++++++++++++ > > drivers/cxl/core/extent.c | 58 +++++++++++++++++++++++++++++++++ > > 2 files changed, 90 insertions(+) > > > > diff --git a/Documentation/ABI/testing/sysfs-bus-cxl b/Documentation/ABI/testing/sysfs-bus-cxl > > index b63ab622515f..64918180a3c9 100644 > > --- a/Documentation/ABI/testing/sysfs-bus-cxl > > +++ b/Documentation/ABI/testing/sysfs-bus-cxl > > @@ -632,3 +632,35 @@ Description: > > See Documentation/ABI/stable/sysfs-devices-node. access0 provides > > the number to the closest initiator and access1 provides the > > number to the closest CPU. > > + > > +What: /sys/bus/cxl/devices/dax_regionX/extentX.Y/offset > > +Date: December, 2024 > > +KernelVersion: v6.13 > > +Contact: linux-cxl@vger.kernel.org > > +Description: > > + (RO) [For Dynamic Capacity regions only] Users can use the > > + extent information to create DAX devices on specific extents. > > + This is done by creating and destroying DAX devices in specific > > + sequences and looking at the mappings created. > > Similar to earlier patch, maybe put this doc for the directory, then > have much less duplication? > But none of the other directories are done this way so I'm inclined to keep it. > > > Extent offset > > + within the region. > > + > > +What: /sys/bus/cxl/devices/dax_regionX/extentX.Y/length > > +Date: December, 2024 > > +KernelVersion: v6.13 > > +Contact: linux-cxl@vger.kernel.org > > +Description: > > + (RO) [For Dynamic Capacity regions only] Users can use the > > + extent information to create DAX devices on specific extents. > > + This is done by creating and destroying DAX devices in specific > > + sequences and looking at the mappings created. Extent length > > + within the region. > > + > > +What: /sys/bus/cxl/devices/dax_regionX/extentX.Y/tag > > +Date: December, 2024 > > +KernelVersion: v6.13 > > +Contact: linux-cxl@vger.kernel.org > > +Description: > > + (RO) [For Dynamic Capacity regions only] Users can use the > > + extent information to create DAX devices on specific extents. > > + This is done by creating and destroying DAX devices in specific > > + sequences and looking at the mappings created. Extent tag. > > Maybe say we are treating it as a UUID? ok... How about? <quote> ... looking at the mappings created. UUID extent tag. </quote> > > diff --git a/drivers/cxl/core/extent.c b/drivers/cxl/core/extent.c > > index 69a7614ba6a9..a1eb6e8e4f1a 100644 > > --- a/drivers/cxl/core/extent.c > > +++ b/drivers/cxl/core/extent.c > > @@ -6,6 +6,63 @@ > > > +static struct attribute *region_extent_attrs[] = { > > + &dev_attr_offset.attr, > > + &dev_attr_length.attr, > > + &dev_attr_tag.attr, > > + NULL, > No need for trailing comma (one of my 'favourite' review comments :) I'm noticing... :-D Ira
On Fri, 18 Oct 2024 13:26:14 -0500 Ira Weiny <ira.weiny@intel.com> wrote: > Jonathan Cameron wrote: > > On Mon, 07 Oct 2024 18:16:28 -0500 > > ira.weiny@intel.com wrote: > > > > > From: Navneet Singh <navneet.singh@intel.com> > > > > > > Extent information can be helpful to the user to coordinate memory usage > > > with the external orchestrator and FM. > > > > > > Expose the details of region extents by creating the following > > > sysfs entries. > > > > > > /sys/bus/cxl/devices/dax_regionX/extentX.Y > > > /sys/bus/cxl/devices/dax_regionX/extentX.Y/offset > > > /sys/bus/cxl/devices/dax_regionX/extentX.Y/length > > > /sys/bus/cxl/devices/dax_regionX/extentX.Y/tag > > > > > > Signed-off-by: Navneet Singh <navneet.singh@intel.com> > > > Co-developed-by: Ira Weiny <ira.weiny@intel.com> > > > Signed-off-by: Ira Weiny <ira.weiny@intel.com> > > > > > Trivial comments inline. > > > > Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> > > Thanks! > > > > > > --- > > > Changes: > > > [djiang: Split sysfs docs up] > > > [iweiny: Adjust sysfs docs dates] > > > --- > > > Documentation/ABI/testing/sysfs-bus-cxl | 32 ++++++++++++++++++ > > > drivers/cxl/core/extent.c | 58 +++++++++++++++++++++++++++++++++ > > > 2 files changed, 90 insertions(+) > > > > > > diff --git a/Documentation/ABI/testing/sysfs-bus-cxl b/Documentation/ABI/testing/sysfs-bus-cxl > > > index b63ab622515f..64918180a3c9 100644 > > > --- a/Documentation/ABI/testing/sysfs-bus-cxl > > > +++ b/Documentation/ABI/testing/sysfs-bus-cxl > > > @@ -632,3 +632,35 @@ Description: > > > See Documentation/ABI/stable/sysfs-devices-node. access0 provides > > > the number to the closest initiator and access1 provides the > > > number to the closest CPU. > > > + > > > +What: /sys/bus/cxl/devices/dax_regionX/extentX.Y/offset > > > +Date: December, 2024 > > > +KernelVersion: v6.13 > > > +Contact: linux-cxl@vger.kernel.org > > > +Description: > > > + (RO) [For Dynamic Capacity regions only] Users can use the > > > + extent information to create DAX devices on specific extents. > > > + This is done by creating and destroying DAX devices in specific > > > + sequences and looking at the mappings created. > > > > Similar to earlier patch, maybe put this doc for the directory, then > > have much less duplication? > > > > But none of the other directories are done this way so I'm inclined to keep it. Fair enough. Maybe a topic for a future cleanup to reduce duplication. > > > > > > Extent offset > > > + within the region. > > > + > > > +What: /sys/bus/cxl/devices/dax_regionX/extentX.Y/length > > > +Date: December, 2024 > > > +KernelVersion: v6.13 > > > +Contact: linux-cxl@vger.kernel.org > > > +Description: > > > + (RO) [For Dynamic Capacity regions only] Users can use the > > > + extent information to create DAX devices on specific extents. > > > + This is done by creating and destroying DAX devices in specific > > > + sequences and looking at the mappings created. Extent length > > > + within the region. > > > + > > > +What: /sys/bus/cxl/devices/dax_regionX/extentX.Y/tag > > > +Date: December, 2024 > > > +KernelVersion: v6.13 > > > +Contact: linux-cxl@vger.kernel.org > > > +Description: > > > + (RO) [For Dynamic Capacity regions only] Users can use the > > > + extent information to create DAX devices on specific extents. > > > + This is done by creating and destroying DAX devices in specific > > > + sequences and looking at the mappings created. Extent tag. > > > > Maybe say we are treating it as a UUID? > > ok... How about? > > <quote> > ... looking at the mappings created. UUID extent tag. That's fine. > </quote> > > > > diff --git a/drivers/cxl/core/extent.c b/drivers/cxl/core/extent.c > > > index 69a7614ba6a9..a1eb6e8e4f1a 100644 > > > --- a/drivers/cxl/core/extent.c > > > +++ b/drivers/cxl/core/extent.c > > > @@ -6,6 +6,63 @@ > > > > > +static struct attribute *region_extent_attrs[] = { > > > + &dev_attr_offset.attr, > > > + &dev_attr_length.attr, > > > + &dev_attr_tag.attr, > > > + NULL, > > No need for trailing comma (one of my 'favourite' review comments :) > > I'm noticing... :-D Maybe I'll one day add to checkpatch. If it weren't written in perl I'd do it now ;) Jonathan > > Ira >
© 2016 - 2024 Red Hat, Inc.