Hi Reinette,
On 8/7/2025 8:54 PM, Reinette Chatre wrote:
Hi Babu
On 8/5/25 4:30 PM, Babu Moger wrote:
When the io_alloc feature is enabled, a portion of the cache can be
configured for shared use between hardware and software.
Update the bit_usage representation to reflect the io_alloc configuration.
... but no update to the bit_usage docs :(
Yes. Missed that. Will update the text.
Signed-off-by: Babu Moger <babu.moger@xxxxxxx>
---
..
---
Documentation/filesystems/resctrl.rst | 19 +++++++++++++------
fs/resctrl/ctrlmondata.c | 2 +-
fs/resctrl/internal.h | 2 ++
fs/resctrl/rdtgroup.c | 18 ++++++++++++++++--
4 files changed, 32 insertions(+), 9 deletions(-)
diff --git a/Documentation/filesystems/resctrl.rst b/Documentation/filesystems/resctrl.rst
index d955e8525af0..1e46231b929c 100644
--- a/Documentation/filesystems/resctrl.rst
+++ b/Documentation/filesystems/resctrl.rst
@@ -90,12 +90,19 @@ related to allocation:
must be set when writing a mask.
"shareable_bits":
- Bitmask of shareable resource with other executing
- entities (e.g. I/O). User can use this when
- setting up exclusive cache partitions. Note that
- some platforms support devices that have their
- own settings for cache use which can over-ride
- these bits.
+ Bitmask of shareable resource with other executing entities
+ (e.g. I/O). Applies to all instances of this resource. User
+ can use this when setting up exclusive cache partitions.
+ Note that some platforms support devices that have their
+ own settings for cache use which can over-ride these bits.
+
+ When "io_alloc" is enabled, a portion of each cache instance can
+ be configured for shared use between hardware and software.
+ "bit_usage" should be used to see which portions of each cache
+ instance is configured for hardware use via "io_alloc" feature
+ because every cache instance can have its "io_alloc" bitmask
+ configured independently via io_alloc_cbm.
+
"bit_usage":
More ignored feedback. I was expecting changes to the "bit_usage" section.
https://lore.kernel.org/lkml/94d075e0-6703-449f-9c0c-8e5973349dff@xxxxxxxxx/
Yea. Added following text now.
diff --git a/Documentation/filesystems/resctrl.rst
b/Documentation/filesystems/resctrl.rst
index 273c9c9389a4..0a56829407c9 100644
--- a/Documentation/filesystems/resctrl.rst
+++ b/Documentation/filesystems/resctrl.rst
@@ -124,8 +124,11 @@ related to allocation:
"X":
Corresponding region is available for
sharing and
used by hardware and software. These are the
- bits that appear in "shareable_bits" as
- well as a resource group's allocation.
+ bits that appear in "shareable_bits" as
well as a
+ resource group's allocation. When io_alloc
is enabled,
+ the capacity bitmasks configured via
io_alloc_cbm will
+ also appear here, indicating the cache
regions shared
+ with I/O devices.
"S":
Corresponding region is used by software
and available for sharing.
Annotated capacity bitmasks showing how all
instances of the resource are used. The legend is:
diff --git a/fs/resctrl/ctrlmondata.c b/fs/resctrl/ctrlmondata.c
index 1f69117f96f8..cfa766319189 100644
--- a/fs/resctrl/ctrlmondata.c
+++ b/fs/resctrl/ctrlmondata.c
@@ -754,7 +754,7 @@ static int resctrl_io_alloc_init_cbm(struct resctrl_schema *s, u32 closid)
* resource. Note that if Code Data Prioritization (CDP) is enabled, the number
* of available CLOSIDs is reduced by half.
*/
-static u32 resctrl_io_alloc_closid(struct rdt_resource *r)
+u32 resctrl_io_alloc_closid(struct rdt_resource *r)
{
if (resctrl_arch_get_cdp_enabled(r->rid))
return resctrl_arch_get_num_closid(r) / 2 - 1;
diff --git a/fs/resctrl/internal.h b/fs/resctrl/internal.h
index 5467c3ad1b6d..98b87725508b 100644
--- a/fs/resctrl/internal.h
+++ b/fs/resctrl/internal.h
@@ -395,6 +395,8 @@ int resctrl_io_alloc_cbm_show(struct kernfs_open_file *of, struct seq_file *seq,
ssize_t resctrl_io_alloc_cbm_write(struct kernfs_open_file *of, char *buf,
size_t nbytes, loff_t off);
+u32 resctrl_io_alloc_closid(struct rdt_resource *r);
+
const char *rdtgroup_name_by_closid(int closid);
#ifdef CONFIG_RESCTRL_FS_PSEUDO_LOCK
diff --git a/fs/resctrl/rdtgroup.c b/fs/resctrl/rdtgroup.c
index a3ab2851c6da..b85c2622c94b 100644
--- a/fs/resctrl/rdtgroup.c
+++ b/fs/resctrl/rdtgroup.c
@@ -1068,15 +1068,17 @@ static int rdt_bit_usage_show(struct kernfs_open_file *of,
cpus_read_lock();
mutex_lock(&rdtgroup_mutex);
- hw_shareable = r->cache.shareable_bits;
list_for_each_entry(dom, &r->ctrl_domains, hdr.list) {
if (sep)
seq_putc(seq, ';');
+ hw_shareable = r->cache.shareable_bits;
sw_shareable = 0;
exclusive = 0;
seq_printf(seq, "%d=", dom->hdr.id);
for (i = 0; i < closids_supported(); i++) {
- if (!closid_allocated(i))
+ if (!closid_allocated(i) ||
+ (resctrl_arch_get_io_alloc_enabled(r) &&
+ i == resctrl_io_alloc_closid(r)))
continue;
ctrl_val = resctrl_arch_get_config(r, dom, i,
s->conf_type);
@@ -1104,6 +1106,18 @@ static int rdt_bit_usage_show(struct kernfs_open_file *of,
break;
}
}
+
+ /*
+ * When the "io_alloc" feature is enabled, a portion of the
+ * cache is configured for shared use between hardware and software.
Please add snippet to comment that highlights that CBM of CDP peers are kept in sync and the
CBM used for I/O can thus be obtained from either.
Sure. Thanks
Babu