Re: git pull] drm for v4.1-rc1

Ville Syrjälä
2015-06-06T23:53:13Z

On Fri, Jun 05, 2015 at 11:18:21PM +0200, Stefan Lippers-Hollmann wrote:
> Hi
>
> On 2015-04-20, Dave Airlie wrote:
> [...]
> > The following changes since commit 09d51602cf84a1264946711dd4ea0dddbac599a1:
> >
> > Merge branch 'turbostat' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux (2015-04-19 14:31:41 -0700)
> >
> > are available in the git repository at:
> >
> > git://people.freedesktop.org/~airlied/linux drm-next-merged
> >
> > for you to fetch changes up to 2c33ce009ca2389dbf0535d0672214d09738e35e:
> >
> > Merge Linus master into drm-next (2015-04-20 13:05:20 +1000)
> [...]
> > Ander Conselvan de Oliveira (28):
> [...]
> > drm/i915: Allocate connector state together with the connectors
> [...]
>
> This commit introduces a regression relative to v4.0 on an Intel
> D945GCLF2 mainboard[1] (Atom 330) with Intel 82945G/GZ onboard graphics
> using its (only-) VGA connector for me.
>
> v4.1-rc6-52-gff25ea8:
> [ 13.265699] BUG: unable to handle kernel NULL pointer dereference at 0000000000000010
> [ 13.265723] IP: [<ffffffffa0556f01>] intel_modeset_update_connector_atomic_state+0x61/0x90 [i915]

Hmm. Smells like a connector with a NULL state pointer, and the bad
commit touched exactly the part that sets it up. I can't immediately
spot any place where we'd forget to set it up though.

Can you try with something like this so we'd at least find out which
connector(s) is/are at fault here?

diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
index 3007b44..c10f423 100644
--- a/drivers/gpu/drm/drm_crtc.c
+++ b/drivers/gpu/drm/drm_crtc.c
@@ -918,6 +918,8 @@ int drm_connector_init(struct drm_device *dev,

connector->debugfs_entry = NULL;

+ WARN(1, "connector = %p\n", connector);
+
out_put:
if (ret)
drm_mode_object_put(dev, &connector->base);
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index d0f3cbc..dd8ced7 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -10332,6 +10332,10 @@ static void intel_modeset_update_connector_atomic_state(struct drm_device *dev)
struct intel_connector *connector;

for_each_intel_connector(dev, connector) {
+ if (WARN(!connector->base.state,
+ "connector = %p\n", &connector->base))
+ continue;
+
if (connector->base.encoder) {
connector->base.state->best_encoder =
connector->base.encoder;
--
2.3.6

--
Ville Syrjälä
Intel OTC