Re: [PATCH 11/39] drm/i915: Allow userspace to clone contexts on creation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Quoting Tvrtko Ursulin (2019-03-14 16:18:17)
> 
> On 13/03/2019 14:43, Chris Wilson wrote:
> > +     if (local.flags & I915_CONTEXT_CLONE_VM) {
> > +             struct i915_hw_ppgtt *ppgtt;
> > +
> > +             do {
> > +                     ppgtt = READ_ONCE(src->ppgtt);
> > +                     if (!ppgtt)
> > +                             break;
> > +
> > +                     if (!kref_get_unless_zero(&ppgtt->ref))
> > +                             continue;
> > +
> > +                     if (ppgtt == READ_ONCE(src->ppgtt))
> > +                             break;
> 
> This loop needs a comment. For instance I don't understand what is this 
> line for. Firstly, we have a reference on ppgtt, so what do we care if 
> the source context in the meantime changed it? Secondly, even though it 
> matches now, why would it still match when we exit the loop?

Because it may have been reallocated between the read and the kref. Once
we have the kref, and passed through the strong memory barrier, can we
decide if this is the ppgtt that we wanted. It may indeed be released
from src->ppgtt after this point, but it can no longer be reused
elsewhere, so we can not inadvertently share the ppgtt from a third
party.
-Chris
_______________________________________________
Intel-gfx mailing list
Intel-gfx@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/intel-gfx




[Index of Archives]     [AMD Graphics]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux