The rcu_xchg_pointer() function can be used outside of a critical section, and usually must be followed by a synchronize_rcu() or call_rcu() call to detach from the resource, unless if there are some guarantees in place because of our own reference counting.