Re: [patch V6 12/37] x86/entry: Provide idtentry_entry/exit_cond_rcu()
From: Thomas Gleixner
Date: Tue May 19 2020 - 17:20:52 EST
Andy Lutomirski <luto@xxxxxxxxxx> writes:
> On Tue, May 19, 2020 at 1:20 PM Thomas Gleixner <tglx@xxxxxxxxxxxxx> wrote:
>> Thomas Gleixner <tglx@xxxxxxxxxxxxx> writes:
>> It's about this:
>>
>> rcu_nmi_enter()
>> {
>> if (!rcu_is_watching()) {
>> make it watch;
>> } else if (!in_nmi()) {
>> do_magic_nohz_dyntick_muck();
>> }
>>
>> So if we do all irq/system vector entries conditional then the
>> do_magic() gets never executed. After that I got lost...
>
> I'm also baffled by that magic, but I'm also not suggesting doing this
> to *all* entries -- just the not-super-magic ones that use
> idtentry_enter().
>
> Paul, what is this code actually trying to do?
Citing Paul from IRC:
"The way things are right now, you can leave out the rcu_irq_enter()
if this is not a nohz_full CPU.
Or if this is a nohz_full CPU, and the tick is already
enabled, in that case you could also leave out the rcu_irq_enter().
Or even if this is a nohz_full CPU and it does not have the tick
enabled, if it has been in the kernel less than a few tens of
milliseconds, still OK to avoid invoking rcu_irq_enter()
But my guess is that it would be a lot simpler to just always call
it.
Hope that helps.
Thanks,
tglx