On to, 2016-08-04 at 09:09 +0100, Chris Wilson wrote: > Joonas spotted a discrepancy between the pwrite and pread ioctls, in > that pwrite takes the rpm wakelock around its GGTT access, The wakelock > is required in order for the GTT to function. In disregard for the > current convention, we take the rpm wakelock around the access itself > rather than around the struct_mutex as the nesting is not strictly > required and such ordering will one day be fixed by explicitly noting > the barrier dependencies between the GGTT and rpm. > > Fixes: b50a53715f09 ("drm/i915: Support for pread/pwrite ...") > Reported-by: Joonas Lahtinen <joonas.lahtinen@xxxxxxxxxxxxxxx> Reviewed-by: Joonas Lahtinen <joonas.lahtinen@xxxxxxxxxxxxxxx> > Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> > Cc: Ankitprasad Sharma <ankitprasad.r.sharma@xxxxxxxxx> > Cc: Tvrtko Ursulin <tvrtko.ursulin@xxxxxxxxx> > Cc: Joonas Lahtinen <joonas.lahtinen@xxxxxxxxxxxxxxx> > Cc: drm-intel-fixes@xxxxxxxxxxxxxxxxxxxxx > --- > drivers/gpu/drm/i915/i915_gem.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c > index 9bef2c0803a5..9cb838ef8d02 100644 > --- a/drivers/gpu/drm/i915/i915_gem.c > +++ b/drivers/gpu/drm/i915/i915_gem.c > @@ -887,9 +887,12 @@ i915_gem_pread_ioctl(struct drm_device *dev, void *data, > ret = i915_gem_shmem_pread(dev, obj, args, file); > > /* pread for non shmem backed objects */ > - if (ret == -EFAULT || ret == -ENODEV) > + if (ret == -EFAULT || ret == -ENODEV) { > + intel_runtime_pm_get(to_i915(dev)); > ret = i915_gem_gtt_pread(dev, obj, args->size, > args->offset, args->data_ptr); > + intel_runtime_pm_put(to_i915(dev)); > + } > > out: > i915_gem_object_put(obj); -- Joonas Lahtinen Open Source Technology Center Intel Corporation _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx