diff --git a/include/os/freebsd/spl/sys/simd_powerpc.h b/include/os/freebsd/spl/sys/simd_powerpc.h index 7e7abd992..5596f35a6 100644 --- a/include/os/freebsd/spl/sys/simd_powerpc.h +++ b/include/os/freebsd/spl/sys/simd_powerpc.h @@ -49,11 +49,18 @@ #include #include +#include -#define kfpu_allowed() 0 +#define kfpu_allowed() 1 #define kfpu_initialize(tsk) do {} while (0) -#define kfpu_begin() do {} while (0) -#define kfpu_end() do {} while (0) +#define kfpu_begin() { \ + if (__predict_false(!is_fpu_kern_thread(0))) \ + fpu_kern_enter(PCPU_GET(curthread), NULL, FPU_KERN_NOCTX);\ +} +#define kfpu_end() { \ + if (__predict_false(PCPU_GET(curpcb)->pcb_flags & PCB_KERN_FPU_NOSAVE))\ + fpu_kern_leave(PCPU_GET(curthread), NULL); \ +} #define kfpu_init() (0) #define kfpu_fini() do {} while (0)