On Fri, May 21, 2021 at 1:16 PM Marco Elver <elver@xxxxxxxxxx> wrote: > > Unconditionally use unbound work queue, and not just if > wq_power_efficient is true. Because if the system is idle, KFENCE may > wait, and by being run on the unbound work queue, we permit the > scheduler to make better scheduling decisions and not require pinning > KFENCE to the same CPU upon waking up. > > Fixes: 36f0b35d0894 ("kfence: use power-efficient work queue to run delayed work") > Reported-by: Hillf Danton <hdanton@xxxxxxxx> > Signed-off-by: Marco Elver <elver@xxxxxxxxxx> Reviewed-by: Alexander Potapenko <glider@xxxxxxxxxx> > --- > mm/kfence/core.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/mm/kfence/core.c b/mm/kfence/core.c > index 4d21ac44d5d3..d7666ace9d2e 100644 > --- a/mm/kfence/core.c > +++ b/mm/kfence/core.c > @@ -636,7 +636,7 @@ static void toggle_allocation_gate(struct work_struct *work) > /* Disable static key and reset timer. */ > static_branch_disable(&kfence_allocation_key); > #endif > - queue_delayed_work(system_power_efficient_wq, &kfence_timer, > + queue_delayed_work(system_unbound_wq, &kfence_timer, > msecs_to_jiffies(kfence_sample_interval)); > } > static DECLARE_DELAYED_WORK(kfence_timer, toggle_allocation_gate); > @@ -666,7 +666,7 @@ void __init kfence_init(void) > } > > WRITE_ONCE(kfence_enabled, true); > - queue_delayed_work(system_power_efficient_wq, &kfence_timer, 0); > + queue_delayed_work(system_unbound_wq, &kfence_timer, 0); > pr_info("initialized - using %lu bytes for %d objects at 0x%p-0x%p\n", KFENCE_POOL_SIZE, > CONFIG_KFENCE_NUM_OBJECTS, (void *)__kfence_pool, > (void *)(__kfence_pool + KFENCE_POOL_SIZE)); > -- > 2.31.1.818.g46aad6cb9e-goog > -- Alexander Potapenko Software Engineer Google Germany GmbH Erika-Mann-Straße, 33 80636 München Geschäftsführer: Paul Manicle, Halimah DeLaine Prado Registergericht und -nummer: Hamburg, HRB 86891 Sitz der Gesellschaft: Hamburg