if (!refcount_dec_and_test(&t->usage))
                return;
 
+       /*
+        * In !RT, it is always safe to call __put_task_struct().
+        * Under RT, we can only call it in preemptible context.
+        */
+       if (!IS_ENABLED(CONFIG_PREEMPT_RT) || preemptible()) {
+               static DEFINE_WAIT_OVERRIDE_MAP(put_task_map, LD_WAIT_SLEEP);
+
+               lock_map_acquire_try(&put_task_map);
+               __put_task_struct(t);
+               lock_map_release(&put_task_map);
+               return;
+       }
+
        /*
         * under PREEMPT_RT, we can't call put_task_struct
         * in atomic context because it will indirectly
         * when it fails to fork a process. Therefore, there is no
         * way it can conflict with put_task_struct().
         */
-       if (IS_ENABLED(CONFIG_PREEMPT_RT) && !preemptible())
-               call_rcu(&t->rcu, __put_task_struct_rcu_cb);
-       else
-               __put_task_struct(t);
+       call_rcu(&t->rcu, __put_task_struct_rcu_cb);
 }
 
 DEFINE_FREE(put_task, struct task_struct *, if (_T) put_task_struct(_T))