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

Commit 50d2a422 authored by Benjamin Herrenschmidt's avatar Benjamin Herrenschmidt
Browse files

powerpc: Copy back TIF flags on return from softirq stack



We already did it for hard IRQs but it looks like we forgot
to do it for softirqs. Without this, we would lose flags
such as TIF_NEED_RESCHED set using current_thread_info()
by something running of a softirq.

Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
parent 5adfd346
Loading
Loading
Loading
Loading
+7 −0
Original line number Original line Diff line number Diff line
@@ -451,11 +451,18 @@ static inline void do_softirq_onstack(void)
	curtp = current_thread_info();
	curtp = current_thread_info();
	irqtp = softirq_ctx[smp_processor_id()];
	irqtp = softirq_ctx[smp_processor_id()];
	irqtp->task = curtp->task;
	irqtp->task = curtp->task;
	irqtp->flags = 0;
	current->thread.ksp_limit = (unsigned long)irqtp +
	current->thread.ksp_limit = (unsigned long)irqtp +
				    _ALIGN_UP(sizeof(struct thread_info), 16);
				    _ALIGN_UP(sizeof(struct thread_info), 16);
	call_do_softirq(irqtp);
	call_do_softirq(irqtp);
	current->thread.ksp_limit = saved_sp_limit;
	current->thread.ksp_limit = saved_sp_limit;
	irqtp->task = NULL;
	irqtp->task = NULL;

	/* Set any flag that may have been set on the
	 * alternate stack
	 */
	if (irqtp->flags)
		set_bits(irqtp->flags, &curtp->flags);
}
}


void do_softirq(void)
void do_softirq(void)