> Yes, the MSR_EE is cleared before we jump to do_work. I'm OK with > clearing the hardirqenable flag. I just assumed that the hardirq flag > was supposed to reflect the MSR_EE state, so it looked a bit odd > clearing the MSR_EE at one place and then reflecting the change at another.
Yeah well, it is supposed to reflect EE in the "general case", it's just that in the exception entry/exit, we take shortcuts when turning EE off for short amount of times without reflecting it in the PACA. This is why, in this case, since we are going back to C code, I want to have it "fixed up" to reflect reality. Cheers, Ben. > Anyway, the patch works fine. > > Thanks, > Val. > > So either we > > set it back, or we clear HARDIRQEN to reflect it. It will be re-enable > > as soon as preempt_schedule_irq() calls local_irq_enable() which is soon > > enough anyways. > > > > Also that avoids perf interrupt sneaking in since those act as NMIs in > > that regard and -will- get in even when soft disabled. > > > > Cheers, > > Ben. > > > >> Thanks, > >> Val. > >>> Ben. > >>> > >>>> Thanks, > >>>> Val. > >>>> > >>>>> + TRACE_DISABLE_INTS > >>>>> + > >>>>> + /* Call the scheduler with soft IRQs off */ > >>>>> +1: bl .preempt_schedule_irq > >>>>> + > >>>>> + /* Hard-disable interrupts again (and update PACA) */ > >>>>> #ifdef CONFIG_PPC_BOOK3E > >>>>> - wrteei 1 > >>>>> - bl .preempt_schedule > >>>>> wrteei 0 > >>>>> #else > >>>>> - ori r10,r10,MSR_EE > >>>>> - mtmsrd r10,1 /* reenable interrupts */ > >>>>> - bl .preempt_schedule > >>>>> mfmsr r10 > >>>>> - clrrdi r9,r1,THREAD_SHIFT > >>>>> - rldicl r10,r10,48,1 /* disable interrupts again */ > >>>>> + rldicl r10,r10,48,1 > >>>>> rotldi r10,r10,16 > >>>>> mtmsrd r10,1 > >>>>> #endif /* CONFIG_PPC_BOOK3E */ > >>>>> + li r0,0 > >>>>> + stb r0,PACAHARDIRQEN(r13) > >>>>> + > >>>>> + /* Re-test flags and eventually loop */ > >>>>> + clrrdi r9,r1,THREAD_SHIFT > >>>>> ld r4,TI_FLAGS(r9) > >>>>> andi. r0,r4,_TIF_NEED_RESCHED > >>>>> bne 1b > >>>>> b restore > >>>>> > >>>>> user_work: > >>>>> -#endif > >>>>> +#endif /* CONFIG_PREEMPT */ > >>>>> + > >>>>> /* Enable interrupts */ > >>>>> #ifdef CONFIG_PPC_BOOK3E > >>>>> wrteei 1 > >>> > > > > _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev