Commit db25a962 authored by Michael Ellerman's avatar Michael Ellerman
Browse files

powerpc: Check only single values are passed to CPU/MMU feature checks



cpu_has_feature()/mmu_has_feature() are only able to check a single
feature at a time, but there is no enforcement of that.

In fact, as fixed in the previous commit, there was code that was
passing multiple values to cpu_has_feature().

So add a check that only a single feature is passed using popcount.

Note that the test allows 0 or 1 bits to be set, because some code
relies on cpu_has_feature(0) being false, the check with
CPU_FTRS_POSSIBLE ensures that. See for example CPU_FTR_PPC_LE.

Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
Link: https://msgid.link/20240509121248.270878-3-mpe@ellerman.id.au
parent 14196e47
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ static __always_inline bool cpu_has_feature(unsigned long feature)
	int i;

	BUILD_BUG_ON(!__builtin_constant_p(feature));
	BUILD_BUG_ON(__builtin_popcountl(feature) > 1);

#ifdef CONFIG_JUMP_LABEL_FEATURE_CHECK_DEBUG
	if (!static_key_feature_checks_initialized) {
+1 −0
Original line number Diff line number Diff line
@@ -240,6 +240,7 @@ static __always_inline bool mmu_has_feature(unsigned long feature)
	int i;

	BUILD_BUG_ON(!__builtin_constant_p(feature));
	BUILD_BUG_ON(__builtin_popcountl(feature) > 1);

#ifdef CONFIG_JUMP_LABEL_FEATURE_CHECK_DEBUG
	if (!static_key_feature_checks_initialized) {