Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8343ef24 authored by Dmitry Adamushko's avatar Dmitry Adamushko Committed by Ingo Molnar
Browse files

x86-microcode: fix unbalanced use of get_cpu()



Don't use get_cpu() at all. Resort to checking a boot-up CPU (#0) in
microcode_{intel,amd}_module_init().

Signed-off-by: default avatarDmitry Adamushko <dmitry.adamushko@gmail.com>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
parent 636a3178
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -500,15 +500,17 @@ static struct microcode_ops microcode_amd_ops = {

static int __init microcode_amd_module_init(void)
{
	struct cpuinfo_x86 *c = &cpu_data(get_cpu());
	struct cpuinfo_x86 *c = &cpu_data(0);

	equiv_cpu_table = NULL;
	if (c->x86_vendor == X86_VENDOR_AMD)
		return microcode_init(&microcode_amd_ops, THIS_MODULE);
	else
	if (c->x86_vendor != X86_VENDOR_AMD) {
		printk(KERN_ERR "microcode: CPU platform is not AMD-capable\n");
		return -ENODEV;
	}

	return microcode_init(&microcode_amd_ops, THIS_MODULE);
}

static void __exit microcode_amd_module_exit(void)
{
	microcode_exit();
+6 −4
Original line number Diff line number Diff line
@@ -531,14 +531,16 @@ static struct microcode_ops microcode_intel_ops = {

static int __init microcode_intel_module_init(void)
{
	struct cpuinfo_x86 *c = &cpu_data(get_cpu());
	struct cpuinfo_x86 *c = &cpu_data(0);

	if (c->x86_vendor == X86_VENDOR_INTEL)
		return microcode_init(&microcode_intel_ops, THIS_MODULE);
	else
	if (c->x86_vendor != X86_VENDOR_INTEL) {
                printk(KERN_ERR "microcode: CPU platform is not Intel-capable\n");
		return -ENODEV;
	}

	return microcode_init(&microcode_intel_ops, THIS_MODULE);
}

static void __exit microcode_intel_module_exit(void)
{
	microcode_exit();