| From b369afccaac66189ef4a4f3ac5a2ec7d19eea42b Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 25 May 2022 18:12:29 +0200 |
| Subject: x86/microcode: Rip out the OLD_INTERFACE |
| |
| From: Borislav Petkov <bp@suse.de> |
| |
| [ Upstream commit 181b6f40e9ea80c76756d4d0cdeed396016c487e ] |
| |
| 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 |
| Stable-dep-of: c0dd9245aa9e ("x86/microcode: Check CPU capabilities after late microcode update correctly") |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| 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 d64e690139950..1f55fc6470371 100644 |
| --- a/arch/x86/Kconfig |
| +++ b/arch/x86/Kconfig |
| @@ -1329,18 +1329,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.rst |
| - |
| 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 38a58819c1b9b..8d8d7ee47e1ce 100644 |
| --- a/arch/x86/kernel/cpu/microcode/core.c |
| +++ b/arch/x86/kernel/cpu/microcode/core.c |
| @@ -390,98 +390,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) ? stream_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; |
| - } |
| - |
| - cpus_read_lock(); |
| - 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); |
| - cpus_read_unlock(); |
| - |
| - 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; |
| |
| @@ -873,10 +781,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); |
| @@ -887,10 +791,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: |
| cpus_read_lock(); |
| mutex_lock(µcode_mutex); |
| -- |
| 2.39.2 |
| |