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

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
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -320,12 +320,19 @@ EXPORT_SYMBOL_GPL(unwind_get_return_address);

unsigned long *unwind_get_return_address_ptr(struct unwind_state *state)
{
	struct task_struct *task = state->task;

	if (unwind_done(state))
		return NULL;

	if (state->regs)
		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)
		return (unsigned long *)state->sp - 1;

+2 −2
Original line number Diff line number Diff line
@@ -372,7 +372,7 @@ static void enter_uniprocessor(void)
	int cpu;
	int err;

	if (downed_cpus == NULL &&
	if (!cpumask_available(downed_cpus) &&
	    !alloc_cpumask_var(&downed_cpus, GFP_KERNEL)) {
		pr_notice("Failed to allocate mask\n");
		goto out;
@@ -402,7 +402,7 @@ static void leave_uniprocessor(void)
	int cpu;
	int err;

	if (downed_cpus == NULL || cpumask_weight(downed_cpus) == 0)
	if (!cpumask_available(downed_cpus) || cpumask_weight(downed_cpus) == 0)
		return;
	pr_notice("Re-enabling CPUs...\n");
	for_each_cpu(cpu, downed_cpus) {