x86/microcode: fix sleeping function called from invalid context at kernel/mutex.c
Fix the following "sleeping function called from invalid context" bug: ... __might_sleep mutex_lock_nested microcode_update_cpu mc_sysdev_resume __sysdev_resume sysdev_resume device_power_up ... Signed-off-by: Dmitry Adamushko <dmitry.adamushko@gmail.com> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
82b078659e
commit
fd1452ebf2
|
@ -324,10 +324,6 @@ void microcode_update_cpu(int cpu)
|
|||
struct ucode_cpu_info *uci = ucode_cpu_info + cpu;
|
||||
int err = 0;
|
||||
|
||||
/* We should bind the task to the CPU */
|
||||
BUG_ON(raw_smp_processor_id() != cpu);
|
||||
|
||||
mutex_lock(µcode_mutex);
|
||||
/*
|
||||
* Check if the system resume is in progress (uci->valid != NULL),
|
||||
* otherwise just request a firmware:
|
||||
|
@ -340,11 +336,8 @@ void microcode_update_cpu(int cpu)
|
|||
err = microcode_ops->request_microcode_fw(cpu,
|
||||
µcode_pdev->dev);
|
||||
}
|
||||
|
||||
if (!err)
|
||||
microcode_ops->apply_microcode(cpu);
|
||||
|
||||
mutex_unlock(µcode_mutex);
|
||||
}
|
||||
|
||||
static void microcode_init_cpu(int cpu)
|
||||
|
@ -352,7 +345,13 @@ static void microcode_init_cpu(int cpu)
|
|||
cpumask_t old = current->cpus_allowed;
|
||||
|
||||
set_cpus_allowed_ptr(current, &cpumask_of_cpu(cpu));
|
||||
/* We should bind the task to the CPU */
|
||||
BUG_ON(raw_smp_processor_id() != cpu);
|
||||
|
||||
mutex_lock(µcode_mutex);
|
||||
microcode_update_cpu(cpu);
|
||||
mutex_unlock(µcode_mutex);
|
||||
|
||||
set_cpus_allowed_ptr(current, &old);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue