Index: sys/amd64/amd64/fpu.c =================================================================== --- sys/amd64/amd64/fpu.c +++ sys/amd64/amd64/fpu.c @@ -38,6 +38,7 @@ #include #include #include +#include #include #include #include @@ -1028,17 +1029,30 @@ char hwstate1[]; }; +static inline size_t __pure2 +fpu_kern_alloc_sz(u_int max_est) +{ + return (sizeof(struct fpu_kern_ctx) + XSAVE_AREA_ALIGN + max_est); +} + +static inline int __pure2 +fpu_kern_malloc_flags(u_int fpflags) +{ + return (((fpflags & FPU_KERN_NOWAIT) ? M_NOWAIT : M_WAITOK) | M_ZERO); +} + +struct fpu_kern_ctx * +fpu_kern_alloc_ctx_domainset(struct domainset *ds, u_int flags) +{ + return (malloc_domainset(fpu_kern_alloc_sz(cpu_max_ext_state_size), + M_FPUKERN_CTX, ds, fpu_kern_malloc_flags(flags))); +} + struct fpu_kern_ctx * fpu_kern_alloc_ctx(u_int flags) { - struct fpu_kern_ctx *res; - size_t sz; - - sz = sizeof(struct fpu_kern_ctx) + XSAVE_AREA_ALIGN + - cpu_max_ext_state_size; - res = malloc(sz, M_FPUKERN_CTX, ((flags & FPU_KERN_NOWAIT) ? - M_NOWAIT : M_WAITOK) | M_ZERO); - return (res); + return (malloc(fpu_kern_alloc_sz(cpu_max_ext_state_size), + M_FPUKERN_CTX, fpu_kern_malloc_flags(flags))); } void Index: sys/amd64/include/fpu.h =================================================================== --- sys/amd64/include/fpu.h +++ sys/amd64/include/fpu.h @@ -47,6 +47,7 @@ #ifdef _KERNEL +struct domainset; struct fpu_kern_ctx; #define PCB_USER_FPU(pcb) (((pcb)->pcb_flags & PCB_KERNFPU) == 0) @@ -71,6 +72,8 @@ int fputrap_x87(void); void fpuuserinited(struct thread *td); struct fpu_kern_ctx *fpu_kern_alloc_ctx(u_int flags); +struct fpu_kern_ctx *fpu_kern_alloc_ctx_domainset(struct domainset *, + u_int flags); void fpu_kern_free_ctx(struct fpu_kern_ctx *ctx); void fpu_kern_enter(struct thread *td, struct fpu_kern_ctx *ctx, u_int flags); Index: sys/crypto/aesni/aesni.c =================================================================== --- sys/crypto/aesni/aesni.c +++ sys/crypto/aesni/aesni.c @@ -36,6 +36,7 @@ #include #include +#include #include #include #include @@ -179,7 +180,8 @@ M_WAITOK|M_ZERO); CPU_FOREACH(i) { - ctx_fpu[i] = fpu_kern_alloc_ctx(0); + ctx_fpu[i] = fpu_kern_alloc_ctx_domainset( + DOMAINSET_PREF(pcpu_find(i)->pc_domain), FPU_KERN_NORMAL); mtx_init(&ctx_mtx[i], "anifpumtx", NULL, MTX_DEF|MTX_NEW); } Index: sys/crypto/blake2/blake2_cryptodev.c =================================================================== --- sys/crypto/blake2/blake2_cryptodev.c +++ sys/crypto/blake2/blake2_cryptodev.c @@ -29,6 +29,7 @@ #include #include +#include #include #include #include @@ -141,7 +142,8 @@ M_WAITOK | M_ZERO); CPU_FOREACH(i) { - ctx_fpu[i] = fpu_kern_alloc_ctx(0); + ctx_fpu[i] = fpu_kern_alloc_ctx_domainset( + DOMAINSET_PREF(pcpu_find(i)->pc_domain), FPU_KERN_NORMAL); mtx_init(&ctx_mtx[i], "bl2fpumtx", NULL, MTX_DEF | MTX_NEW); }