From 0026e130f88770f45b00f52ba1374dd90b8be0f0 Mon Sep 17 00:00:00 2001
From: liyulei <liyulei@kylinos.cn>
Date: Mon, 6 Feb 2023 18:04:41 +0800
Subject: [PATCH 2/2] modify openeuler_defconfig for rt62

---
 arch/arm64/configs/openeuler_defconfig |  5 +++--
 arch/arm64/kernel/fpsimd.c             |  4 ++--
 arch/x86/configs/openeuler_defconfig   |  7 ++++---
 arch/x86/include/asm/preempt.h         | 16 +++++++++++++---
 include/linux/printk.h                 |  2 +-
 kernel/printk/printk.c                 |  2 +-
 6 files changed, 24 insertions(+), 12 deletions(-)

diff --git a/arch/arm64/configs/openeuler_defconfig b/arch/arm64/configs/openeuler_defconfig
index 30384eacad4f..b0ed4a9b3058 100644
--- a/arch/arm64/configs/openeuler_defconfig
+++ b/arch/arm64/configs/openeuler_defconfig
@@ -74,6 +74,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
@@ -733,7 +734,7 @@ CONFIG_ACPI_MPAM=y
 CONFIG_ACPI_PPTT=y
 # CONFIG_PMIC_OPREGION is not set
 CONFIG_IRQ_BYPASS_MANAGER=y
-CONFIG_VIRTUALIZATION=y
+# CONFIG_VIRTUALIZATION is not set
 CONFIG_KVM=y
 CONFIG_HAVE_KVM_IRQCHIP=y
 CONFIG_HAVE_KVM_IRQFD=y
@@ -1125,7 +1126,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
diff --git a/arch/arm64/kernel/fpsimd.c b/arch/arm64/kernel/fpsimd.c
index 84520f11667d..aa631771e0dc 100644
--- a/arch/arm64/kernel/fpsimd.c
+++ b/arch/arm64/kernel/fpsimd.c
@@ -180,7 +180,7 @@ static void __get_cpu_fpsimd_context(void)
  */
 static void get_cpu_fpsimd_context(void)
 {
-	local_bh_disable();
+	preempt_disable();
 	__get_cpu_fpsimd_context();
 }
 
@@ -201,7 +201,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 5ada612f1d75..685a49ca1fef 100644
--- a/arch/x86/configs/openeuler_defconfig
+++ b/arch/x86/configs/openeuler_defconfig
@@ -89,9 +89,10 @@ CONFIG_NO_HZ=y
 CONFIG_HIGH_RES_TIMERS=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
@@ -206,7 +207,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
@@ -735,7 +736,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 a3b73de276c3..dda9ec24fdc1 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 9331b131ba25..23946f4828b2 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) { }
diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
index e95b00f24c75..59bd804e662a 100644
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
@@ -1813,7 +1813,7 @@ static void print_sync_until(struct console *con, u64 seq)
 	console_atomic_unlock(flags);
 }
 
-#if defined(CONFIG_X86) || defined(CONFIG_ARM64_PSEUDO_NMI)
+#if (defined(CONFIG_X86) || defined(CONFIG_ARM64_PSEUDO_NMI)) && !defined(CONFIG_PREEMPT_RT)
 void zap_locks(void)
 {
 //	if (raw_spin_is_locked(&logbuf_lock)) {
-- 
2.36.1

