159 lines
4.8 KiB
Diff
159 lines
4.8 KiB
Diff
From bd09e454866f567be3b89e2e4f3d46cca6da9521 Mon Sep 17 00:00:00 2001
|
|
From: zhangyu <zhangyu4@kylinos.cn>
|
|
Date: Mon, 20 Jan 2025 14:19:57 +0800
|
|
Subject: [PATCH 2/2] rt2
|
|
|
|
---
|
|
arch/arm64/configs/openeuler_defconfig | 7 ++++---
|
|
arch/arm64/kernel/fpsimd.c | 4 ++--
|
|
arch/x86/configs/openeuler_defconfig | 8 ++++----
|
|
arch/x86/include/asm/preempt.h | 16 +++++++++++++---
|
|
include/linux/printk.h | 2 +-
|
|
5 files changed, 24 insertions(+), 13 deletions(-)
|
|
|
|
diff --git a/arch/arm64/configs/openeuler_defconfig b/arch/arm64/configs/openeuler_defconfig
|
|
index 1830460ef..b68aed59d 100644
|
|
--- a/arch/arm64/configs/openeuler_defconfig
|
|
+++ b/arch/arm64/configs/openeuler_defconfig
|
|
@@ -87,6 +87,7 @@ CONFIG_HIGH_RES_TIMERS=y
|
|
CONFIG_PREEMPT_NONE=y
|
|
# CONFIG_PREEMPT_VOLUNTARY is not set
|
|
# CONFIG_PREEMPT is not set
|
|
+CONFIG_PREEMPT_RT=y
|
|
|
|
#
|
|
# CPU/Task time and stats accounting
|
|
@@ -775,7 +776,7 @@ CONFIG_ACPI_PPTT=y
|
|
CONFIG_ACPI_PCC=y
|
|
# CONFIG_PMIC_OPREGION is not set
|
|
CONFIG_IRQ_BYPASS_MANAGER=y
|
|
-CONFIG_VIRTUALIZATION=y
|
|
+# CONFIG_VIRTUALIZATION is not set
|
|
CONFIG_KVM=y
|
|
CONFIG_CVM_HOST=y
|
|
CONFIG_CVM_GUEST=y
|
|
@@ -1178,7 +1179,7 @@ CONFIG_ARCH_USES_HIGH_VMA_FLAGS=y
|
|
# CONFIG_GUP_BENCHMARK is not set
|
|
# CONFIG_READ_ONLY_THP_FOR_FS is not set
|
|
CONFIG_ARCH_HAS_PTE_SPECIAL=y
|
|
-CONFIG_PIN_MEMORY=y
|
|
+# CONFIG_PIN_MEMORY is not set
|
|
CONFIG_PID_RESERVE=y
|
|
CONFIG_MEMORY_RELIABLE=y
|
|
# CONFIG_CLEAR_FREELIST_PAGE is not set
|
|
@@ -6122,7 +6123,7 @@ CONFIG_HISI_HBMDEV=y
|
|
CONFIG_HISI_HBMCACHE=m
|
|
CONFIG_HISI_HBMDEV_ACLS=y
|
|
CONFIG_HISI_L3T=m
|
|
-CONFIG_HISI_L0=m
|
|
+#CONFIG_HISI_L0 is not set
|
|
CONFIG_HISI_MEM_RAS=m
|
|
# end of Hisilicon SoC drivers
|
|
# end of SOC (System On Chip) specific Drivers
|
|
diff --git a/arch/arm64/kernel/fpsimd.c b/arch/arm64/kernel/fpsimd.c
|
|
index 131b2dda3..992c11f2c 100644
|
|
--- a/arch/arm64/kernel/fpsimd.c
|
|
+++ b/arch/arm64/kernel/fpsimd.c
|
|
@@ -234,7 +234,7 @@ static void __get_cpu_fpsimd_context(void)
|
|
*/
|
|
static void get_cpu_fpsimd_context(void)
|
|
{
|
|
- local_bh_disable();
|
|
+ preempt_disable();
|
|
__get_cpu_fpsimd_context();
|
|
}
|
|
|
|
@@ -255,7 +255,7 @@ static void __put_cpu_fpsimd_context(void)
|
|
static void put_cpu_fpsimd_context(void)
|
|
{
|
|
__put_cpu_fpsimd_context();
|
|
- local_bh_enable();
|
|
+ preempt_enable();
|
|
}
|
|
|
|
static bool have_cpu_fpsimd_context(void)
|
|
diff --git a/arch/x86/configs/openeuler_defconfig b/arch/x86/configs/openeuler_defconfig
|
|
index f7ff24ef3..921df8c8e 100644
|
|
--- a/arch/x86/configs/openeuler_defconfig
|
|
+++ b/arch/x86/configs/openeuler_defconfig
|
|
@@ -89,10 +89,10 @@ CONFIG_HIGH_RES_TIMERS=y
|
|
CONFIG_CLOCKSOURCE_VALIDATE_LAST_CYCLE=y
|
|
# end of Timers subsystem
|
|
|
|
-CONFIG_PREEMPT_NONE=y
|
|
+# CONFIG_PREEMPT_NONE is not set
|
|
# CONFIG_PREEMPT_VOLUNTARY is not set
|
|
# CONFIG_PREEMPT is not set
|
|
-
|
|
+CONFIG_PREEMPT_RT=y
|
|
#
|
|
# CPU/Task time and stats accounting
|
|
#
|
|
@@ -218,7 +218,7 @@ CONFIG_HAVE_UID16=y
|
|
CONFIG_SYSCTL_EXCEPTION_TRACE=y
|
|
CONFIG_HAVE_PCSPKR_PLATFORM=y
|
|
CONFIG_BPF=y
|
|
-# CONFIG_EXPERT is not set
|
|
+CONFIG_EXPERT=y
|
|
CONFIG_UID16=y
|
|
CONFIG_MULTIUSER=y
|
|
CONFIG_SGETMASK_SYSCALL=y
|
|
@@ -760,7 +760,7 @@ CONFIG_KVM_COMPAT=y
|
|
CONFIG_HAVE_KVM_IRQ_BYPASS=y
|
|
CONFIG_HAVE_KVM_NO_POLL=y
|
|
CONFIG_KVM_XFER_TO_GUEST_WORK=y
|
|
-CONFIG_VIRTUALIZATION=y
|
|
+# CONFIG_VIRTUALIZATION is not set
|
|
CONFIG_KVM=m
|
|
CONFIG_KVM_INTEL=m
|
|
CONFIG_X86_SGX_KVM=y
|
|
diff --git a/arch/x86/include/asm/preempt.h b/arch/x86/include/asm/preempt.h
|
|
index a3b73de27..dda9ec24f 100644
|
|
--- a/arch/x86/include/asm/preempt.h
|
|
+++ b/arch/x86/include/asm/preempt.h
|
|
@@ -134,10 +134,8 @@ static __always_inline bool should_resched(int preempt_offset)
|
|
#endif
|
|
}
|
|
|
|
+#ifndef CONFIG_PREEMPT_RT
|
|
#ifdef CONFIG_PREEMPTION
|
|
-#ifdef CONFIG_PREEMPT_RT
|
|
- extern void preempt_schedule_lock(void);
|
|
-#endif
|
|
extern asmlinkage void preempt_schedule(void);
|
|
extern asmlinkage void preempt_schedule_thunk(void);
|
|
|
|
@@ -166,4 +164,16 @@ do { \
|
|
|
|
#endif
|
|
|
|
+#else
|
|
+#ifdef CONFIG_PREEMPTION
|
|
+#ifdef CONFIG_PREEMPT_RT
|
|
+extern void preempt_schedule_lock(void);
|
|
+#endif
|
|
+extern asmlinkage void preempt_schedule(void);
|
|
+#define __preempt_schedule() preempt_schedule()
|
|
+extern asmlinkage void preempt_schedule_notrace(void);
|
|
+#define __preempt_schedule_notrace() preempt_schedule_notrace()
|
|
+#endif /* CONFIG_PREEMPTION */
|
|
+#endif
|
|
+
|
|
#endif /* __ASM_PREEMPT_H */
|
|
diff --git a/include/linux/printk.h b/include/linux/printk.h
|
|
index 26c70fd11..c82c971e8 100644
|
|
--- a/include/linux/printk.h
|
|
+++ b/include/linux/printk.h
|
|
@@ -241,7 +241,7 @@ __printf(1, 2) void dump_stack_set_arch_desc(const char *fmt, ...);
|
|
void dump_stack_print_info(const char *log_lvl);
|
|
void show_regs_print_info(const char *log_lvl);
|
|
extern asmlinkage void dump_stack(void) __cold;
|
|
-#if defined(CONFIG_X86) || defined(CONFIG_ARM64_PSEUDO_NMI)
|
|
+#if (defined(CONFIG_X86) || defined(CONFIG_ARM64_PSEUDO_NMI)) && !defined(CONFIG_PREEMPT_RT)
|
|
extern void zap_locks(void);
|
|
#else
|
|
static inline void zap_locks(void) { }
|
|
--
|
|
2.41.0
|
|
|