projects/linux·blob master · refs

28 lines · 560 B

1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * Copyright (C) 2023 SiFive
4 */
5
6#include <linux/export.h>
7#include <linux/preempt.h>
8
9#include <asm/csr.h>
10#include <asm/fpu.h>
11#include <asm/processor.h>
12#include <asm/switch_to.h>
13
14void kernel_fpu_begin(void)
15{
16 preempt_disable();
17 fstate_save(current, task_pt_regs(current));
18 csr_set(CSR_SSTATUS, SR_FS);
19}
20EXPORT_SYMBOL_GPL(kernel_fpu_begin);
21
22void kernel_fpu_end(void)
23{
24 csr_clear(CSR_SSTATUS, SR_FS);
25 fstate_restore(current, task_pt_regs(current));
26 preempt_enable();
27}
28EXPORT_SYMBOL_GPL(kernel_fpu_end);