171 lines
4.5 KiB
Diff
171 lines
4.5 KiB
Diff
|
From c11a8e91d637901133fad441470d2240cc9d05e7 Mon Sep 17 00:00:00 2001
|
||
|
From: Borislav Petkov <bp@suse.de>
|
||
|
Date: Wed, 25 May 2022 18:12:29 +0200
|
||
|
Subject: [PATCH 04/36] x86/microcode: Rip out the OLD_INTERFACE
|
||
|
|
||
|
Everything should be using the early initrd loading by now.
|
||
|
|
||
|
Signed-off-by: Borislav Petkov <bp@suse.de>
|
||
|
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
|
||
|
Link: https://lore.kernel.org/r/20220525161232.14924-2-bp@alien8.de
|
||
|
|
||
|
(cherry picked from commit 181b6f40e9ea80c76756d4d0cdeed396016c487e)
|
||
|
Signed-off-by: Mridula Shastry <mridula.c.shastry@oracle.com>
|
||
|
Reviewed-by: Todd Vierling <todd.vierling@oracle.com>
|
||
|
---
|
||
|
arch/x86/Kconfig | 12 ----
|
||
|
arch/x86/kernel/cpu/microcode/core.c | 100 ---------------------------
|
||
|
2 files changed, 112 deletions(-)
|
||
|
|
||
|
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
|
||
|
index 4f762b807bd4..b9bcde5c538f 100644
|
||
|
--- a/arch/x86/Kconfig
|
||
|
+++ b/arch/x86/Kconfig
|
||
|
@@ -1360,18 +1360,6 @@ config MICROCODE_AMD
|
||
|
If you select this option, microcode patch loading support for AMD
|
||
|
processors will be enabled.
|
||
|
|
||
|
-config MICROCODE_OLD_INTERFACE
|
||
|
- bool "Ancient loading interface (DEPRECATED)"
|
||
|
- default n
|
||
|
- depends on MICROCODE
|
||
|
- ---help---
|
||
|
- DO NOT USE THIS! This is the ancient /dev/cpu/microcode interface
|
||
|
- which was used by userspace tools like iucode_tool and microcode.ctl.
|
||
|
- It is inadequate because it runs too late to be able to properly
|
||
|
- load microcode on a machine and it needs special tools. Instead, you
|
||
|
- should've switched to the early loading method with the initrd or
|
||
|
- builtin microcode by now: Documentation/x86/microcode.txt
|
||
|
-
|
||
|
config X86_MSR
|
||
|
tristate "/dev/cpu/*/msr - Model-specific register support"
|
||
|
---help---
|
||
|
diff --git a/arch/x86/kernel/cpu/microcode/core.c b/arch/x86/kernel/cpu/microcode/core.c
|
||
|
index f0946658f885..bbc262a5fc0d 100644
|
||
|
--- a/arch/x86/kernel/cpu/microcode/core.c
|
||
|
+++ b/arch/x86/kernel/cpu/microcode/core.c
|
||
|
@@ -392,98 +392,6 @@ static int apply_microcode_on_target(int cpu)
|
||
|
return ret;
|
||
|
}
|
||
|
|
||
|
-#ifdef CONFIG_MICROCODE_OLD_INTERFACE
|
||
|
-static int do_microcode_update(const void __user *buf, size_t size)
|
||
|
-{
|
||
|
- int error = 0;
|
||
|
- int cpu;
|
||
|
-
|
||
|
- for_each_online_cpu(cpu) {
|
||
|
- struct ucode_cpu_info *uci = ucode_cpu_info + cpu;
|
||
|
- enum ucode_state ustate;
|
||
|
-
|
||
|
- if (!uci->valid)
|
||
|
- continue;
|
||
|
-
|
||
|
- ustate = microcode_ops->request_microcode_user(cpu, buf, size);
|
||
|
- if (ustate == UCODE_ERROR) {
|
||
|
- error = -1;
|
||
|
- break;
|
||
|
- } else if (ustate == UCODE_NEW) {
|
||
|
- apply_microcode_on_target(cpu);
|
||
|
- }
|
||
|
- }
|
||
|
-
|
||
|
- return error;
|
||
|
-}
|
||
|
-
|
||
|
-static int microcode_open(struct inode *inode, struct file *file)
|
||
|
-{
|
||
|
- return capable(CAP_SYS_RAWIO) ? nonseekable_open(inode, file) : -EPERM;
|
||
|
-}
|
||
|
-
|
||
|
-static ssize_t microcode_write(struct file *file, const char __user *buf,
|
||
|
- size_t len, loff_t *ppos)
|
||
|
-{
|
||
|
- ssize_t ret = -EINVAL;
|
||
|
- unsigned long nr_pages = totalram_pages();
|
||
|
-
|
||
|
- if ((len >> PAGE_SHIFT) > nr_pages) {
|
||
|
- pr_err("too much data (max %ld pages)\n", nr_pages);
|
||
|
- return ret;
|
||
|
- }
|
||
|
-
|
||
|
- get_online_cpus();
|
||
|
- mutex_lock(µcode_mutex);
|
||
|
-
|
||
|
- if (do_microcode_update(buf, len) == 0)
|
||
|
- ret = (ssize_t)len;
|
||
|
-
|
||
|
- if (ret > 0)
|
||
|
- perf_check_microcode();
|
||
|
-
|
||
|
- mutex_unlock(µcode_mutex);
|
||
|
- put_online_cpus();
|
||
|
-
|
||
|
- return ret;
|
||
|
-}
|
||
|
-
|
||
|
-static const struct file_operations microcode_fops = {
|
||
|
- .owner = THIS_MODULE,
|
||
|
- .write = microcode_write,
|
||
|
- .open = microcode_open,
|
||
|
- .llseek = no_llseek,
|
||
|
-};
|
||
|
-
|
||
|
-static struct miscdevice microcode_dev = {
|
||
|
- .minor = MICROCODE_MINOR,
|
||
|
- .name = "microcode",
|
||
|
- .nodename = "cpu/microcode",
|
||
|
- .fops = µcode_fops,
|
||
|
-};
|
||
|
-
|
||
|
-static int __init microcode_dev_init(void)
|
||
|
-{
|
||
|
- int error;
|
||
|
-
|
||
|
- error = misc_register(µcode_dev);
|
||
|
- if (error) {
|
||
|
- pr_err("can't misc_register on minor=%d\n", MICROCODE_MINOR);
|
||
|
- return error;
|
||
|
- }
|
||
|
-
|
||
|
- return 0;
|
||
|
-}
|
||
|
-
|
||
|
-static void __exit microcode_dev_exit(void)
|
||
|
-{
|
||
|
- misc_deregister(µcode_dev);
|
||
|
-}
|
||
|
-#else
|
||
|
-#define microcode_dev_init() 0
|
||
|
-#define microcode_dev_exit() do { } while (0)
|
||
|
-#endif
|
||
|
-
|
||
|
/* fake device for request_firmware */
|
||
|
static struct platform_device *microcode_pdev;
|
||
|
|
||
|
@@ -876,10 +784,6 @@ int __init microcode_init(void)
|
||
|
goto out_driver;
|
||
|
}
|
||
|
|
||
|
- error = microcode_dev_init();
|
||
|
- if (error)
|
||
|
- goto out_ucode_group;
|
||
|
-
|
||
|
register_syscore_ops(&mc_syscore_ops);
|
||
|
cpuhp_setup_state_nocalls(CPUHP_AP_MICROCODE_LOADER, "x86/microcode:starting",
|
||
|
mc_cpu_starting, NULL);
|
||
|
@@ -890,10 +794,6 @@ int __init microcode_init(void)
|
||
|
|
||
|
return 0;
|
||
|
|
||
|
- out_ucode_group:
|
||
|
- sysfs_remove_group(&cpu_subsys.dev_root->kobj,
|
||
|
- &cpu_root_microcode_group);
|
||
|
-
|
||
|
out_driver:
|
||
|
get_online_cpus();
|
||
|
mutex_lock(µcode_mutex);
|
||
|
--
|
||
|
2.39.3
|
||
|
|