Page MenuHomeFreeBSD

D29921.id87983.diff
No OneTemporary

D29921.id87983.diff

diff --git a/sys/compat/linuxkpi/common/include/asm/fpu/api.h b/sys/compat/linuxkpi/common/include/asm/fpu/api.h
--- a/sys/compat/linuxkpi/common/include/asm/fpu/api.h
+++ b/sys/compat/linuxkpi/common/include/asm/fpu/api.h
@@ -30,36 +30,40 @@
#if defined(__aarch64__) || defined(__amd64__) || defined(__i386__)
+#include <linux/sched.h>
#include <machine/fpu.h>
-extern struct fpu_kern_ctx *__lkpi_fpu_ctx;
-extern unsigned int __lkpi_fpu_ctx_level;
+/*
+ * Technically the Linux API isn't supposed to allow nesting sections either,
+ * but currently used versions of GPU drivers rely on nesting working,
+ * so we only enter the section on the outermost level.
+ */
static inline void
-kernel_fpu_begin()
+kernel_fpu_begin(void)
{
- if (__lkpi_fpu_ctx_level++ == 0) {
- fpu_kern_enter(curthread, __lkpi_fpu_ctx, FPU_KERN_NORMAL);
+ if (current->fpu_ctx_level++ == 0) {
+ fpu_kern_enter(curthread, NULL, FPU_KERN_NOCTX);
}
}
static inline void
-kernel_fpu_end()
+kernel_fpu_end(void)
{
- if (--__lkpi_fpu_ctx_level == 0) {
- fpu_kern_leave(curthread, __lkpi_fpu_ctx);
+ if (--current->fpu_ctx_level == 0) {
+ fpu_kern_leave(curthread, NULL);
}
}
#else
static inline void
-kernel_fpu_begin()
+kernel_fpu_begin(void)
{
}
static inline void
-kernel_fpu_end()
+kernel_fpu_end(void)
{
}
diff --git a/sys/compat/linuxkpi/common/include/linux/sched.h b/sys/compat/linuxkpi/common/include/linux/sched.h
--- a/sys/compat/linuxkpi/common/include/linux/sched.h
+++ b/sys/compat/linuxkpi/common/include/linux/sched.h
@@ -82,7 +82,8 @@
int bsd_interrupt_value;
struct work_struct *work; /* current work struct, if set */
struct task_struct *group_leader;
- unsigned rcu_section[TS_RCU_TYPE_MAX];
+ unsigned rcu_section[TS_RCU_TYPE_MAX];
+ unsigned int fpu_ctx_level;
};
#define current ({ \
diff --git a/sys/compat/linuxkpi/common/src/linux_fpu.c b/sys/compat/linuxkpi/common/src/linux_fpu.c
deleted file mode 100644
--- a/sys/compat/linuxkpi/common/src/linux_fpu.c
+++ /dev/null
@@ -1,50 +0,0 @@
-/*-
- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
- *
- * Copyright (c) 2020 Greg V <greg@unrelenting.technology>
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- *
- * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/proc.h>
-#include <sys/kernel.h>
-
-#include <machine/fpu.h>
-
-struct fpu_kern_ctx *__lkpi_fpu_ctx;
-unsigned int __lkpi_fpu_ctx_level = 0;
-
-static void
-linux_fpu_init(void *arg __unused)
-{
- __lkpi_fpu_ctx = fpu_kern_alloc_ctx(0);
-}
-SYSINIT(linux_fpu, SI_SUB_EVENTHANDLER, SI_ORDER_SECOND, linux_fpu_init, NULL);
-
-static void
-linux_fpu_uninit(void *arg __unused)
-{
- fpu_kern_free_ctx(__lkpi_fpu_ctx);
-}
-SYSUNINIT(linux_fpu, SI_SUB_EVENTHANDLER, SI_ORDER_SECOND, linux_fpu_uninit, NULL);
diff --git a/sys/conf/files.amd64 b/sys/conf/files.amd64
--- a/sys/conf/files.amd64
+++ b/sys/conf/files.amd64
@@ -464,9 +464,6 @@
x86/xen/pvcpu_enum.c optional xenhvm
x86/xen/xen_pci_bus.c optional xenhvm
-compat/linuxkpi/common/src/linux_fpu.c optional compat_linuxkpi \
- compile-with "${LINUXKPI_C}"
-
contrib/openzfs/module/zcommon/zfs_fletcher_avx512.c optional zfs compile-with "${ZFS_C}"
contrib/openzfs/module/zcommon/zfs_fletcher_intel.c optional zfs compile-with "${ZFS_C}"
contrib/openzfs/module/zcommon/zfs_fletcher_sse.c optional zfs compile-with "${ZFS_C}"
diff --git a/sys/conf/files.arm64 b/sys/conf/files.arm64
--- a/sys/conf/files.arm64
+++ b/sys/conf/files.arm64
@@ -541,10 +541,6 @@
# Xilinx
arm/xilinx/uart_dev_cdnc.c optional uart soc_xilinx_zynq
-# Linuxkpi
-compat/linuxkpi/common/src/linux_fpu.c optional compat_linuxkpi \
- compile-with "${LINUXKPI_C}"
-
# Cloudabi
arm64/cloudabi32/cloudabi32_sysvec.c optional compat_cloudabi32
arm64/cloudabi64/cloudabi64_sysvec.c optional compat_cloudabi64
diff --git a/sys/conf/files.i386 b/sys/conf/files.i386
--- a/sys/conf/files.i386
+++ b/sys/conf/files.i386
@@ -242,6 +242,3 @@
x86/x86/mptable.c optional apic
x86/x86/mptable_pci.c optional apic pci
x86/x86/msi.c optional apic pci
-
-compat/linuxkpi/common/src/linux_fpu.c optional compat_linuxkpi \
- compile-with "${LINUXKPI_C}"
diff --git a/sys/modules/linuxkpi/Makefile b/sys/modules/linuxkpi/Makefile
--- a/sys/modules/linuxkpi/Makefile
+++ b/sys/modules/linuxkpi/Makefile
@@ -29,7 +29,7 @@
.if ${MACHINE_CPUARCH} == "aarch64" || ${MACHINE_CPUARCH} == "amd64" || \
${MACHINE_CPUARCH} == "i386"
-SRCS+= opt_acpi.h acpi_if.h linux_acpi.c linux_fpu.c
+SRCS+= opt_acpi.h acpi_if.h linux_acpi.c
.endif
SRCS+= ${LINUXKPI_GENSRCS}

File Metadata

Mime Type
text/plain
Expires
Wed, Jul 22, 6:15 AM (3 h, 39 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
35350977
Default Alt Text
D29921.id87983.diff (5 KB)

Event Timeline