On Tue, Jul 27, 2021 at 09:33:42PM +0200, Thomas Gleixner wrote: > On Tue, Jul 27 2021 at 10:23, Paul E. McKenney wrote: > > On Tue, Jul 27, 2021 at 06:38:15PM +0200, Sebastian Andrzej Siewior wrote: > >> One thing that has been overseen is that a task within a migrate-disable > >> region (as on PREEMPT_RT with disabled BH) is fully preemptible but may > >> not be migrated to another CPU which should be enough to guarantee that > >> rdp remains stable. > >> > >> Check also disabled migration of the task if the RCU data pointer is > >> from current CPU. Put the whole check within an SMP ifdef block since > >> without SMP there are not CPU migrations to worry about (also > >> task_struct::migration_disabled is missing). > >> > >> Cc: Frederic Weisbecker <frederic@xxxxxxxxxx> > >> Signed-off-by: Sebastian Andrzej Siewior <bigeasy@xxxxxxxxxxxxx> > >> --- > >> I don't fully understand why the CPU-hotplug lock matters here but this > >> is beside the point ;) > > > > If I remember correctly, any attempt to change the offloaded state > > must hold off CPU-hotplug operations. So if the current thread is > > holding off CPU-hotplug operations, no other thread can be doing > > an offload or de-offload operation. > > It only prevents unplugging of a CPU, but not plugging a CPU. Hmm, but both _cpu_down() and _cpu_up() do cpus_write_lock(). What did I overlook? PS: just had a quick look and no RCU cpu up operation seem to even check RCU nocb offload state. So we should be fine ( -ENOSPC for further famous last words to engrave). Thanks.