9dd7462461
by cherry-picking the relevant commits from launchpad/lunar [0]. (relevant commits are based on k.o/stable commits for this) minimally tested by booting my (ryzen) machine with this kernel and skimming through dmesg after boot. [0] git://git.launchpad.net/~ubuntu-kernel/ubuntu/+source/linux/+git/lunar Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
218 lines
5.4 KiB
Diff
218 lines
5.4 KiB
Diff
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
From: Thomas Gleixner <tglx@linutronix.de>
|
|
Date: Wed, 14 Jun 2023 01:39:33 +0200
|
|
Subject: [PATCH] sh/cpu: Switch to arch_cpu_finalize_init()
|
|
|
|
check_bugs() is about to be phased out. Switch over to the new
|
|
arch_cpu_finalize_init() implementation.
|
|
|
|
No functional change.
|
|
|
|
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
|
Link: https://lore.kernel.org/r/20230613224545.371697797@linutronix.de
|
|
|
|
(cherry picked from commit 01eb454e9bfe593f320ecbc9aaec60bf87cd453d)
|
|
CVE-2022-40982
|
|
Signed-off-by: Thadeu Lima de Souza Cascardo <cascardo@canonical.com>
|
|
Acked-by: Roxana Nicolescu <roxana.nicolescu@canonical.com>
|
|
Acked-by: Stefan Bader <stefan.bader@canonical.com>
|
|
Signed-off-by: Stefan Bader <stefan.bader@canonical.com>
|
|
(cherry picked from commit 5228732d7ec3b9d13ee33b613dd3ed9c7f6a4695)
|
|
Signed-off-by: Stoiko Ivanov <s.ivanov@proxmox.com>
|
|
---
|
|
arch/sh/Kconfig | 1 +
|
|
arch/sh/include/asm/bugs.h | 74 ---------------------------------
|
|
arch/sh/include/asm/processor.h | 2 +
|
|
arch/sh/kernel/idle.c | 1 +
|
|
arch/sh/kernel/setup.c | 55 ++++++++++++++++++++++++
|
|
5 files changed, 59 insertions(+), 74 deletions(-)
|
|
delete mode 100644 arch/sh/include/asm/bugs.h
|
|
|
|
diff --git a/arch/sh/Kconfig b/arch/sh/Kconfig
|
|
index 101a0d094a66..b0284730e761 100644
|
|
--- a/arch/sh/Kconfig
|
|
+++ b/arch/sh/Kconfig
|
|
@@ -7,6 +7,7 @@ config SUPERH
|
|
select ARCH_HAVE_CUSTOM_GPIO_H
|
|
select ARCH_HAVE_NMI_SAFE_CMPXCHG if (GUSA_RB || CPU_SH4A)
|
|
select ARCH_HAS_BINFMT_FLAT if !MMU
|
|
+ select ARCH_HAS_CPU_FINALIZE_INIT
|
|
select ARCH_HAS_CURRENT_STACK_POINTER
|
|
select ARCH_HAS_GIGANTIC_PAGE
|
|
select ARCH_HAS_GCOV_PROFILE_ALL
|
|
diff --git a/arch/sh/include/asm/bugs.h b/arch/sh/include/asm/bugs.h
|
|
deleted file mode 100644
|
|
index fe52abb69cea..000000000000
|
|
--- a/arch/sh/include/asm/bugs.h
|
|
+++ /dev/null
|
|
@@ -1,74 +0,0 @@
|
|
-/* SPDX-License-Identifier: GPL-2.0 */
|
|
-#ifndef __ASM_SH_BUGS_H
|
|
-#define __ASM_SH_BUGS_H
|
|
-
|
|
-/*
|
|
- * This is included by init/main.c to check for architecture-dependent bugs.
|
|
- *
|
|
- * Needs:
|
|
- * void check_bugs(void);
|
|
- */
|
|
-
|
|
-/*
|
|
- * I don't know of any Super-H bugs yet.
|
|
- */
|
|
-
|
|
-#include <asm/processor.h>
|
|
-
|
|
-extern void select_idle_routine(void);
|
|
-
|
|
-static void __init check_bugs(void)
|
|
-{
|
|
- extern unsigned long loops_per_jiffy;
|
|
- char *p = &init_utsname()->machine[2]; /* "sh" */
|
|
-
|
|
- select_idle_routine();
|
|
-
|
|
- current_cpu_data.loops_per_jiffy = loops_per_jiffy;
|
|
-
|
|
- switch (current_cpu_data.family) {
|
|
- case CPU_FAMILY_SH2:
|
|
- *p++ = '2';
|
|
- break;
|
|
- case CPU_FAMILY_SH2A:
|
|
- *p++ = '2';
|
|
- *p++ = 'a';
|
|
- break;
|
|
- case CPU_FAMILY_SH3:
|
|
- *p++ = '3';
|
|
- break;
|
|
- case CPU_FAMILY_SH4:
|
|
- *p++ = '4';
|
|
- break;
|
|
- case CPU_FAMILY_SH4A:
|
|
- *p++ = '4';
|
|
- *p++ = 'a';
|
|
- break;
|
|
- case CPU_FAMILY_SH4AL_DSP:
|
|
- *p++ = '4';
|
|
- *p++ = 'a';
|
|
- *p++ = 'l';
|
|
- *p++ = '-';
|
|
- *p++ = 'd';
|
|
- *p++ = 's';
|
|
- *p++ = 'p';
|
|
- break;
|
|
- case CPU_FAMILY_UNKNOWN:
|
|
- /*
|
|
- * Specifically use CPU_FAMILY_UNKNOWN rather than
|
|
- * default:, so we're able to have the compiler whine
|
|
- * about unhandled enumerations.
|
|
- */
|
|
- break;
|
|
- }
|
|
-
|
|
- printk("CPU: %s\n", get_cpu_subtype(¤t_cpu_data));
|
|
-
|
|
-#ifndef __LITTLE_ENDIAN__
|
|
- /* 'eb' means 'Endian Big' */
|
|
- *p++ = 'e';
|
|
- *p++ = 'b';
|
|
-#endif
|
|
- *p = '\0';
|
|
-}
|
|
-#endif /* __ASM_SH_BUGS_H */
|
|
diff --git a/arch/sh/include/asm/processor.h b/arch/sh/include/asm/processor.h
|
|
index 85a6c1c3c16e..73fba7c922f9 100644
|
|
--- a/arch/sh/include/asm/processor.h
|
|
+++ b/arch/sh/include/asm/processor.h
|
|
@@ -166,6 +166,8 @@ extern unsigned int instruction_size(unsigned int insn);
|
|
#define instruction_size(insn) (2)
|
|
#endif
|
|
|
|
+void select_idle_routine(void);
|
|
+
|
|
#endif /* __ASSEMBLY__ */
|
|
|
|
#include <asm/processor_32.h>
|
|
diff --git a/arch/sh/kernel/idle.c b/arch/sh/kernel/idle.c
|
|
index f59814983bd5..a80b2a5b25c7 100644
|
|
--- a/arch/sh/kernel/idle.c
|
|
+++ b/arch/sh/kernel/idle.c
|
|
@@ -14,6 +14,7 @@
|
|
#include <linux/irqflags.h>
|
|
#include <linux/smp.h>
|
|
#include <linux/atomic.h>
|
|
+#include <asm/processor.h>
|
|
#include <asm/smp.h>
|
|
#include <asm/bl_bit.h>
|
|
|
|
diff --git a/arch/sh/kernel/setup.c b/arch/sh/kernel/setup.c
|
|
index af977ec4ca5e..cf7c0f72f293 100644
|
|
--- a/arch/sh/kernel/setup.c
|
|
+++ b/arch/sh/kernel/setup.c
|
|
@@ -43,6 +43,7 @@
|
|
#include <asm/smp.h>
|
|
#include <asm/mmu_context.h>
|
|
#include <asm/mmzone.h>
|
|
+#include <asm/processor.h>
|
|
#include <asm/sparsemem.h>
|
|
#include <asm/platform_early.h>
|
|
|
|
@@ -354,3 +355,57 @@ int test_mode_pin(int pin)
|
|
{
|
|
return sh_mv.mv_mode_pins() & pin;
|
|
}
|
|
+
|
|
+void __init arch_cpu_finalize_init(void)
|
|
+{
|
|
+ char *p = &init_utsname()->machine[2]; /* "sh" */
|
|
+
|
|
+ select_idle_routine();
|
|
+
|
|
+ current_cpu_data.loops_per_jiffy = loops_per_jiffy;
|
|
+
|
|
+ switch (current_cpu_data.family) {
|
|
+ case CPU_FAMILY_SH2:
|
|
+ *p++ = '2';
|
|
+ break;
|
|
+ case CPU_FAMILY_SH2A:
|
|
+ *p++ = '2';
|
|
+ *p++ = 'a';
|
|
+ break;
|
|
+ case CPU_FAMILY_SH3:
|
|
+ *p++ = '3';
|
|
+ break;
|
|
+ case CPU_FAMILY_SH4:
|
|
+ *p++ = '4';
|
|
+ break;
|
|
+ case CPU_FAMILY_SH4A:
|
|
+ *p++ = '4';
|
|
+ *p++ = 'a';
|
|
+ break;
|
|
+ case CPU_FAMILY_SH4AL_DSP:
|
|
+ *p++ = '4';
|
|
+ *p++ = 'a';
|
|
+ *p++ = 'l';
|
|
+ *p++ = '-';
|
|
+ *p++ = 'd';
|
|
+ *p++ = 's';
|
|
+ *p++ = 'p';
|
|
+ break;
|
|
+ case CPU_FAMILY_UNKNOWN:
|
|
+ /*
|
|
+ * Specifically use CPU_FAMILY_UNKNOWN rather than
|
|
+ * default:, so we're able to have the compiler whine
|
|
+ * about unhandled enumerations.
|
|
+ */
|
|
+ break;
|
|
+ }
|
|
+
|
|
+ pr_info("CPU: %s\n", get_cpu_subtype(¤t_cpu_data));
|
|
+
|
|
+#ifndef __LITTLE_ENDIAN__
|
|
+ /* 'eb' means 'Endian Big' */
|
|
+ *p++ = 'e';
|
|
+ *p++ = 'b';
|
|
+#endif
|
|
+ *p = '\0';
|
|
+}
|