powerpc/rtas: Add for_each_rtas_function() iterator
authorNathan Lynch <nathanl@linux.ibm.com>
Tue, 12 Dec 2023 17:01:49 +0000 (11:01 -0600)
committerMichael Ellerman <mpe@ellerman.id.au>
Wed, 13 Dec 2023 10:38:20 +0000 (21:38 +1100)
Add a convenience macro for iterating over every element of the
internal function table and convert the one site that can use it. An
additional user of the macro is anticipated in changes to follow.

Reviewed-by: "Aneesh Kumar K.V (IBM)" <aneesh.kumar@kernel.org>
Signed-off-by: Nathan Lynch <nathanl@linux.ibm.com>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://msgid.link/20231212-papr-sys_rtas-vs-lockdown-v6-2-e9eafd0c8c6c@linux.ibm.com
arch/powerpc/kernel/rtas.c

index ce37dc9860ef842689b3e21663ef951d6ddbcfc2..ae9b10c954a1ba66a198c19a588f11c75dc448ec 100644 (file)
@@ -454,6 +454,11 @@ static struct rtas_function rtas_function_table[] __ro_after_init = {
        },
 };
 
+#define for_each_rtas_function(funcp)                                       \
+       for (funcp = &rtas_function_table[0];                               \
+            funcp < &rtas_function_table[ARRAY_SIZE(rtas_function_table)]; \
+            ++funcp)
+
 /*
  * Nearly all RTAS calls need to be serialized. All uses of the
  * default rtas_args block must hold rtas_lock.
@@ -525,10 +530,10 @@ static DEFINE_XARRAY(rtas_token_to_function_xarray);
 
 static int __init rtas_token_to_function_xarray_init(void)
 {
+       const struct rtas_function *func;
        int err = 0;
 
-       for (size_t i = 0; i < ARRAY_SIZE(rtas_function_table); ++i) {
-               const struct rtas_function *func = &rtas_function_table[i];
+       for_each_rtas_function(func) {
                const s32 token = func->token;
 
                if (token == RTAS_UNKNOWN_SERVICE)