Commit 667b6249 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'x86-urgent-2020-05-24' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull x86 fixes from Thomas Gleixner:
 "Two fixes for x86:

   - Unbreak stack dumps for inactive tasks by interpreting the special
     first frame left by __switch_to_asm() correctly.

     The recent change not to skip the first frame so ORC and frame
     unwinder behave in the same way caused all entries to be
     unreliable, i.e. prepended with '?'.

   - Use cpumask_available() instead of an implicit NULL check of a
     cpumask_var_t in mmio trace to prevent a Clang build warning"

* tag 'x86-urgent-2020-05-24' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  x86/unwind/orc: Fix unwind_get_return_address_ptr() for inactive tasks
  x86/mmiotrace: Use cpumask_available() for cpumask_var_t variables
parents 9e61d12b 187b96db
...@@ -320,12 +320,19 @@ EXPORT_SYMBOL_GPL(unwind_get_return_address); ...@@ -320,12 +320,19 @@ EXPORT_SYMBOL_GPL(unwind_get_return_address);
unsigned long *unwind_get_return_address_ptr(struct unwind_state *state) unsigned long *unwind_get_return_address_ptr(struct unwind_state *state)
{ {
struct task_struct *task = state->task;
if (unwind_done(state)) if (unwind_done(state))
return NULL; return NULL;
if (state->regs) if (state->regs)
return &state->regs->ip; return &state->regs->ip;
if (task != current && state->sp == task->thread.sp) {
struct inactive_task_frame *frame = (void *)task->thread.sp;
return &frame->ret_addr;
}
if (state->sp) if (state->sp)
return (unsigned long *)state->sp - 1; return (unsigned long *)state->sp - 1;
......
...@@ -372,7 +372,7 @@ static void enter_uniprocessor(void) ...@@ -372,7 +372,7 @@ static void enter_uniprocessor(void)
int cpu; int cpu;
int err; int err;
if (downed_cpus == NULL && if (!cpumask_available(downed_cpus) &&
!alloc_cpumask_var(&downed_cpus, GFP_KERNEL)) { !alloc_cpumask_var(&downed_cpus, GFP_KERNEL)) {
pr_notice("Failed to allocate mask\n"); pr_notice("Failed to allocate mask\n");
goto out; goto out;
...@@ -402,7 +402,7 @@ static void leave_uniprocessor(void) ...@@ -402,7 +402,7 @@ static void leave_uniprocessor(void)
int cpu; int cpu;
int err; int err;
if (downed_cpus == NULL || cpumask_weight(downed_cpus) == 0) if (!cpumask_available(downed_cpus) || cpumask_weight(downed_cpus) == 0)
return; return;
pr_notice("Re-enabling CPUs...\n"); pr_notice("Re-enabling CPUs...\n");
for_each_cpu(cpu, downed_cpus) { for_each_cpu(cpu, downed_cpus) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment