forked from mirrors/linux
		
	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
This commit is contained in:
		
							parent
							
								
									6f3f04c190
								
							
						
					
					
						commit
						181b6f40e9
					
				
					 2 changed files with 0 additions and 112 deletions
				
			
		|  | @ -1350,18 +1350,6 @@ config MICROCODE_AMD | ||||||
| 	  If you select this option, microcode patch loading support for AMD | 	  If you select this option, microcode patch loading support for AMD | ||||||
| 	  processors will be enabled. | 	  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 | config X86_MSR | ||||||
| 	tristate "/dev/cpu/*/msr - Model-specific register support" | 	tristate "/dev/cpu/*/msr - Model-specific register support" | ||||||
| 	help | 	help | ||||||
|  |  | ||||||
|  | @ -373,98 +373,6 @@ static int apply_microcode_on_target(int cpu) | ||||||
| 	return ret; | 	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 */ | /* fake device for request_firmware */ | ||||||
| static struct platform_device	*microcode_pdev; | static struct platform_device	*microcode_pdev; | ||||||
| 
 | 
 | ||||||
|  | @ -856,10 +764,6 @@ static int __init microcode_init(void) | ||||||
| 		goto out_driver; | 		goto out_driver; | ||||||
| 	} | 	} | ||||||
| 
 | 
 | ||||||
| 	error = microcode_dev_init(); |  | ||||||
| 	if (error) |  | ||||||
| 		goto out_ucode_group; |  | ||||||
| 
 |  | ||||||
| 	register_syscore_ops(&mc_syscore_ops); | 	register_syscore_ops(&mc_syscore_ops); | ||||||
| 	cpuhp_setup_state_nocalls(CPUHP_AP_MICROCODE_LOADER, "x86/microcode:starting", | 	cpuhp_setup_state_nocalls(CPUHP_AP_MICROCODE_LOADER, "x86/microcode:starting", | ||||||
| 				  mc_cpu_starting, NULL); | 				  mc_cpu_starting, NULL); | ||||||
|  | @ -870,10 +774,6 @@ static int __init microcode_init(void) | ||||||
| 
 | 
 | ||||||
| 	return 0; | 	return 0; | ||||||
| 
 | 
 | ||||||
|  out_ucode_group: |  | ||||||
| 	sysfs_remove_group(&cpu_subsys.dev_root->kobj, |  | ||||||
| 			   &cpu_root_microcode_group); |  | ||||||
| 
 |  | ||||||
|  out_driver: |  out_driver: | ||||||
| 	cpus_read_lock(); | 	cpus_read_lock(); | ||||||
| 	mutex_lock(µcode_mutex); | 	mutex_lock(µcode_mutex); | ||||||
|  |  | ||||||
		Loading…
	
		Reference in a new issue
	
	 Borislav Petkov
						Borislav Petkov