All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/2] drm/i915: Fix wait_req unreferencing.
@ 2016-08-08 11:23 Maarten Lankhorst
  2016-08-08 11:23 ` [PATCH 1/2] drm/i915: Remove early return in prepare/cleanup plane Maarten Lankhorst
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Maarten Lankhorst @ 2016-08-08 11:23 UTC (permalink / raw)
  To: intel-gfx

Small cleanup plus a fix for the reference dropping.
This removes a source of heisenbugs. :-)

Maarten Lankhorst (2):
  drm/i915: Remove early return in prepare/cleanup plane
  drm/i915: Drop reference to current state wait req as soon as it goes
    unused

 drivers/gpu/drm/i915/intel_display.c | 16 ++++------------
 1 file changed, 4 insertions(+), 12 deletions(-)

-- 
2.7.4

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH 1/2] drm/i915: Remove early return in prepare/cleanup plane
  2016-08-08 11:23 [PATCH 0/2] drm/i915: Fix wait_req unreferencing Maarten Lankhorst
@ 2016-08-08 11:23 ` Maarten Lankhorst
  2016-08-08 11:23 ` [PATCH 2/2] drm/i915: Drop reference to current state wait req as soon as it goes unused Maarten Lankhorst
  2016-08-08 11:25 ` ✗ Ro.CI.BAT: failure for drm/i915: Fix wait_req unreferencing Patchwork
  2 siblings, 0 replies; 9+ messages in thread
From: Maarten Lankhorst @ 2016-08-08 11:23 UTC (permalink / raw)
  To: intel-gfx

This is a noop in prepare_plane, which already carefully handles this
with if guards and early return.

cleanup_plane_fb has it as a noop too, it only unpins old_fb and
unsets wait_req. The latter is a noop because prepare_plane won't
set wait_req when obj == NULL. It's also dangerous to keep because
plane->state may change before cleanup_plane_fb is called.

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
---
 drivers/gpu/drm/i915/intel_display.c | 12 ++----------
 1 file changed, 2 insertions(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index b12c8302580f..f56707289615 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -14117,9 +14117,6 @@ intel_prepare_plane_fb(struct drm_plane *plane,
 	struct reservation_object *resv;
 	int ret = 0;
 
-	if (!obj && !old_obj)
-		return 0;
-
 	if (old_obj) {
 		struct drm_crtc_state *crtc_state =
 			drm_atomic_get_existing_crtc_state(new_state->state, plane->state->crtc);
@@ -14193,15 +14190,10 @@ intel_cleanup_plane_fb(struct drm_plane *plane,
 		       const struct drm_plane_state *old_state)
 {
 	struct drm_device *dev = plane->dev;
-	struct intel_plane_state *old_intel_state;
 	struct intel_plane_state *intel_state = to_intel_plane_state(plane->state);
 	struct drm_i915_gem_object *old_obj = intel_fb_obj(old_state->fb);
-	struct drm_i915_gem_object *obj = intel_fb_obj(plane->state->fb);
-
-	old_intel_state = to_intel_plane_state(old_state);
-
-	if (!obj && !old_obj)
-		return;
+	struct intel_plane_state *old_intel_state =
+		to_intel_plane_state(old_state);
 
 	if (old_obj && (plane->type != DRM_PLANE_TYPE_CURSOR ||
 	    !INTEL_INFO(dev)->cursor_needs_physical))
-- 
2.7.4

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 2/2] drm/i915: Drop reference to current state wait req as soon as it goes unused
  2016-08-08 11:23 [PATCH 0/2] drm/i915: Fix wait_req unreferencing Maarten Lankhorst
  2016-08-08 11:23 ` [PATCH 1/2] drm/i915: Remove early return in prepare/cleanup plane Maarten Lankhorst
@ 2016-08-08 11:23 ` Maarten Lankhorst
  2016-08-08 15:34   ` Daniel Vetter
  2016-08-08 11:25 ` ✗ Ro.CI.BAT: failure for drm/i915: Fix wait_req unreferencing Patchwork
  2 siblings, 1 reply; 9+ messages in thread
From: Maarten Lankhorst @ 2016-08-08 11:23 UTC (permalink / raw)
  To: intel-gfx; +Cc: David Airlie, Daniel Vetter, Keith Packard, dri-devel

There are two paths into intel_cleanup_plane_fb, the normal completion
path and the failure path.

In the failure case, intel_cleanup_plane_fb is called before
drm_atomic_helper_swap_state, so any wait_req reference made in
intel_prepare_plane_fb will be in old_intel_state->wait_req.

In the normal completion path, wait_req is not freed until
the next commit, which is no longer used after waiting.

Free it as soon as possible, so we don't hold on to it indefinitely.

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Keith Packard <keithp@keithp.com>
Cc: Daniel Vetter <daniel.vetter@intel.com>
Cc: David Airlie <airlied@linux.ie>
Cc: intel-gfx@lists.freedesktop.org
Cc: dri-devel@lists.freedesktop.org
Fixes: 849782575325 ("drm/i915: cleanup_plane_fb: also drop reference to current state wait_req")
---
 drivers/gpu/drm/i915/intel_display.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index f56707289615..e72ad97998a4 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -13754,6 +13754,8 @@ static void intel_atomic_commit_tail(struct drm_atomic_state *state)
 		/* EIO should be eaten, and we can't get interrupted in the
 		 * worker, and blocking commits have waited already. */
 		WARN_ON(ret);
+
+		i915_gem_request_assign(&intel_plane_state->wait_req, NULL);
 	}
 
 	if (!state->legacy_cursor_update)
@@ -14190,7 +14192,6 @@ intel_cleanup_plane_fb(struct drm_plane *plane,
 		       const struct drm_plane_state *old_state)
 {
 	struct drm_device *dev = plane->dev;
-	struct intel_plane_state *intel_state = to_intel_plane_state(plane->state);
 	struct drm_i915_gem_object *old_obj = intel_fb_obj(old_state->fb);
 	struct intel_plane_state *old_intel_state =
 		to_intel_plane_state(old_state);
@@ -14199,7 +14200,6 @@ intel_cleanup_plane_fb(struct drm_plane *plane,
 	    !INTEL_INFO(dev)->cursor_needs_physical))
 		intel_unpin_fb_obj(old_state->fb, old_state->rotation);
 
-	i915_gem_request_assign(&intel_state->wait_req, NULL);
 	i915_gem_request_assign(&old_intel_state->wait_req, NULL);
 }
 
-- 
2.7.4

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* ✗ Ro.CI.BAT: failure for drm/i915: Fix wait_req unreferencing.
  2016-08-08 11:23 [PATCH 0/2] drm/i915: Fix wait_req unreferencing Maarten Lankhorst
  2016-08-08 11:23 ` [PATCH 1/2] drm/i915: Remove early return in prepare/cleanup plane Maarten Lankhorst
  2016-08-08 11:23 ` [PATCH 2/2] drm/i915: Drop reference to current state wait req as soon as it goes unused Maarten Lankhorst
@ 2016-08-08 11:25 ` Patchwork
  2 siblings, 0 replies; 9+ messages in thread
From: Patchwork @ 2016-08-08 11:25 UTC (permalink / raw)
  To: Maarten Lankhorst; +Cc: intel-gfx

== Series Details ==

Series: drm/i915: Fix wait_req unreferencing.
URL   : https://patchwork.freedesktop.org/series/10781/
State : failure

== Summary ==

Applying: drm/i915: Remove early return in prepare/cleanup plane
Applying: drm/i915: Drop reference to current state wait req as soon as it goes unused
fatal: sha1 information is lacking or useless (drivers/gpu/drm/i915/intel_display.c).
error: could not build fake ancestor
Patch failed at 0002 drm/i915: Drop reference to current state wait req as soon as it goes unused
The copy of the patch that failed is found in: .git/rebase-apply/patch
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 2/2] drm/i915: Drop reference to current state wait req as soon as it goes unused
  2016-08-08 11:23 ` [PATCH 2/2] drm/i915: Drop reference to current state wait req as soon as it goes unused Maarten Lankhorst
@ 2016-08-08 15:34   ` Daniel Vetter
  2016-08-08 15:49     ` Keith Packard
  2016-08-09  9:18     ` [PATCH 2/2] drm/i915: Drop reference to current state wait req as soon as it goes unused Maarten Lankhorst
  0 siblings, 2 replies; 9+ messages in thread
From: Daniel Vetter @ 2016-08-08 15:34 UTC (permalink / raw)
  To: Maarten Lankhorst
  Cc: David Airlie, Daniel Vetter, intel-gfx, Keith Packard, dri-devel

On Mon, Aug 8, 2016 at 1:23 PM, Maarten Lankhorst
<maarten.lankhorst@linux.intel.com> wrote:
> There are two paths into intel_cleanup_plane_fb, the normal completion
> path and the failure path.
>
> In the failure case, intel_cleanup_plane_fb is called before
> drm_atomic_helper_swap_state, so any wait_req reference made in
> intel_prepare_plane_fb will be in old_intel_state->wait_req.
>
> In the normal completion path, wait_req is not freed until
> the next commit, which is no longer used after waiting.
>
> Free it as soon as possible, so we don't hold on to it indefinitely.
>
> Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> Cc: Keith Packard <keithp@keithp.com>
> Cc: Daniel Vetter <daniel.vetter@intel.com>
> Cc: David Airlie <airlied@linux.ie>
> Cc: intel-gfx@lists.freedesktop.org
> Cc: dri-devel@lists.freedesktop.org
> Fixes: 849782575325 ("drm/i915: cleanup_plane_fb: also drop reference to current state wait_req")

We still need to clean up the reference in case of failure, which
means latest in intel_plane_destroy_state(). Also hanging onto a
request isn't that evil really, why can't we just only clean up in the
destroy function?
-Daniel

> ---
>  drivers/gpu/drm/i915/intel_display.c | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index f56707289615..e72ad97998a4 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -13754,6 +13754,8 @@ static void intel_atomic_commit_tail(struct drm_atomic_state *state)
>                 /* EIO should be eaten, and we can't get interrupted in the
>                  * worker, and blocking commits have waited already. */
>                 WARN_ON(ret);
> +
> +               i915_gem_request_assign(&intel_plane_state->wait_req, NULL);
>         }
>
>         if (!state->legacy_cursor_update)
> @@ -14190,7 +14192,6 @@ intel_cleanup_plane_fb(struct drm_plane *plane,
>                        const struct drm_plane_state *old_state)
>  {
>         struct drm_device *dev = plane->dev;
> -       struct intel_plane_state *intel_state = to_intel_plane_state(plane->state);
>         struct drm_i915_gem_object *old_obj = intel_fb_obj(old_state->fb);
>         struct intel_plane_state *old_intel_state =
>                 to_intel_plane_state(old_state);
> @@ -14199,7 +14200,6 @@ intel_cleanup_plane_fb(struct drm_plane *plane,
>             !INTEL_INFO(dev)->cursor_needs_physical))
>                 intel_unpin_fb_obj(old_state->fb, old_state->rotation);
>
> -       i915_gem_request_assign(&intel_state->wait_req, NULL);
>         i915_gem_request_assign(&old_intel_state->wait_req, NULL);
>  }
>
> --
> 2.7.4
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx



-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 2/2] drm/i915: Drop reference to current state wait req as soon as it goes unused
  2016-08-08 15:34   ` Daniel Vetter
@ 2016-08-08 15:49     ` Keith Packard
  2016-08-09 10:15       ` [PATCH 2/2] drm/i915: Drop reference to plane state wait req in destructor Maarten Lankhorst
  2016-08-09  9:18     ` [PATCH 2/2] drm/i915: Drop reference to current state wait req as soon as it goes unused Maarten Lankhorst
  1 sibling, 1 reply; 9+ messages in thread
From: Keith Packard @ 2016-08-08 15:49 UTC (permalink / raw)
  To: Daniel Vetter, Maarten Lankhorst
  Cc: David Airlie, Daniel Vetter, intel-gfx, dri-devel


[-- Attachment #1.1: Type: text/plain, Size: 660 bytes --]

Daniel Vetter <daniel@ffwll.ch> writes:

> We still need to clean up the reference in case of failure, which
> means latest in intel_plane_destroy_state(). Also hanging onto a
> request isn't that evil really, why can't we just only clean up in the
> destroy function?

Sticking a cleanup there as well is good insurance, but it seems like a
reasonable policy to drop references when values go 'out of scope' as
they do in cleanup_plane_fb. But, you're right, we only *need* to drop
the reference in the destroy function, it's just that the state hangs
around until the next mode setting operation, which is likely to be days
away.

-- 
-keith

[-- Attachment #1.2: signature.asc --]
[-- Type: application/pgp-signature, Size: 810 bytes --]

[-- Attachment #2: Type: text/plain, Size: 160 bytes --]

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 2/2] drm/i915: Drop reference to current state wait req as soon as it goes unused
  2016-08-08 15:34   ` Daniel Vetter
  2016-08-08 15:49     ` Keith Packard
@ 2016-08-09  9:18     ` Maarten Lankhorst
  1 sibling, 0 replies; 9+ messages in thread
From: Maarten Lankhorst @ 2016-08-09  9:18 UTC (permalink / raw)
  To: Daniel Vetter
  Cc: David Airlie, Daniel Vetter, intel-gfx, Keith Packard, dri-devel

Op 08-08-16 om 17:34 schreef Daniel Vetter:
> On Mon, Aug 8, 2016 at 1:23 PM, Maarten Lankhorst
> <maarten.lankhorst@linux.intel.com> wrote:
>> There are two paths into intel_cleanup_plane_fb, the normal completion
>> path and the failure path.
>>
>> In the failure case, intel_cleanup_plane_fb is called before
>> drm_atomic_helper_swap_state, so any wait_req reference made in
>> intel_prepare_plane_fb will be in old_intel_state->wait_req.
>>
>> In the normal completion path, wait_req is not freed until
>> the next commit, which is no longer used after waiting.
>>
>> Free it as soon as possible, so we don't hold on to it indefinitely.
>>
>> Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
>> Cc: Keith Packard <keithp@keithp.com>
>> Cc: Daniel Vetter <daniel.vetter@intel.com>
>> Cc: David Airlie <airlied@linux.ie>
>> Cc: intel-gfx@lists.freedesktop.org
>> Cc: dri-devel@lists.freedesktop.org
>> Fixes: 849782575325 ("drm/i915: cleanup_plane_fb: also drop reference to current state wait_req")
> We still need to clean up the reference in case of failure, which
> means latest in intel_plane_destroy_state(). Also hanging onto a
> request isn't that evil really, why can't we just only clean up in the
> destroy function?
Hm true, we're still guaranteed to call cleanup_plane_fb in case of failure though, else the WARN in unref would trigger.

I think it's harmless to hang onto the request, worst case we keep an extra MAX_PLANES * MAX_CRTCS * sizeof(i915_gem_request) allocated,
which is slightly more than 4k memory. (4 * 3 * 352)

If we unref the request in the destructor, it's also one step closer to constifying plane_state.

~Maarten
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH 2/2] drm/i915: Drop reference to plane state wait req in destructor.
  2016-08-08 15:49     ` Keith Packard
@ 2016-08-09 10:15       ` Maarten Lankhorst
  2016-08-09 11:20         ` Daniel Vetter
  0 siblings, 1 reply; 9+ messages in thread
From: Maarten Lankhorst @ 2016-08-09 10:15 UTC (permalink / raw)
  To: Keith Packard, Daniel Vetter
  Cc: David Airlie, Daniel Vetter, intel-gfx, dri-devel

With gem requests reworked to only keep some memory around after
it's completed it's now mostly harmless to keep a reference to the
request until the state is destroyed. This makes it easy to hang
on to the request until the plane state is destroyed since it is
just a bunch of memory now.

On my 64-bits system a i915_gem_request is 352 bytes. With all
3 crtc's, each 4 planes enabled the total is 4224 bytes,
low enough not to optimize this case too much.

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Cc: Keith Packard <keithp@keithp.com>
Cc: Daniel Vetter <daniel.vetter@intel.com>
Cc: David Airlie <airlied@linux.ie>
Cc: intel-gfx@lists.freedesktop.org
Cc: dri-devel@lists.freedesktop.org
Fixes: 849782575325 ("drm/i915: cleanup_plane_fb: also drop reference to current state wait_req")
---
 drivers/gpu/drm/i915/intel_atomic_plane.c | 5 ++++-
 drivers/gpu/drm/i915/intel_display.c      | 6 ------
 2 files changed, 4 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_atomic_plane.c b/drivers/gpu/drm/i915/intel_atomic_plane.c
index 7de7721f65bc..f98071a1dcc0 100644
--- a/drivers/gpu/drm/i915/intel_atomic_plane.c
+++ b/drivers/gpu/drm/i915/intel_atomic_plane.c
@@ -101,7 +101,10 @@ void
 intel_plane_destroy_state(struct drm_plane *plane,
 			  struct drm_plane_state *state)
 {
-	WARN_ON(state && to_intel_plane_state(state)->wait_req);
+	struct intel_plane_state *intel_state = to_intel_plane_state(state);
+
+	i915_gem_request_assign(&intel_state->wait_req, NULL);
+
 	drm_atomic_helper_plane_destroy_state(plane, state);
 }
 
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index af45ee206239..774895288bcc 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -14063,17 +14063,11 @@ intel_cleanup_plane_fb(struct drm_plane *plane,
 		       const struct drm_plane_state *old_state)
 {
 	struct drm_device *dev = plane->dev;
-	struct intel_plane_state *intel_state = to_intel_plane_state(plane->state);
 	struct drm_i915_gem_object *old_obj = intel_fb_obj(old_state->fb);
-	struct intel_plane_state *old_intel_state =
-		to_intel_plane_state(old_state);
 
 	if (old_obj && (plane->type != DRM_PLANE_TYPE_CURSOR ||
 	    !INTEL_INFO(dev)->cursor_needs_physical))
 		intel_unpin_fb_obj(old_state->fb, old_state->rotation);
-
-	i915_gem_request_assign(&intel_state->wait_req, NULL);
-	i915_gem_request_assign(&old_intel_state->wait_req, NULL);
 }
 
 int
-- 
2.7.4


_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH 2/2] drm/i915: Drop reference to plane state wait req in destructor.
  2016-08-09 10:15       ` [PATCH 2/2] drm/i915: Drop reference to plane state wait req in destructor Maarten Lankhorst
