From: Frederic Weisbecker Date: Tue, 15 Mar 2022 15:33:38 +0000 (+0100) Subject: rcutorture: Call preempt_schedule() through static call/key X-Git-Tag: v5.19-rc1~252^2~1^6 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=bd6c375b92c3f367e184d164e12952e4b9d9fb4f;p=thirdparty%2Fkernel%2Flinux.git rcutorture: Call preempt_schedule() through static call/key The rcutorture test suite sometimess triggers a random scheduler preemption call while simulating a read delay. Unfortunately, its direct call to preempt_schedule() bypasses the static call/key filter used by CONFIG_PREEMPT_DYNAMIC. This breaks the no-preempt assumption when the dynamic preemption mode is "none". For example, rcu_blocking_is_gp() is fooled and abbreviates grace periods when the CPU runs in no-preempt UP mode. Fix this by making torture_preempt_schedule() call __preempt_schedule(), which uses the static call/key. Reported-by: Paul E. McKenney Signed-off-by: Frederic Weisbecker Signed-off-by: Paul E. McKenney --- diff --git a/include/linux/torture.h b/include/linux/torture.h index 63fa4196e51cb..7038104463e48 100644 --- a/include/linux/torture.h +++ b/include/linux/torture.h @@ -118,7 +118,7 @@ void _torture_stop_kthread(char *m, struct task_struct **tp); _torture_stop_kthread("Stopping " #n " task", &(tp)) #ifdef CONFIG_PREEMPTION -#define torture_preempt_schedule() preempt_schedule() +#define torture_preempt_schedule() __preempt_schedule() #else #define torture_preempt_schedule() do { } while (0) #endif