Re: [PATCH v3 00/13] Virtually mapped stacks with guard pages (x86, core)

From: Peter Zijlstra
Date: Thu Jun 23 2016 - 15:46:43 EST


On Thu, Jun 23, 2016 at 12:34:24PM -0700, Linus Torvalds wrote:
> On Thu, Jun 23, 2016 at 12:11 PM, Peter Zijlstra <peterz@xxxxxxxxxxxxx> wrote:
> >
> > Didn't we talk about using SLAB_DESTROY_BY_RCU for task_struct before?
> > If that is possible, a reuse in per-cpu cache is equally possible.
> >
> > All we really want to guarantee is that the memory remains a
> > task_struct, it need not remain the same task, right?
>
> No, we can't do SLAB_DESTROY_BY_RCU for the task_struct itself,
> because the RCU list traversal does expect that the thread and task
> lists are stable even if it walks into a "stale" struct task_struct.

Indeed.

OK, so the situation we talked about before is different, we wanted to
do SLAB_DESTROY_BY_RCU on top of the existing delayed_put_task_struct()
to get a double grace period.

The problem was for things like rq->curr, which isn't RCU managed as
such, we could still do:

rcu_read_lock();
task = rq->curr;

and rely on task being _a_ task_struct, even though it might not be the
self-same task we thought we had.

So yes, not an option and I was stitching together two half remembered
situations to create utter nonsense.