@ 2016-08-09 11:20         ` Daniel Vetter
  0 siblings, 0 replies; 9+ messages in thread
From: Daniel Vetter @ 2016-08-09 11:20 UTC (permalink / raw)
  To: Maarten Lankhorst
  Cc: Keith Packard, David Airlie, intel-gfx, dri-devel, Daniel Vetter

On Tue, Aug 09, 2016 at 12:15:51PM +0200, Maarten Lankhorst wrote:
> With gem requests reworked to only keep some memory around after
> it's completed it's now mostly harmless to keep a reference to the
> request until the state is destroyed. This makes it easy to hang
> on to the request until the plane state is destroyed since it is
> just a bunch of memory now.
> 
> On my 64-bits system a i915_gem_request is 352 bytes. With all
> 3 crtc's, each 4 planes enabled the total is 4224 bytes,
> low enough not to optimize this case too much.
> 
> Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
> Cc: Keith Packard <keithp@keithp.com>
> Cc: Daniel Vetter <daniel.vetter@intel.com>
> Cc: David Airlie <airlied@linux.ie>
> Cc: intel-gfx@lists.freedesktop.org
> Cc: dri-devel@lists.freedesktop.org
> Fixes: 849782575325 ("drm/i915: cleanup_plane_fb: also drop reference to current state wait_req")

Yeah, I think hanging onto requests like that is perfectly fine, and it
simplifies the gymnastics for tracking things if we always allocate
drm_*_state resources in atomic_duplicate, update the refs in atomic_check
(with the various set functions the core has, or our own) and then release
references in atomic_state destroy.

Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> ---
>  drivers/gpu/drm/i915/intel_atomic_plane.c | 5 ++++-
>  drivers/gpu/drm/i915/intel_display.c      | 6 ------
>  2 files changed, 4 insertions(+), 7 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_atomic_plane.c b/drivers/gpu/drm/i915/intel_atomic_plane.c
> index 7de7721f65bc..f98071a1dcc0 100644
> --- a/drivers/gpu/drm/i915/intel_atomic_plane.c
> +++ b/drivers/gpu/drm/i915/intel_atomic_plane.c
> @@ -101,7 +101,10 @@ void
>  intel_plane_destroy_state(struct drm_plane *plane,
>  			  struct drm_plane_state *state)
>  {
> -	WARN_ON(state && to_intel_plane_state(state)->wait_req);
> +	struct intel_plane_state *intel_state = to_intel_plane_state(state);
> +
> +	i915_gem_request_assign(&intel_state->wait_req, NULL);
> +
>  	drm_atomic_helper_plane_destroy_state(plane, state);
>  }
>  
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index af45ee206239..774895288bcc 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -14063,17 +14063,11 @@ intel_cleanup_plane_fb(struct drm_plane *plane,
>  		       const struct drm_plane_state *old_state)
>  {
>  	struct drm_device *dev = plane->dev;
> -	struct intel_plane_state *intel_state = to_intel_plane_state(plane->state);
>  	struct drm_i915_gem_object *old_obj = intel_fb_obj(old_state->fb);
> -	struct intel_plane_state *old_intel_state =
> -		to_intel_plane_state(old_state);
>  
>  	if (old_obj && (plane->type != DRM_PLANE_TYPE_CURSOR ||
>  	    !INTEL_INFO(dev)->cursor_needs_physical))
>  		intel_unpin_fb_obj(old_state->fb, old_state->rotation);
> -
> -	i915_gem_request_assign(&intel_state->wait_req, NULL);
> -	i915_gem_request_assign(&old_intel_state->wait_req, NULL);
>  }
>  
>  int
> -- 
> 2.7.4
> 
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2016-08-09 11:20 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-08-08 11:23 [PATCH 0/2] drm/i915: Fix wait_req unreferencing Maarten Lankhorst
2016-08-08 11:23 ` [PATCH 1/2] drm/i915: Remove early return in prepare/cleanup plane Maarten Lankhorst
2016-08-08 11:23 ` [PATCH 2/2] drm/i915: Drop reference to current state wait req as soon as it goes unused Maarten Lankhorst
2016-08-08 15:34   ` Daniel Vetter
2016-08-08 15:49     ` Keith Packard
2016-08-09 10:15       ` [PATCH 2/2] drm/i915: Drop reference to plane state wait req in destructor Maarten Lankhorst
2016-08-09 11:20         ` Daniel Vetter
2016-08-09  9:18     ` [PATCH 2/2] drm/i915: Drop reference to current state wait req as soon as it goes unused Maarten Lankhorst
2016-08-08 11:25 ` ✗ Ro.CI.BAT: failure for drm/i915: Fix wait_req unreferencing Patchwork

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.