]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
arm_mpam: Use non-atomic bitops when modifying feature bitmap
authorBen Horgan <ben.horgan@arm.com>
Mon, 12 Jan 2026 16:58:29 +0000 (16:58 +0000)
committerCatalin Marinas <catalin.marinas@arm.com>
Fri, 16 Jan 2026 12:04:20 +0000 (12:04 +0000)
In the test__props_mismatch() kunit test we rely on the struct mpam_props
being packed to ensure memcmp doesn't consider packing. Making it packed
reduces the alignment of the features bitmap and so breaks a requirement
for the use of atomics. As we don't rely on the set/clear of these bits
being atomic, just make them non-atomic.

Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com>
Signed-off-by: Ben Horgan <ben.horgan@arm.com>
Fixes: 8c90dc68a5de ("arm_mpam: Probe the hardware features resctrl supports")
Reviewed-by: Gavin Shan <gshan@redhat.com>
Tested-by: Shaopeng Tan <tan.shaopeng@jp.fujitsu.com>
Tested-by: Peter Newman <peternewman@google.com>
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
drivers/resctrl/mpam_internal.h

index 17cdc3080d585ad19a2ab332b04a90e30e2e10d6..e8971842b124f23c39d76348057c384581e2a39b 100644 (file)
@@ -200,8 +200,12 @@ struct mpam_props {
 } PACKED_FOR_KUNIT;
 
 #define mpam_has_feature(_feat, x)     test_bit(_feat, (x)->features)
-#define mpam_set_feature(_feat, x)     set_bit(_feat, (x)->features)
-#define mpam_clear_feature(_feat, x)   clear_bit(_feat, (x)->features)
+/*
+ * The non-atomic get/set operations are used because if struct mpam_props is
+ * packed, the alignment requirements for atomics aren't met.
+ */
+#define mpam_set_feature(_feat, x)     __set_bit(_feat, (x)->features)
+#define mpam_clear_feature(_feat, x)   __clear_bit(_feat, (x)->features)
 
 /* The values for MSMON_CFG_MBWU_FLT.RWBW */
 enum mon_filter_options {