On Thu, Jul 25, 2024 at 5:30 PM Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote: > > On Thu, Jul 25, 2024 at 05:09:14PM +0200, Alice Ryhl wrote: > > > > As per always for not being able to read rust; how does this extend to > > > get_task_struct()? Once you've taken a reference on current, you should > > > be free to pass it along to whomever. > > > > Once you take a reference on current, it becomes thread-safe. This is > > because taking a reference creates a value of type ARef<Task> rather > > than TaskRef, and ARef<Task> is considered thread-safe. > > Ignoring comments, there isn't a single mention of ARef there. Where > does it come from? That's because the conversion to ARef<Task> is a two-step process. The TaskRef type just provides a conversion from &TaskRef to &Task via the `impl Deref` block. There is a conversion from &Task to ARef<Task> elsewhere, and this conversion is where the call to get_task_struct() happens. Alice