Re: [PATCH RESEND] sched: Convert paravirt_steal to new static key APIs

Shrikanth Hegde <[email protected]>
Newsgroups dev.linux.lists.virtualization,dev.linux.lists.loongarch,org.infradead.lists.linux-arm-kernel,org.infradead.lists.linux-riscv,org.kernel.vger.kvm,org.kernel.vger.linux-kernel,org.ozlabs.lists.linuxppc-dev,org.xenproject.lists.xen-devel
Message-ID <[email protected]>
Hi Hongyan.

On 8/19/26 1:42 PM, Hongyan Xia wrote:
> From: Hongyan Xia <[email protected]>
> 
> paravirt_steal_rq_enabled and paravirt_steal_enabled use raw static_key
> APIs which are now deprecated. Use the new API instead.
> 
> No functional change.
> 

FWIW, looks good to me. One minor nit.

Reviewed-by: Shrikanth Hegde <[email protected]>

> Signed-off-by: Hongyan Xia <[email protected]>
> Acked-by: Juergen Gross <[email protected]>
> ---
> Changed in RESEND:
> - Separate the original series into individual patches. They aren't easy
>    to review as a series.
> 
>   arch/arm64/kernel/paravirt.c           | 4 ++--
>   arch/loongarch/kernel/paravirt.c       | 4 ++--
>   arch/powerpc/platforms/pseries/setup.c | 4 ++--
>   arch/riscv/kernel/paravirt.c           | 4 ++--
>   arch/x86/kernel/cpu/vmware.c           | 4 ++--
>   arch/x86/kernel/kvm.c                  | 4 ++--
>   drivers/xen/time.c                     | 4 ++--
>   include/linux/sched/cputime.h          | 6 +++---
>   kernel/sched/core.c                    | 4 ++--
>   kernel/sched/cputime.c                 | 4 ++--
>   10 files changed, 21 insertions(+), 21 deletions(-)
> 
> diff --git a/arch/arm64/kernel/paravirt.c b/arch/arm64/kernel/paravirt.c
> index 572efb96b23f..30bf61d031eb 100644
> --- a/arch/arm64/kernel/paravirt.c
> +++ b/arch/arm64/kernel/paravirt.c
> @@ -157,9 +157,9 @@ int __init pv_time_init(void)
>   
>   	static_call_update(pv_steal_clock, para_steal_clock);
>   
> -	static_key_slow_inc(&paravirt_steal_enabled);
> +	static_branch_inc(&paravirt_steal_enabled);
>   	if (steal_acc)
> -		static_key_slow_inc(&paravirt_steal_rq_enabled);
> +		static_branch_inc(&paravirt_steal_rq_enabled);
>   
>   	pr_info("using stolen time PV\n");
>   
> diff --git a/arch/loongarch/kernel/paravirt.c b/arch/loongarch/kernel/paravirt.c
> index 10821cce554c..e8965a3f8082 100644
> --- a/arch/loongarch/kernel/paravirt.c
> +++ b/arch/loongarch/kernel/paravirt.c
> @@ -308,10 +308,10 @@ int __init pv_time_init(void)
>   
>   	static_call_update(pv_steal_clock, paravt_steal_clock);
>   
> -	static_key_slow_inc(&paravirt_steal_enabled);
> +	static_branch_inc(&paravirt_steal_enabled);
>   #ifdef CONFIG_PARAVIRT_TIME_ACCOUNTING
>   	if (steal_acc)
> -		static_key_slow_inc(&paravirt_steal_rq_enabled);
> +		static_branch_inc(&paravirt_steal_rq_enabled);
>   #endif
>   
>   	if (static_key_enabled(&virt_preempt_key))
> diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c
> index 1223dc961242..8dcbc4bb7025 100644
> --- a/arch/powerpc/platforms/pseries/setup.c
> +++ b/arch/powerpc/platforms/pseries/setup.c
> @@ -852,9 +852,9 @@ static void __init pSeries_setup_arch(void)
>   			static_branch_enable(&shared_processor);
>   			pv_spinlocks_init();
>   #ifdef CONFIG_PARAVIRT_TIME_ACCOUNTING
> -			static_key_slow_inc(&paravirt_steal_enabled);
> +			static_branch_inc(&paravirt_steal_enabled);
>   			if (steal_acc)
> -				static_key_slow_inc(&paravirt_steal_rq_enabled);
> +				static_branch_inc(&paravirt_steal_rq_enabled);
>   #endif
>   		}
>   
> diff --git a/arch/riscv/kernel/paravirt.c b/arch/riscv/kernel/paravirt.c
> index 5f56be79cd06..9c13a6f1ea2a 100644
> --- a/arch/riscv/kernel/paravirt.c
> +++ b/arch/riscv/kernel/paravirt.c
> @@ -116,9 +116,9 @@ int __init pv_time_init(void)
>   
>   	static_call_update(pv_steal_clock, pv_time_steal_clock);
>   
> -	static_key_slow_inc(&paravirt_steal_enabled);
> +	static_branch_inc(&paravirt_steal_enabled);
>   	if (steal_acc)
> -		static_key_slow_inc(&paravirt_steal_rq_enabled);
> +		static_branch_inc(&paravirt_steal_rq_enabled);
>   
>   	pr_info("Computing paravirt steal-time\n");
>   
> diff --git a/arch/x86/kernel/cpu/vmware.c b/arch/x86/kernel/cpu/vmware.c
> index 34b73573b108..f7ab9e7902cf 100644
> --- a/arch/x86/kernel/cpu/vmware.c
> +++ b/arch/x86/kernel/cpu/vmware.c
> @@ -328,9 +328,9 @@ static int vmware_cpu_down_prepare(unsigned int cpu)
>   static __init int activate_jump_labels(void)
>   {
>   	if (has_steal_clock) {
> -		static_key_slow_inc(&paravirt_steal_enabled);
> +		static_branch_inc(&paravirt_steal_enabled);
>   		if (steal_acc)
> -			static_key_slow_inc(&paravirt_steal_rq_enabled);
> +			static_branch_inc(&paravirt_steal_rq_enabled);
>   	}
>   
>   	return 0;
> diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c
> index dcef84da304b..d3dcd64f22c2 100644
> --- a/arch/x86/kernel/kvm.c
> +++ b/arch/x86/kernel/kvm.c
> @@ -1052,9 +1052,9 @@ const __initconst struct hypervisor_x86 x86_hyper_kvm = {
>   static __init int activate_jump_labels(void)
>   {
>   	if (has_steal_clock) {
> -		static_key_slow_inc(&paravirt_steal_enabled);
> +		static_branch_inc(&paravirt_steal_enabled);
>   		if (steal_acc)
> -			static_key_slow_inc(&paravirt_steal_rq_enabled);
> +			static_branch_inc(&paravirt_steal_rq_enabled);
>   	}
>   
>   	return 0;
> diff --git a/drivers/xen/time.c b/drivers/xen/time.c
> index a2be0a4d45b0..a02d48a2aa68 100644
> --- a/drivers/xen/time.c
> +++ b/drivers/xen/time.c
> @@ -169,7 +169,7 @@ void __init xen_time_setup_guest(void)
>   
>   	static_call_update(pv_steal_clock, xen_steal_clock);
>   
> -	static_key_slow_inc(&paravirt_steal_enabled);
> +	static_branch_inc(&paravirt_steal_enabled);
>   	if (xen_runstate_remote)
> -		static_key_slow_inc(&paravirt_steal_rq_enabled);
> +		static_branch_inc(&paravirt_steal_rq_enabled);
>   }
> diff --git a/include/linux/sched/cputime.h b/include/linux/sched/cputime.h
> index e90efaf6d26e..694126411dfe 100644
> --- a/include/linux/sched/cputime.h
> +++ b/include/linux/sched/cputime.h
> @@ -182,9 +182,9 @@ extern unsigned long long
>   task_sched_runtime(struct task_struct *task);
>   
>   #ifdef CONFIG_PARAVIRT
> -struct static_key;
> -extern struct static_key paravirt_steal_enabled;
> -extern struct static_key paravirt_steal_rq_enabled;
> +#include <linux/jump_label.h>

nit:

This looks bit odd to see includes in the middle. I know it is including
only if necessary.
maybe worth an unconditional include in the beginning?

> +DECLARE_STATIC_KEY_FALSE(paravirt_steal_enabled);
> +DECLARE_STATIC_KEY_FALSE(paravirt_steal_rq_enabled);
>   
>   #ifdef CONFIG_HAVE_PV_STEAL_CLOCK_GEN
>   u64 dummy_steal_clock(int cpu);
> diff --git a/kernel/sched/core.c b/kernel/sched/core.c
> index 5c07d53e43b5..84d090581a08 100644
> --- a/kernel/sched/core.c
> +++ b/kernel/sched/core.c
> @@ -795,7 +795,7 @@ struct rq *_task_rq_lock(struct task_struct *p, struct rq_flags *rf)
>   
>   /* Use CONFIG_PARAVIRT as this will avoid more #ifdef in arch code. */
>   #ifdef CONFIG_PARAVIRT
> -struct static_key paravirt_steal_rq_enabled;
> +DEFINE_STATIC_KEY_FALSE(paravirt_steal_rq_enabled);
>   #endif
>   
>   static void update_rq_clock_task(struct rq *rq, s64 delta)
> @@ -834,7 +834,7 @@ static void update_rq_clock_task(struct rq *rq, s64 delta)
>   	}
>   #endif
>   #ifdef CONFIG_PARAVIRT_TIME_ACCOUNTING
> -	if (static_key_false((&paravirt_steal_rq_enabled))) {
> +	if (static_branch_unlikely(&paravirt_steal_rq_enabled)) {
>   		u64 prev_steal;
>   
>   		steal = prev_steal = paravirt_steal_clock(cpu_of(rq));
> diff --git a/kernel/sched/cputime.c b/kernel/sched/cputime.c
> index 06bddaa738e5..f16970ca81d0 100644
> --- a/kernel/sched/cputime.c
> +++ b/kernel/sched/cputime.c
> @@ -255,7 +255,7 @@ void __account_forceidle_time(struct task_struct *p, u64 delta)
>    * occasion account more time than the calling functions think elapsed.
>    */
>   #ifdef CONFIG_PARAVIRT
> -struct static_key paravirt_steal_enabled;
> +DEFINE_STATIC_KEY_FALSE(paravirt_steal_enabled);
>   
>   #ifdef CONFIG_HAVE_PV_STEAL_CLOCK_GEN
>   static u64 native_steal_clock(int cpu)
> @@ -270,7 +270,7 @@ DEFINE_STATIC_CALL(pv_steal_clock, native_steal_clock);
>   static __always_inline u64 steal_account_process_time(u64 maxtime)
>   {
>   #ifdef CONFIG_PARAVIRT
> -	if (static_key_false(&paravirt_steal_enabled)) {
> +	if (static_branch_unlikely(&paravirt_steal_enabled)) {
>   		u64 steal;
>   
>   		steal = paravirt_steal_clock(smp_processor_id());
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.