diff mbox

drm/i915: reset drm state backpointer in crtc_state

Message ID 1428345029-13880-1-git-send-email-chandra.konduru@intel.com (mailing list archive)
State New, archived
Headers show

Commit Message

Chandra Konduru April 6, 2015, 6:30 p.m. UTC
At end of intel_crtc_set_config, reset crtc_state's
drm_state back pointer to null.

Signed-off-by: Chandra Konduru <chandra.konduru@intel.com>
---
 drivers/gpu/drm/i915/intel_display.c |    4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

Comments

Shuang He April 6, 2015, 8:52 p.m. UTC | #1
Tested-By: Intel Graphics QA PRTS (Patch Regression Test System Contact: shuang.he@intel.com)
Task id: 6132
-------------------------------------Summary-------------------------------------
Platform          Delta          drm-intel-nightly          Series Applied
PNV                                  272/272              272/272
ILK                 -1              302/302              301/302
SNB                                  303/303              303/303
IVB                 -1              338/338              337/338
BYT                 -1              287/287              286/287
HSW                                  361/361              361/361
BDW                                  308/308              308/308
-------------------------------------Detailed-------------------------------------
Platform  Test                                drm-intel-nightly          Series Applied
*ILK  igt@kms_pipe_crc_basic@bad-nb-words-3      PASS(2)      DMESG_WARN(1)PASS(1)
(dmesg patch applied)drm:drm_edid_block_valid[drm]]*ERROR*EDID_checksum_is_invalid,remainder_is@EDID checksum is .* remainder is
*IVB  igt@gem_pwrite_pread@snooped-pwrite-blt-cpu_mmap-performance      PASS(2)      DMESG_WARN(1)PASS(1)
(dmesg patch applied)drm:i915_hangcheck_elapsed[i915]]*ERROR*Hangcheck_timer_elapsed...blitter_ring_idle@Hangcheck timer elapsed... blitter ring idle
*BYT  igt@gem_exec_bad_domains@conflicting-write-domain      PASS(19)      FAIL(1)PASS(1)
Note: You need to pay more attention to line start with '*'
Jani Nikula April 7, 2015, 9:02 a.m. UTC | #2
On Mon, 06 Apr 2015, Chandra Konduru <chandra.konduru@intel.com> wrote:
> At end of intel_crtc_set_config, reset crtc_state's
> drm_state back pointer to null.

This does not tell me anything that reading the patch already
didn't. Please explain *why* this is needed in the commit message. What
breaks without it? If this fixes a regression, please indicate which
commit regressed.

BR,
Jani.

>
> Signed-off-by: Chandra Konduru <chandra.konduru@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_display.c |    4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index c84926b..f9c2e4d 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -12451,8 +12451,10 @@ fail:
>  	}
>  
>  out_config:
> -	if (state)
> +	if (state) {
>  		drm_atomic_state_free(state);
> +		to_intel_crtc(set->crtc)->config->base.state = NULL;
> +	}
>  
>  	intel_set_config_free(config);
>  	return ret;
> -- 
> 1.7.9.5
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
Chandra Konduru April 7, 2015, 6:48 p.m. UTC | #3
> -----Original Message-----
> From: Jani Nikula [mailto:jani.nikula@linux.intel.com]
> Sent: Tuesday, April 07, 2015 2:02 AM
> To: Konduru, Chandra; intel-gfx@lists.freedesktop.org
> Subject: Re: [Intel-gfx] [PATCH] drm/i915: reset drm state backpointer in
> crtc_state
> 
> On Mon, 06 Apr 2015, Chandra Konduru <chandra.konduru@intel.com> wrote:
> > At end of intel_crtc_set_config, reset crtc_state's drm_state back
> > pointer to null.
> 
> This does not tell me anything that reading the patch already didn't. Please
> explain *why* this is needed in the commit message. What breaks without it? If
> this fixes a regression, please indicate which commit regressed.

Once atomic transaction is done, live crtc_state (i.e., intel_crtc->config) is 
carrying back pointer to drm_atomic_state which is freed. When a new 
non-atomic transaction is made (crtc_disable triggered off from set_mode), 
this stale pointer is carried into that transaction. 
Depending on timing, this causes issue to scaler feature that I am working 
if panel fit to be disabled during crtc_disable.

It has potential to cause issues to wm work that Matt is doing, but not sure.

