From: Sebastian Andrzej Siewior Date: Fri, 8 Nov 2024 10:39:33 +0000 (+0100) Subject: scftorture: Move memory allocation outside of preempt_disable region. X-Git-Tag: v6.13-rc1~200^2~2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=64bdaf963c3ac04a67c8491bea2d0ecfc7d5da96;p=thirdparty%2Fkernel%2Flinux.git scftorture: Move memory allocation outside of preempt_disable region. Memory allocations can not happen within regions with explicit disabled preemption PREEMPT_RT. The problem is that the locking structures underneath are sleeping locks. Move the memory allocation outside of the preempt-disabled section. Keep the GFP_ATOMIC for the allocation to behave like a "ememergncy allocation". Tested-by: Paul E. McKenney Signed-off-by: Sebastian Andrzej Siewior Reviewed-by: Boqun Feng Tested-by: Boqun Feng Signed-off-by: Paul E. McKenney --- diff --git a/kernel/scftorture.c b/kernel/scftorture.c index 654702f75c54b..e3c60f6dd5477 100644 --- a/kernel/scftorture.c +++ b/kernel/scftorture.c @@ -320,10 +320,6 @@ static void scftorture_invoke_one(struct scf_statistics *scfp, struct torture_ra struct scf_check *scfcp = NULL; struct scf_selector *scfsp = scf_sel_rand(trsp); - if (use_cpus_read_lock) - cpus_read_lock(); - else - preempt_disable(); if (scfsp->scfs_prim == SCF_PRIM_SINGLE || scfsp->scfs_wait) { scfcp = kmalloc(sizeof(*scfcp), GFP_ATOMIC); if (!scfcp) { @@ -337,6 +333,10 @@ static void scftorture_invoke_one(struct scf_statistics *scfp, struct torture_ra scfcp->scfc_rpc = false; } } + if (use_cpus_read_lock) + cpus_read_lock(); + else + preempt_disable(); switch (scfsp->scfs_prim) { case SCF_PRIM_RESCHED: if (IS_BUILTIN(CONFIG_SCF_TORTURE_TEST)) {