xserver-xorg-video-intel: Changes to 'ubuntu'
debian/patches/sna-sanitize-output-crtc.diff | 67 +++++++++++++++++++++++++++
1 file changed, 67 insertions(+)
New commits:
commit 5a5422814300f624b118439a1f09327ff8da5a06
Author: Timo Aaltonen <tjaalton@ubuntu.com>
Date: Fri Oct 18 09:32:10 2013 +0300
add the patch too
diff --git a/debian/patches/sna-sanitize-output-crtc.diff b/debian/patches/sna-sanitize-output-crtc.diff
new file mode 100644
index 0000000..5b6a11a
--- /dev/null
+++ b/debian/patches/sna-sanitize-output-crtc.diff
@@ -0,0 +1,67 @@
+commit f0bd716425d1514b62565f9a65397cd1cb2ffb3a
+Author: Chris Wilson <chris@chris-wilson.co.uk>
+Date: Thu Oct 10 16:22:45 2013 +0100
+
+ sna: Sanitize output->crtc before falling back oto xf86InitialConfiguration
+
+ During initialisation, we stash the currently attached CRTC id in
+ output->crtc. This is fine as ordinarily we would not dereference
+ output->crtc until after it had been assigned a real CRTC. However,
+
+ commit 6fda305e2f2f991b39d09e67d0b17c8c3d50f9a4
+ Author: Chris Wilson <chris@chris-wilson.co.uk>
+ Date: Wed Oct 9 15:59:42 2013 +0100
+
+ sna: Append the current mode to the output list if not found
+
+ introduces such an early dereference and causes a crash if we fail to
+ probe the KMS configuration (usually due to a user override).
+
+ Reported-by: Łukasz Maśko <ed@yen.ipipan.waw.pl>
+ Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
+
+diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c
+index 71c4c60..27a4467 100644
+--- a/src/sna/sna_display.c
++++ b/src/sna/sna_display.c
+@@ -3225,8 +3225,10 @@ static bool sna_probe_initial_configuration(struct sna *sna)
+ xf86OutputPtr output = config->output[i];
+ uint32_t crtc_id;
+
+- if (to_sna_output(output) == NULL)
++ if (to_sna_output(output) == NULL) {
++ assert(output->crtc == NULL);
+ continue;
++ }
+
+ crtc_id = (uintptr_t)output->crtc;
+ output->crtc = NULL;
+@@ -3321,6 +3323,16 @@ static bool sna_probe_initial_configuration(struct sna *sna)
+ }
+
+ static void
++sanitize_outputs(struct sna *sna)
++{
++ xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(sna->scrn);
++ int i;
++
++ for (i = 0; i < config->num_output; i++)
++ config->output[i]->crtc = NULL;
++}
++
++static void
+ sna_crtc_config_notify(ScreenPtr screen)
+ {
+ DBG(("%s\n", __FUNCTION__));
+@@ -3372,8 +3384,10 @@ bool sna_mode_pre_init(ScrnInfoPtr scrn, struct sna *sna)
+ if (!sna_mode_fake_init(sna, num_fake))
+ return false;
+
+- if (!sna_probe_initial_configuration(sna))
++ if (!sna_probe_initial_configuration(sna)) {
++ sanitize_outputs(sna);
+ xf86InitialConfiguration(scrn, TRUE);
++ }
+
+ sna_setup_provider(scrn);
+ return scrn->modes != NULL;
Reply to: