]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
fs/resctrl: Consider sparse masks when initializing new group's allocation
authorReinette Chatre <reinette.chatre@intel.com>
Tue, 18 Nov 2025 00:42:45 +0000 (16:42 -0800)
committerBorislav Petkov (AMD) <bp@alien8.de>
Tue, 18 Nov 2025 20:10:56 +0000 (21:10 +0100)
A new resource group is intended to be created with sane defaults. For a cache
resource this means all cache portions the new group could possibly allocate
into. This includes unused cache portions and shareable cache portions used by
other groups and hardware.

New resource group creation does not take sparse masks into account. After
determining the bitmask reflecting the new group's possible allocations the
bitmask is forced to be contiguous even if the system supports sparse masks.
For example, a new group could by default allocate into a large portion of
cache represented by 0xff0f, but it is instead created with a mask of 0xf.

Do not force a contiguous allocation range if the system supports sparse masks.

Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Link: https://patch.msgid.link/abbbb008bc09d982d715e79d3b885c10f92c64e0.1763426240.git.reinette.chatre@intel.com
fs/resctrl/rdtgroup.c

index 0320360cd7a6ebff17da074da6c8da3bbf52b126..41ce4b377af42834b1a899441cf22336084c88cd 100644 (file)
@@ -3383,11 +3383,12 @@ static u32 cbm_ensure_valid(u32 _val, struct rdt_resource *r)
 {
        unsigned int cbm_len = r->cache.cbm_len;
        unsigned long first_bit, zero_bit;
-       unsigned long val = _val;
+       unsigned long val;
 
-       if (!val)
-               return 0;
+       if (!_val || r->cache.arch_has_sparse_bitmasks)
+               return _val;
 
+       val = _val;
        first_bit = find_first_bit(&val, cbm_len);
        zero_bit = find_next_zero_bit(&val, cbm_len, first_bit);