module: freebsd: fix aarch64 fpu handling
Just like x86, aarch64 needs to use the fpu_kern(9) API around FPU usage, otherwise we panic promptly at boot as soon as ZFS attempts to do checksum benchmarking. Reviewed-by: Richard Yao <richard.yao@alumni.stonybrook.edu> Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov> Reviewed-by: Tino Reichardt <milky-zfs@mcmilk.de> Signed-off-by: Kyle Evans <kevans@FreeBSD.org> Closes #14715
This commit is contained in:
parent
dee77f45d0
commit
d0cbd9feaf
|
@ -44,13 +44,23 @@
|
||||||
#define _FREEBSD_SIMD_AARCH64_H
|
#define _FREEBSD_SIMD_AARCH64_H
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
#include <sys/ucontext.h>
|
||||||
#include <machine/elf.h>
|
#include <machine/elf.h>
|
||||||
|
#include <machine/fpu.h>
|
||||||
#include <machine/md_var.h>
|
#include <machine/md_var.h>
|
||||||
|
#include <machine/pcb.h>
|
||||||
|
|
||||||
#define kfpu_allowed() 1
|
#define kfpu_allowed() 1
|
||||||
#define kfpu_initialize(tsk) do {} while (0)
|
#define kfpu_initialize(tsk) do {} while (0)
|
||||||
#define kfpu_begin() do {} while (0)
|
#define kfpu_begin() do { \
|
||||||
#define kfpu_end() do {} while (0)
|
if (__predict_false(!is_fpu_kern_thread(0))) \
|
||||||
|
fpu_kern_enter(curthread, NULL, FPU_KERN_NOCTX); \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define kfpu_end() do { \
|
||||||
|
if (__predict_false(curthread->td_pcb->pcb_fpflags & PCB_FP_NOSAVE)) \
|
||||||
|
fpu_kern_leave(curthread, NULL); \
|
||||||
|
} while (0)
|
||||||
#define kfpu_init() (0)
|
#define kfpu_init() (0)
|
||||||
#define kfpu_fini() do {} while (0)
|
#define kfpu_fini() do {} while (0)
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue