* Juergen Gross <[email protected]> wrote:

> On 21/06/18 16:02, Ingo Molnar wrote:
> > 
> > * Ingo Molnar <[email protected]> wrote:
> > 
> >>
> >> * Mikulas Patocka <[email protected]> wrote:
> >>
> >>> The sleeping functions down, down_interruptible, down_killable and
> >>> down_timeout can't be called with interrupts disabled, so we don't have to
> >>> save and restore interrupt flag.
> >>>
> >>> This patch avoids the costly pushf and popf instructions on the semaphore
> >>> path.
> >>>
> >>> Signed-off-by: Mikulas Patocka <[email protected]>
> >>>
> >>> ---
> >>>  kernel/locking/semaphore.c |   21 ++++++++-------------
> >>>  1 file changed, 8 insertions(+), 13 deletions(-)
> >>
> >> I've applied this to the locking tree, I suspect we can do this on the 
> >> condition 
> >> that it doesn't explode in early boot code (which has irqs disabled) and 
> >> doesn't 
> >> generate early boot lockdep splats either.
> > 
> > Hm, this blew up pretty quick on a pretty regular x86-64 PC white-box, 
> > during 
> > early bootup:
> > 
> >   PANIC: early exception 0x08 IP 246:10 error ffffffff811537b2 cr2 
> > 0xffff88000240cff8
> > 
> > and I think it's due to your patch - verifying that now.
> 
> I guess local_irq_enable() being called by raw_spin_unlock_irq() makes
> its usage in early boot code undesirable.
> 
> Maybe it would be possible to use alternatives for that case? They are
> applied after enabling interrupts, so pushf and popf instructions could
> be patched away.

Or we could just leave the code as-is: the performance difference between 
CLI/STI 
and PUSHF/POPF shouldn't be significant, plus the semaphore APIs are obsolete 
and 
should not be used.

Thanks,

        Ingo

Reply via email to