lkml.org 
[lkml]   [2023]   [Feb]   [25]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH AUTOSEL 6.1 18/21] x86/fpu: Don't set TIF_NEED_FPU_LOAD for PF_IO_WORKER threads
    Date
    From: Jens Axboe <axboe@kernel.dk>

    [ Upstream commit cb3ea4b7671b7cfbac3ee609976b790aebd0bbda ]

    We don't set it on PF_KTHREAD threads as they never return to userspace,
    and PF_IO_WORKER threads are identical in that regard. As they keep
    running in the kernel until they die, skip setting the FPU flag on them.

    More of a cosmetic thing that was found while debugging and
    issue and pondering why the FPU flag is set on these threads.

    Signed-off-by: Jens Axboe <axboe@kernel.dk>
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Acked-by: Peter Zijlstra <peterz@infradead.org>
    Link: https://lore.kernel.org/r/560c844c-f128-555b-40c6-31baff27537f@kernel.dk
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    arch/x86/include/asm/fpu/sched.h | 2 +-
    arch/x86/kernel/fpu/context.h | 2 +-
    arch/x86/kernel/fpu/core.c | 2 +-
    3 files changed, 3 insertions(+), 3 deletions(-)

    diff --git a/arch/x86/include/asm/fpu/sched.h b/arch/x86/include/asm/fpu/sched.h
    index b2486b2cbc6e0..c2d6cd78ed0c2 100644
    --- a/arch/x86/include/asm/fpu/sched.h
    +++ b/arch/x86/include/asm/fpu/sched.h
    @@ -39,7 +39,7 @@ extern void fpu_flush_thread(void);
    static inline void switch_fpu_prepare(struct fpu *old_fpu, int cpu)
    {
    if (cpu_feature_enabled(X86_FEATURE_FPU) &&
    - !(current->flags & PF_KTHREAD)) {
    + !(current->flags & (PF_KTHREAD | PF_IO_WORKER))) {
    save_fpregs_to_fpstate(old_fpu);
    /*
    * The save operation preserved register state, so the
    diff --git a/arch/x86/kernel/fpu/context.h b/arch/x86/kernel/fpu/context.h
    index 958accf2ccf07..9fcfa5c4dad79 100644
    --- a/arch/x86/kernel/fpu/context.h
    +++ b/arch/x86/kernel/fpu/context.h
    @@ -57,7 +57,7 @@ static inline void fpregs_restore_userregs(void)
    struct fpu *fpu = &current->thread.fpu;
    int cpu = smp_processor_id();

    - if (WARN_ON_ONCE(current->flags & PF_KTHREAD))
    + if (WARN_ON_ONCE(current->flags & (PF_KTHREAD | PF_IO_WORKER)))
    return;

    if (!fpregs_state_valid(fpu, cpu)) {
    diff --git a/arch/x86/kernel/fpu/core.c b/arch/x86/kernel/fpu/core.c
    index dccce58201b7c..caf33486dc5ee 100644
    --- a/arch/x86/kernel/fpu/core.c
    +++ b/arch/x86/kernel/fpu/core.c
    @@ -426,7 +426,7 @@ void kernel_fpu_begin_mask(unsigned int kfpu_mask)

    this_cpu_write(in_kernel_fpu, true);

    - if (!(current->flags & PF_KTHREAD) &&
    + if (!(current->flags & (PF_KTHREAD | PF_IO_WORKER)) &&
    !test_thread_flag(TIF_NEED_FPU_LOAD)) {
    set_thread_flag(TIF_NEED_FPU_LOAD);
    save_fpregs_to_fpstate(&current->thread.fpu);
    --
    2.39.0
    \
     
     \ /
      Last update: 2023-03-27 00:35    [W:4.236 / U:0.064 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site