Re: [rfc patch] i386: don't save eflags on task switch

Andi Kleen
2006-11-05T18:53:12Z

>
> So you get a test, a unpredictable conditional jump, and the sti - and
> you'll end up with the cost being pretty much the same as the popf: only
> bigger and more complex.
>
> That's a win, right?

Previously we had a popf which for the CPU unpredictable
restoring of most of its state. I would assume the unpredicted jump
is cheaper than that.

I might be wrong. Benchmarks will tell when I try it.

But I think it might be worth a try at least.

>
> > 99.9999% of all restore_flags just need STI.
>
> Hell no. If you know it statically, you can already just do the
> "spin_lock_irq()"->"spin_unlock_irq()", and then you have the
> _unconditional_ sti.

I meant they don't care about any other flags. Of course you need
a test + conditional jump first to handle the nested lock case.

> Andi, one single bug is usually worth _months_ of peoples time and effort.
> How many CPU cycles is that?

I bet near all cases where restore_flags() are used to restore something
else than IF are actually bugs or performance issues of some sort

This doesn't include the context switch of course, but that one
doesn't use restore_flags().

(I think I have a few legitimate cases of save_flags though. They probably
should be using a different macro for clarity.)

-Andi