> 
> BR,
> Jani.
> 
> >
> > Signed-off-by: Chandra Konduru <chandra.konduru@intel.com>
> > ---
> >  drivers/gpu/drm/i915/intel_display.c |    4 +++-
> >  1 file changed, 3 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/gpu/drm/i915/intel_display.c
> > b/drivers/gpu/drm/i915/intel_display.c
> > index c84926b..f9c2e4d 100644
> > --- a/drivers/gpu/drm/i915/intel_display.c
> > +++ b/drivers/gpu/drm/i915/intel_display.c
> > @@ -12451,8 +12451,10 @@ fail:
> >  	}
> >
> >  out_config:
> > -	if (state)
> > +	if (state) {
> >  		drm_atomic_state_free(state);
> > +		to_intel_crtc(set->crtc)->config->base.state = NULL;
> > +	}
> >
> >  	intel_set_config_free(config);
> >  	return ret;
> > --
> > 1.7.9.5
> >
> > _______________________________________________
> > Intel-gfx mailing list
> > Intel-gfx@lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/intel-gfx
> 
> --
> Jani Nikula, Intel Open Source Technology Center
Daniel Vetter April 8, 2015, 8:19 a.m. UTC | #4
On Tue, Apr 07, 2015 at 06:48:15PM +0000, Konduru, Chandra wrote:
> 
> > -----Original Message-----
> > From: Jani Nikula [mailto:jani.nikula@linux.intel.com]
> > Sent: Tuesday, April 07, 2015 2:02 AM
> > To: Konduru, Chandra; intel-gfx@lists.freedesktop.org
> > Subject: Re: [Intel-gfx] [PATCH] drm/i915: reset drm state backpointer in
> > crtc_state
> > 
> > On Mon, 06 Apr 2015, Chandra Konduru <chandra.konduru@intel.com> wrote:
> > > At end of intel_crtc_set_config, reset crtc_state's drm_state back
> > > pointer to null.
> > 
> > This does not tell me anything that reading the patch already didn't. Please
> > explain *why* this is needed in the commit message. What breaks without it? If
> > this fixes a regression, please indicate which commit regressed.
> 
> Once atomic transaction is done, live crtc_state (i.e., intel_crtc->config) is 
> carrying back pointer to drm_atomic_state which is freed. When a new 
> non-atomic transaction is made (crtc_disable triggered off from set_mode), 
> this stale pointer is carried into that transaction. 
> Depending on timing, this causes issue to scaler feature that I am working 
> if panel fit to be disabled during crtc_disable.

You shouldn't ever be chasing the state backpointer of a committed state.
It's ok to clean it up, but chasing that pointer itself is a bug. Why does
the scaler code look at that pointer?
-Daniel
Daniel Vetter April 8, 2015, 8:22 a.m. UTC | #5
On Mon, Apr 06, 2015 at 11:30:29AM -0700, Chandra Konduru wrote:
> At end of intel_crtc_set_config, reset crtc_state's
> drm_state back pointer to null.
> 
> Signed-off-by: Chandra Konduru <chandra.konduru@intel.com>
> ---
>  drivers/gpu/drm/i915/intel_display.c |    4 +++-
>  1 file changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
> index c84926b..f9c2e4d 100644
> --- a/drivers/gpu/drm/i915/intel_display.c
> +++ b/drivers/gpu/drm/i915/intel_display.c
> @@ -12451,8 +12451,10 @@ fail:
>  	}
>  
>  out_config:
> -	if (state)
> +	if (state) {
>  		drm_atomic_state_free(state);
> +		to_intel_crtc(set->crtc)->config->base.state = NULL;

This should be done in intel_crtc_set_state instead of just in this case
here.
-Daniel

> +	}
>  
>  	intel_set_config_free(config);
>  	return ret;
> -- 
> 1.7.9.5
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
Chandra Konduru April 8, 2015, 4:26 p.m. UTC | #6
> -----Original Message-----
> From: Daniel Vetter [mailto:daniel.vetter@ffwll.ch] On Behalf Of Daniel Vetter
> Sent: Wednesday, April 08, 2015 1:20 AM
> To: Konduru, Chandra
> Cc: Jani Nikula; intel-gfx@lists.freedesktop.org
> Subject: Re: [Intel-gfx] [PATCH] drm/i915: reset drm state backpointer in
> crtc_state
> 
> On Tue, Apr 07, 2015 at 06:48:15PM +0000, Konduru, Chandra wrote:
> >
> > > -----Original Message-----
> > > From: Jani Nikula [mailto:jani.nikula@linux.intel.com]
> > > Sent: Tuesday, April 07, 2015 2:02 AM
> > > To: Konduru, Chandra; intel-gfx@lists.freedesktop.org
> > > Subject: Re: [Intel-gfx] [PATCH] drm/i915: reset drm state
> > > backpointer in crtc_state
> > >
> > > On Mon, 06 Apr 2015, Chandra Konduru <chandra.konduru@intel.com>
> wrote:
> > > > At end of intel_crtc_set_config, reset crtc_state's drm_state back
> > > > pointer to null.
> > >
> > > This does not tell me anything that reading the patch already
> > > didn't. Please explain *why* this is needed in the commit message.
> > > What breaks without it? If this fixes a regression, please indicate which
> commit regressed.
> >
> > Once atomic transaction is done, live crtc_state (i.e.,
> > intel_crtc->config) is carrying back pointer to drm_atomic_state which
> > is freed. When a new non-atomic transaction is made (crtc_disable
> > triggered off from set_mode), this stale pointer is carried into that transaction.
> > Depending on timing, this causes issue to scaler feature that I am
> > working if panel fit to be disabled during crtc_disable.
> 
> You shouldn't ever be chasing the state backpointer of a committed state.
> It's ok to clean it up, but chasing that pointer itself is a bug. Why does the scaler
> code look at that pointer?
While setting up scalers, it looks at that pointer to know other scaler users.

> -Daniel
> --
> Daniel Vetter
> Software Engineer, Intel Corporation
> http://blog.ffwll.ch
diff mbox

Patch

diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index c84926b..f9c2e4d 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -12451,8 +12451,10 @@  fail:
 	}
 
 out_config:
-	if (state)
+	if (state) {
 		drm_atomic_state_free(state);
+		to_intel_crtc(set->crtc)->config->base.state = NULL;
+	}
 
 	intel_set_config_free(config);
 	return ret;