Messages in this thread | | | Date | Fri, 1 May 2015 18:27:31 +0200 | From | Ingo Molnar <> | Subject | Re: [PATCH 3/3] context_tracking,x86: remove extraneous irq disable & enable from context tracking on syscall entry |
| |
* Rik van Riel <riel@redhat.com> wrote:
> On 05/01/2015 12:03 PM, Andy Lutomirski wrote: > > > The last time I asked, the impression I got was that we needed two things: > > > > 1. We can't pluck things from the RCU list without knowing whether the > > CPU is in an RCU read-side critical section, and we can't know that > > unless we have regular grade periods or we know that the CPU is idle. > > To make the CPU detectably idle, we need to set a bit somewhere. > > More than that. We also need a way for another CPU to identify the > callbacks they could run for us, without confusing them with new > callbacks queued after we transitioned back from USER to KERNEL > context.
That's easy: a simple, constant-work IPI sent to nohz-full CPUs could just dequeue these callbacks, if it sees that we are still in user-mode.
It's super easy because such an IPI would essentially be equivalent to a system call context from RCU's POV, if it uses this test:
if (user_mode(regs)) { ... pluck RCU callbacks ... }
That way we can have lots of overhead removed from the syscall call path ...
Thanks,
Ingo
| |