[PATCH v2 2/4] powerpc/rtas: make all exports GPL
Laurent Dufour
ldufour at linux.ibm.com
Wed Jan 25 03:18:02 AEDT 2023
On 24/01/2023 15:04:46, Nathan Lynch wrote:
> The first symbol exports of RTAS functions and data came with the (now
> removed) scanlog driver in 2003:
>
> https://git.kernel.org/pub/scm/linux/kernel/git/tglx/history.git/commit/?id=f92e361842d5251e50562b09664082dcbd0548bb
>
> At the time this was applied, EXPORT_SYMBOL_GPL() was very new, and
> the exports of rtas_call() etc have remained non-GPL. As new APIs have
> been added to the RTAS subsystem, their symbol exports have followed
> the convention set by existing code.
>
> However, the historical evidence is that RTAS function exports have
> been added over time only to satisfy the needs of in-kernel users, and
> these clients must have fairly intimate knowledge of how the APIs work
> to use them safely. No out of tree users are known, and future ones
> seem unlikely.
>
> Arguably the default for RTAS symbols should have become
> EXPORT_SYMBOL_GPL once it was available. Let's make it so now, and
> exceptions can be evaluated as needed.
I also think this is unlikely to happen. But in the case a non GPL driver
needs one of this symbol, I guess it will be hard to move backward once it
is upstream. Crossing fingers!
Reviewed-by: Laurent Dufour <laurent.dufour at fr.ibm.com>
>
> Signed-off-by: Nathan Lynch <nathanl at linux.ibm.com>
> ---
> arch/powerpc/kernel/rtas.c | 30 +++++++++++++++---------------
> 1 file changed, 15 insertions(+), 15 deletions(-)
>
> diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c
> index 6c5716b19d69..e60e2f5af7b9 100644
> --- a/arch/powerpc/kernel/rtas.c
> +++ b/arch/powerpc/kernel/rtas.c
> @@ -65,10 +65,10 @@ struct rtas_t rtas = {
> };
>
> DEFINE_SPINLOCK(rtas_data_buf_lock);
> -EXPORT_SYMBOL(rtas_data_buf_lock);
> +EXPORT_SYMBOL_GPL(rtas_data_buf_lock);
>
> char rtas_data_buf[RTAS_DATA_BUF_SIZE] __cacheline_aligned;
> -EXPORT_SYMBOL(rtas_data_buf);
> +EXPORT_SYMBOL_GPL(rtas_data_buf);
>
> unsigned long rtas_rmo_buf;
>
> @@ -77,7 +77,7 @@ unsigned long rtas_rmo_buf;
> * This is done like this so rtas_flash can be a module.
> */
> void (*rtas_flash_term_hook)(int);
> -EXPORT_SYMBOL(rtas_flash_term_hook);
> +EXPORT_SYMBOL_GPL(rtas_flash_term_hook);
>
> /* RTAS use home made raw locking instead of spin_lock_irqsave
> * because those can be called from within really nasty contexts
> @@ -325,7 +325,7 @@ void rtas_progress(char *s, unsigned short hex)
>
> spin_unlock(&progress_lock);
> }
> -EXPORT_SYMBOL(rtas_progress); /* needed by rtas_flash module */
> +EXPORT_SYMBOL_GPL(rtas_progress); /* needed by rtas_flash module */
>
> int rtas_token(const char *service)
> {
> @@ -335,13 +335,13 @@ int rtas_token(const char *service)
> tokp = of_get_property(rtas.dev, service, NULL);
> return tokp ? be32_to_cpu(*tokp) : RTAS_UNKNOWN_SERVICE;
> }
> -EXPORT_SYMBOL(rtas_token);
> +EXPORT_SYMBOL_GPL(rtas_token);
>
> int rtas_service_present(const char *service)
> {
> return rtas_token(service) != RTAS_UNKNOWN_SERVICE;
> }
> -EXPORT_SYMBOL(rtas_service_present);
> +EXPORT_SYMBOL_GPL(rtas_service_present);
>
> #ifdef CONFIG_RTAS_ERROR_LOGGING
>
> @@ -356,7 +356,7 @@ int rtas_get_error_log_max(void)
> {
> return rtas_error_log_max;
> }
> -EXPORT_SYMBOL(rtas_get_error_log_max);
> +EXPORT_SYMBOL_GPL(rtas_get_error_log_max);
>
> static void __init init_error_log_max(void)
> {
> @@ -584,7 +584,7 @@ int rtas_call(int token, int nargs, int nret, int *outputs, ...)
> }
> return ret;
> }
> -EXPORT_SYMBOL(rtas_call);
> +EXPORT_SYMBOL_GPL(rtas_call);
>
> /**
> * rtas_busy_delay_time() - From an RTAS status value, calculate the
> @@ -622,7 +622,7 @@ unsigned int rtas_busy_delay_time(int status)
>
> return ms;
> }
> -EXPORT_SYMBOL(rtas_busy_delay_time);
> +EXPORT_SYMBOL_GPL(rtas_busy_delay_time);
>
> /**
> * rtas_busy_delay() - helper for RTAS busy and extended delay statuses
> @@ -696,7 +696,7 @@ bool rtas_busy_delay(int status)
>
> return ret;
> }
> -EXPORT_SYMBOL(rtas_busy_delay);
> +EXPORT_SYMBOL_GPL(rtas_busy_delay);
>
> static int rtas_error_rc(int rtas_rc)
> {
> @@ -741,7 +741,7 @@ int rtas_get_power_level(int powerdomain, int *level)
> return rtas_error_rc(rc);
> return rc;
> }
> -EXPORT_SYMBOL(rtas_get_power_level);
> +EXPORT_SYMBOL_GPL(rtas_get_power_level);
>
> int rtas_set_power_level(int powerdomain, int level, int *setlevel)
> {
> @@ -759,7 +759,7 @@ int rtas_set_power_level(int powerdomain, int level, int *setlevel)
> return rtas_error_rc(rc);
> return rc;
> }
> -EXPORT_SYMBOL(rtas_set_power_level);
> +EXPORT_SYMBOL_GPL(rtas_set_power_level);
>
> int rtas_get_sensor(int sensor, int index, int *state)
> {
> @@ -777,7 +777,7 @@ int rtas_get_sensor(int sensor, int index, int *state)
> return rtas_error_rc(rc);
> return rc;
> }
> -EXPORT_SYMBOL(rtas_get_sensor);
> +EXPORT_SYMBOL_GPL(rtas_get_sensor);
>
> int rtas_get_sensor_fast(int sensor, int index, int *state)
> {
> @@ -820,7 +820,7 @@ bool rtas_indicator_present(int token, int *maxindex)
>
> return false;
> }
> -EXPORT_SYMBOL(rtas_indicator_present);
> +EXPORT_SYMBOL_GPL(rtas_indicator_present);
>
> int rtas_set_indicator(int indicator, int index, int new_value)
> {
> @@ -838,7 +838,7 @@ int rtas_set_indicator(int indicator, int index, int new_value)
> return rtas_error_rc(rc);
> return rc;
> }
> -EXPORT_SYMBOL(rtas_set_indicator);
> +EXPORT_SYMBOL_GPL(rtas_set_indicator);
>
> /*
> * Ignoring RTAS extended delay
More information about the Linuxppc-dev
mailing list