]> Git Repo - linux.git/blob - arch/loongarch/kernel/kfpu.c
Merge tag 'amd-drm-next-6.5-2023-06-09' of https://gitlab.freedesktop.org/agd5f/linux...
[linux.git] / arch / loongarch / kernel / kfpu.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright (C) 2023 Loongson Technology Corporation Limited
4  */
5
6 #include <linux/cpu.h>
7 #include <linux/init.h>
8 #include <asm/fpu.h>
9 #include <asm/smp.h>
10
11 static DEFINE_PER_CPU(bool, in_kernel_fpu);
12
13 void kernel_fpu_begin(void)
14 {
15         preempt_disable();
16
17         WARN_ON(this_cpu_read(in_kernel_fpu));
18
19         this_cpu_write(in_kernel_fpu, true);
20
21         if (!is_fpu_owner())
22                 enable_fpu();
23         else
24                 _save_fp(&current->thread.fpu);
25
26         write_fcsr(LOONGARCH_FCSR0, 0);
27 }
28 EXPORT_SYMBOL_GPL(kernel_fpu_begin);
29
30 void kernel_fpu_end(void)
31 {
32         WARN_ON(!this_cpu_read(in_kernel_fpu));
33
34         if (!is_fpu_owner())
35                 disable_fpu();
36         else
37                 _restore_fp(&current->thread.fpu);
38
39         this_cpu_write(in_kernel_fpu, false);
40
41         preempt_enable();
42 }
43 EXPORT_SYMBOL_GPL(kernel_fpu_end);
This page took 0.035172 seconds and 4 git commands to generate.