Messages in this thread | | | Subject | Re: [RFC GIT PULL] softirq: Consolidation and stack overrun fix | From | Benjamin Herrenschmidt <> | Date | Mon, 23 Sep 2013 08:00:06 +1000 |
| |
On Sun, 2013-09-22 at 10:47 -0700, H. Peter Anvin wrote: > On 09/22/2013 09:24 AM, Peter Zijlstra wrote: > > > > As to the problem of GCC moving r13 about, some archs have some > > exceptions in the register allocator and leave some registers alone. > > IIRC MIPS has this and uses one of those (istr there's 2) for the > > per cpu base address. > > > > You can force gcc to leave a register alone with the command line option > -ffixed-r13.
Haven't tried that in a while but iirc, from the discussions I had with the gcc folks, it didn't work the way we wanted.
Basically, it still assumes that it's not going to change at random points, I can't have something like
register volatile unsigned long pre_cpu_offset asm("r13")
It will barf on the "volatile" and if I don't have it, it will make assumptions that r13 doesn't change, and thus might copy its value in another cpu accross preempt_enable/disable.
I think I need another sessions with gcc folks on that one.
Cheers, Ben.
| |