On Sat, Mar 28, 2015 at 09:48:28AM +0530, Viresh Kumar wrote:
On Fri, Mar 27, 2015 at 3:00 PM, Peter Zijlstra peterz@infradead.org wrote:
On Fri, Mar 27, 2015 at 10:16:13AM +0100, Peter Zijlstra wrote:
So the issue seems to be that we need base->running_timer in order to tell if a callback is running, right?
We could align the base on 8 bytes to gain an extra bit in the pointer and use that bit to indicate the running state. Then these sites can spin on that bit while we can change the actual base pointer.
Even though tvec_base has ____cacheline_aligned stuck on, most are allocated using kzalloc_node() which does not actually respect that but already guarantees a minimum u64 alignment, so I think we can use that third bit without too much magic.
Right. So what I tried earlier was very much similar to you are suggesting. The only difference was that I haven't made much attempts towards saving memory.
But Thomas didn't like it for sure and I believe that Rant will hold true for what you are suggesting as well, isn't it ?
http://lists.linaro.org/pipermail/linaro-kernel/2013-November/008866.html
Well, for one your patch is indeed disgusting. But yes I'm aware Thomas wants to rewrite the timer thing. But Thomas is away for a little while and if this really needs to happen then it does.
Alternatively the thing hocko suggests is an utter fail too. You cannot stuff that into hardirq context, that's insane.