• Huacai Chen's avatar
    LoongArch: Clear FPU/SIMD thread info flags for kernel thread · e428e961
    Huacai Chen authored
    If a kernel thread is created by a user thread, it may carry FPU/SIMD
    thread info flags (TIF_USEDFPU, TIF_USEDSIMD, etc.). Then it will be
    considered as a fpu owner and kernel try to save its FPU/SIMD context
    and cause such errors:
    
    [   41.518931] do_fpu invoked from kernel context![#1]:
    [   41.523933] CPU: 1 PID: 395 Comm: iou-wrk-394 Not tainted 6.1.0-rc5+ #217
    [   41.530757] Hardware name: Loongson Loongson-3A5000-7A1000-1w-CRB/Loongson-LS3A5000-7A1000-1w-CRB, BIOS vUDK2018-LoongArch-V2.0.pre-beta8 08/18/2022
    [   41.544064] $ 0   : 0000000000000000 90000000011e9468 9000000106c7c000 9000000106c7fcf0
    [   41.552101] $ 4   : 9000000106305d40 9000000106689800 9000000106c7fd08 0000000003995818
    [   41.560138] $ 8   : 0000000000000001 90000000009a72e4 0000000000000020 fffffffffffffffc
    [   41.568174] $12   : 0000000000000000 0000000000000000 0000000000000020 00000009aab7e130
    [   41.576211] $16   : 00000000000001ff 0000000000000407 0000000000000001 0000000000000000
    [   41.584247] $20   : 0000000000000000 0000000000000001 9000000106c7fd70 90000001002f0400
    [   41.592284] $24   : 0000000000000000 900000000178f740 90000000011e9834 90000001063057c0
    [   41.600320] $28   : 0000000000000000 0000000000000001 9000000006826b40 9000000106305140
    [   41.608356] era   : 9000000000228848 _save_fp+0x0/0xd8
    [   41.613542] ra    : 90000000011e9468 __schedule+0x568/0x8d0
    [   41.619160] CSR crmd: 000000b0
    [   41.619163] CSR prmd: 00000000
    [   41.622359] CSR euen: 00000000
    [   41.625558] CSR ecfg: 00071c1c
    [   41.628756] CSR estat: 000f0000
    [   41.635239] ExcCode : f (SubCode 0)
    [   41.638783] PrId  : 0014c010 (Loongson-64bit)
    [   41.643191] Modules linked in: acpi_ipmi vfat fat ipmi_si ipmi_devintf cfg80211 ipmi_msghandler rfkill fuse efivarfs
    [   41.653734] Process iou-wrk-394 (pid: 395, threadinfo=0000000004ebe913, task=00000000636fa1be)
    [   41.662375] Stack : 00000000ffff0875 9000000006800ec0 9000000006800ec0 90000000002d57e0
    [   41.670412]         0000000000000001 0000000000000000 9000000106535880 0000000000000001
    [   41.678450]         9000000105291800 0000000000000000 9000000105291838 900000000178e000
    [   41.686487]         9000000106c7fd90 9000000106305140 0000000000000001 90000000011e9834
    [   41.694523]         00000000ffff0875 90000000011f034c 9000000105291838 9000000105291830
    [   41.702561]         0000000000000000 9000000006801440 00000000ffff0875 90000000002d48c0
    [   41.710597]         9000000128800001 9000000106305140 9000000105291838 9000000105291838
    [   41.718634]         9000000105291830 9000000107811740 9000000105291848 90000000009bf1e0
    [   41.726672]         9000000105291830 9000000107811748 2d6b72772d756f69 0000000000343933
    [   41.734708]         0000000000000000 0000000000000000 0000000000000000 0000000000000000
    [   41.742745]         ...
    [   41.745252] Call Trace:
    [   42.197868] [<9000000000228848>] _save_fp+0x0/0xd8
    [   42.205214] [<90000000011ed468>] __schedule+0x568/0x8d0
    [   42.210485] [<90000000011ed834>] schedule+0x64/0xd4
    [   42.215411] [<90000000011f434c>] schedule_timeout+0x88/0x188
    [   42.221115] [<90000000009c36d0>] io_wqe_worker+0x184/0x350
    [   42.226645] [<9000000000221cf0>] ret_from_kernel_thread+0xc/0x9c
    
    This can be easily triggered by ltp testcase syscalls/io_uring02 and it
    can also be easily fixed by clearing the FPU/SIMD thread info flags for
    kernel threads in copy_thread().
    
    Cc: stable@vger.kernel.org
    Reported-by: default avatarQi Hu <huqi@loongson.cn>
    Signed-off-by: default avatarHuacai Chen <chenhuacai@loongson.cn>
    e428e961
process.c 8.73 KB