* [PATCH] sna: CustomEDID fix [not found] <16051285.77697168.1517513962156.JavaMail.root@zimbra33-e6> @ 2018-02-02 18:37 ` dom.constant 2018-02-02 19:13 ` Jani Nikula ` (2 more replies) 0 siblings, 3 replies; 7+ messages in thread From: dom.constant @ 2018-02-02 18:37 UTC (permalink / raw) To: intel-gfx Hello, For my HTPC setup, I'm using the option "CustomEDID". With this option, output attaching and destroying events leads to crashes. The following sequence leads to a crash: - In xorg.conf: Option "CustomEDID" "HDMI2:/etc/my_edid.bin" - Starting Xorg - Connect HDMI2 - Disconnect HDMI2 - Reconnect HDMI2 -> Crash The crash happens in xf86OutputSetEDID (xorg/xserver/hw/xfree86/modes/xf86Crtc.c) at "free(output->MonInfo)". MonInfo is assigned with sna_output->fake_edid_mon which is allocated by intel driver in sna_output_load_fake_edid (src/sna/sna_display.c). Sequence details: - Starting Xorg -> fake_edid_mon is initialized - Connect HDMI2 -> xf86OutputSetEDID is called: - MonInfo is NULL - MonInfo is assigned with fake_edid_mon pointer - MonInfo is read by Xorg - Disconnect HDMI2 - Reconnect HDMI2 -> xf86OutputSetEDID is called: - MonInfo is freed thus also fake_edid_mon - MonInfo is assigned with fake_edid_mon - MonInfo is read but it was freed -> CRASH The fix consists of a new instance of xf86MonPtr for each calls of xf86OutputSetEDID. This instance is initialized with fake_edid_raw which render fake_edid_mon useless. With this proposal, the behaviour of an EDID override is similar to a "real" EDID. Regards, Signed-off-by: Dominique Constant <dom.constant@free.fr> To: Chris Wilson <chris at chris-wilson.co.uk> diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c index ea2f148d..ad805c2f 100644 --- a/src/sna/sna_display.c +++ b/src/sna/sna_display.c @@ -263,7 +263,6 @@ struct sna_output { uint32_t edid_blob_id; uint32_t edid_len; void *edid_raw; - xf86MonPtr fake_edid_mon; void *fake_edid_raw; bool has_panel_limits; @@ -4102,13 +4101,21 @@ static DisplayModePtr sna_output_override_edid(xf86OutputPtr output) { struct sna_output *sna_output = output->driver_private; + xf86MonPtr mon = NULL; + + if (sna_output->fake_edid_raw == NULL) + return NULL; - if (sna_output->fake_edid_mon == NULL) + mon = xf86InterpretEDID(output->scrn->scrnIndex, sna_output->fake_edid_raw); + if (mon == NULL) { return NULL; + } + + mon->flags |= MONITOR_EDID_COMPLETE_RAWDATA; + + xf86OutputSetEDID(output, mon); - xf86OutputSetEDID(output, sna_output->fake_edid_mon); - return xf86DDCGetModes(output->scrn->scrnIndex, - sna_output->fake_edid_mon); + return xf86DDCGetModes(output->scrn->scrnIndex, mon); } static DisplayModePtr @@ -4896,7 +4903,6 @@ sna_output_load_fake_edid(xf86OutputPtr output) FILE *file; void *raw; int size; - xf86MonPtr mon; filename = fake_edid_name(output); if (filename == NULL) @@ -4928,16 +4934,6 @@ sna_output_load_fake_edid(xf86OutputPtr output) } fclose(file); - mon = xf86InterpretEDID(output->scrn->scrnIndex, raw); - if (mon == NULL) { - free(raw); - goto err; - } - - if (mon && size > 128) - mon->flags |= MONITOR_EDID_COMPLETE_RAWDATA; - - sna_output->fake_edid_mon = mon; sna_output->fake_edid_raw = raw; xf86DrvMsg(output->scrn->scrnIndex, X_CONFIG, _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH] sna: CustomEDID fix 2018-02-02 18:37 ` [PATCH] sna: CustomEDID fix dom.constant @ 2018-02-02 19:13 ` Jani Nikula 2018-02-02 22:48 ` Chris Wilson 2018-02-02 21:30 ` Chris Wilson 2018-02-06 15:57 ` Chris Wilson 2 siblings, 1 reply; 7+ messages in thread From: Jani Nikula @ 2018-02-02 19:13 UTC (permalink / raw) To: dom.constant, intel-gfx On Fri, 02 Feb 2018, dom.constant@free.fr wrote: > For my HTPC setup, I'm using the option "CustomEDID". > With this option, output attaching and destroying events leads to crashes. > > The following sequence leads to a crash: > - In xorg.conf: Option "CustomEDID" "HDMI2:/etc/my_edid.bin" I know nothing about xorg customedid stuff. But there's drm.edid_firmware=HDMI-2:/etc/my_edid.bin (or drm_kms_helper.edid_firmware on older kernels) module parameter for the kernel that does this transparently across the stack. BR, Jani. -- Jani Nikula, Intel Open Source Technology Center _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] sna: CustomEDID fix 2018-02-02 19:13 ` Jani Nikula @ 2018-02-02 22:48 ` Chris Wilson 0 siblings, 0 replies; 7+ messages in thread From: Chris Wilson @ 2018-02-02 22:48 UTC (permalink / raw) To: Jani Nikula, dom.constant, intel-gfx Quoting Jani Nikula (2018-02-02 19:13:53) > On Fri, 02 Feb 2018, dom.constant@free.fr wrote: > > For my HTPC setup, I'm using the option "CustomEDID". > > With this option, output attaching and destroying events leads to crashes. > > > > The following sequence leads to a crash: > > - In xorg.conf: Option "CustomEDID" "HDMI2:/etc/my_edid.bin" > > I know nothing about xorg customedid stuff. > > But there's drm.edid_firmware=HDMI-2:/etc/my_edid.bin (or > drm_kms_helper.edid_firmware on older kernels) module parameter for the > kernel that does this transparently across the stack. There's also the difference in that Xorg only uses the custom EDID to conveniently load a set of modelines, but the kernel EDID override describes the sink completely (e.g. audio modes, link protocols, pixel formats etc). -Chris _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] sna: CustomEDID fix 2018-02-02 18:37 ` [PATCH] sna: CustomEDID fix dom.constant 2018-02-02 19:13 ` Jani Nikula @ 2018-02-02 21:30 ` Chris Wilson 2018-02-06 15:57 ` Chris Wilson 2 siblings, 0 replies; 7+ messages in thread From: Chris Wilson @ 2018-02-02 21:30 UTC (permalink / raw) To: dom.constant, intel-gfx Quoting dom.constant@free.fr (2018-02-02 18:37:12) > Hello, > > For my HTPC setup, I'm using the option "CustomEDID". > With this option, output attaching and destroying events leads to crashes. > > The following sequence leads to a crash: > - In xorg.conf: Option "CustomEDID" "HDMI2:/etc/my_edid.bin" > - Starting Xorg > - Connect HDMI2 > - Disconnect HDMI2 > - Reconnect HDMI2 > -> Crash > > > The crash happens in xf86OutputSetEDID (xorg/xserver/hw/xfree86/modes/xf86Crtc.c) > at "free(output->MonInfo)". MonInfo is assigned with sna_output->fake_edid_mon > which is allocated by intel driver in sna_output_load_fake_edid (src/sna/sna_display.c). Ho hum, looks like I never tested it more than a quick start of Xorg. Sorry about that :( > Sequence details: > - Starting Xorg > -> fake_edid_mon is initialized > > - Connect HDMI2 > -> xf86OutputSetEDID is called: > - MonInfo is NULL > - MonInfo is assigned with fake_edid_mon pointer > - MonInfo is read by Xorg > > - Disconnect HDMI2 > > - Reconnect HDMI2 > -> xf86OutputSetEDID is called: > - MonInfo is freed thus also fake_edid_mon > - MonInfo is assigned with fake_edid_mon > - MonInfo is read but it was freed -> CRASH > > > The fix consists of a new instance of xf86MonPtr for each calls of xf86OutputSetEDID. > This instance is initialized with fake_edid_raw which render fake_edid_mon useless. > With this proposal, the behaviour of an EDID override is similar to a "real" EDID. > > Regards, > > > Signed-off-by: Dominique Constant <dom.constant@free.fr> > To: Chris Wilson <chris at chris-wilson.co.uk> Reviewed-by: Chris Wilson <chris at chris-wilson.co.uk> -Chris _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] sna: CustomEDID fix 2018-02-02 18:37 ` [PATCH] sna: CustomEDID fix dom.constant 2018-02-02 19:13 ` Jani Nikula 2018-02-02 21:30 ` Chris Wilson @ 2018-02-06 15:57 ` Chris Wilson 2018-02-06 18:57 ` dom.constant 2 siblings, 1 reply; 7+ messages in thread From: Chris Wilson @ 2018-02-06 15:57 UTC (permalink / raw) To: dom.constant, intel-gfx Quoting dom.constant@free.fr (2018-02-02 18:37:12) > Hello, > > For my HTPC setup, I'm using the option "CustomEDID". > With this option, output attaching and destroying events leads to crashes. > > The following sequence leads to a crash: > - In xorg.conf: Option "CustomEDID" "HDMI2:/etc/my_edid.bin" > - Starting Xorg > - Connect HDMI2 > - Disconnect HDMI2 > - Reconnect HDMI2 > -> Crash > > > The crash happens in xf86OutputSetEDID (xorg/xserver/hw/xfree86/modes/xf86Crtc.c) > at "free(output->MonInfo)". MonInfo is assigned with sna_output->fake_edid_mon > which is allocated by intel driver in sna_output_load_fake_edid (src/sna/sna_display.c). > > > Sequence details: > - Starting Xorg > -> fake_edid_mon is initialized > > - Connect HDMI2 > -> xf86OutputSetEDID is called: > - MonInfo is NULL > - MonInfo is assigned with fake_edid_mon pointer > - MonInfo is read by Xorg > > - Disconnect HDMI2 > > - Reconnect HDMI2 > -> xf86OutputSetEDID is called: > - MonInfo is freed thus also fake_edid_mon > - MonInfo is assigned with fake_edid_mon > - MonInfo is read but it was freed -> CRASH > > > The fix consists of a new instance of xf86MonPtr for each calls of xf86OutputSetEDID. > This instance is initialized with fake_edid_raw which render fake_edid_mon useless. > With this proposal, the behaviour of an EDID override is similar to a "real" EDID. > > Regards, > > > Signed-off-by: Dominique Constant <dom.constant@free.fr> > To: Chris Wilson <chris at chris-wilson.co.uk> Apologies if this is a resend, but could you send me this patch using "git send-email" (or attach the output of "git format-patch"). git am is not happy with it. -Chris _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] sna: CustomEDID fix 2018-02-06 15:57 ` Chris Wilson @ 2018-02-06 18:57 ` dom.constant 2018-03-02 15:18 ` Chris Wilson 0 siblings, 1 reply; 7+ messages in thread From: dom.constant @ 2018-02-06 18:57 UTC (permalink / raw) To: Chris Wilson; +Cc: intel-gfx > Quoting dom.constant@free.fr (2018-02-02 18:37:12) > > Hello, > > > > For my HTPC setup, I'm using the option "CustomEDID". > > With this option, output attaching and destroying events leads to > > crashes. > > > > The following sequence leads to a crash: > > - In xorg.conf: Option "CustomEDID" "HDMI2:/etc/my_edid.bin" > > - Starting Xorg > > - Connect HDMI2 > > - Disconnect HDMI2 > > - Reconnect HDMI2 > > -> Crash > > > > > > The crash happens in xf86OutputSetEDID > > (xorg/xserver/hw/xfree86/modes/xf86Crtc.c) > > at "free(output->MonInfo)". MonInfo is assigned with > > sna_output->fake_edid_mon > > which is allocated by intel driver in sna_output_load_fake_edid > > (src/sna/sna_display.c). > > > > > > Sequence details: > > - Starting Xorg > > -> fake_edid_mon is initialized > > > > - Connect HDMI2 > > -> xf86OutputSetEDID is called: > > - MonInfo is NULL > > - MonInfo is assigned with fake_edid_mon pointer > > - MonInfo is read by Xorg > > > > - Disconnect HDMI2 > > > > - Reconnect HDMI2 > > -> xf86OutputSetEDID is called: > > - MonInfo is freed thus also fake_edid_mon > > - MonInfo is assigned with fake_edid_mon > > - MonInfo is read but it was freed -> CRASH > > > > > > The fix consists of a new instance of xf86MonPtr for each calls of > > xf86OutputSetEDID. > > This instance is initialized with fake_edid_raw which render > > fake_edid_mon useless. > > With this proposal, the behaviour of an EDID override is similar to > > a "real" EDID. > > > > Regards, > > > > > > Signed-off-by: Dominique Constant <dom.constant@free.fr> > > To: Chris Wilson <chris at chris-wilson.co.uk> > > Apologies if this is a resend, but could you send me this patch using > "git send-email" (or attach the output of "git format-patch"). git am > is not happy with it. > -Chris > Hello, Thank you for taking into consideration this patch. Regards, Dominique CONSTANT Signed-off-by: Dominique Constant <dom.constant@free.fr> --- src/sna/sna_display.c | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c index ea2f148d..ad805c2f 100644 --- a/src/sna/sna_display.c +++ b/src/sna/sna_display.c @@ -263,7 +263,6 @@ struct sna_output { uint32_t edid_blob_id; uint32_t edid_len; void *edid_raw; - xf86MonPtr fake_edid_mon; void *fake_edid_raw; bool has_panel_limits; @@ -4102,13 +4101,21 @@ static DisplayModePtr sna_output_override_edid(xf86OutputPtr output) { struct sna_output *sna_output = output->driver_private; + xf86MonPtr mon = NULL; + + if (sna_output->fake_edid_raw == NULL) + return NULL; - if (sna_output->fake_edid_mon == NULL) + mon = xf86InterpretEDID(output->scrn->scrnIndex, sna_output->fake_edid_raw); + if (mon == NULL) { return NULL; + } + + mon->flags |= MONITOR_EDID_COMPLETE_RAWDATA; + + xf86OutputSetEDID(output, mon); - xf86OutputSetEDID(output, sna_output->fake_edid_mon); - return xf86DDCGetModes(output->scrn->scrnIndex, - sna_output->fake_edid_mon); + return xf86DDCGetModes(output->scrn->scrnIndex, mon); } static DisplayModePtr @@ -4896,7 +4903,6 @@ sna_output_load_fake_edid(xf86OutputPtr output) FILE *file; void *raw; int size; - xf86MonPtr mon; filename = fake_edid_name(output); if (filename == NULL) @@ -4928,16 +4934,6 @@ sna_output_load_fake_edid(xf86OutputPtr output) } fclose(file); - mon = xf86InterpretEDID(output->scrn->scrnIndex, raw); - if (mon == NULL) { - free(raw); - goto err; - } - - if (mon && size > 128) - mon->flags |= MONITOR_EDID_COMPLETE_RAWDATA; - - sna_output->fake_edid_mon = mon; sna_output->fake_edid_raw = raw; xf86DrvMsg(output->scrn->scrnIndex, X_CONFIG, -- 2.15.1 _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH] sna: CustomEDID fix 2018-02-06 18:57 ` dom.constant @ 2018-03-02 15:18 ` Chris Wilson 0 siblings, 0 replies; 7+ messages in thread From: Chris Wilson @ 2018-03-02 15:18 UTC (permalink / raw) To: dom.constant; +Cc: intel-gfx Quoting dom.constant@free.fr (2018-02-06 18:57:05) > > > > Quoting dom.constant@free.fr (2018-02-02 18:37:12) > > > Hello, > > > > > > For my HTPC setup, I'm using the option "CustomEDID". > > > With this option, output attaching and destroying events leads to > > > crashes. > > > > > > The following sequence leads to a crash: > > > - In xorg.conf: Option "CustomEDID" "HDMI2:/etc/my_edid.bin" > > > - Starting Xorg > > > - Connect HDMI2 > > > - Disconnect HDMI2 > > > - Reconnect HDMI2 > > > -> Crash > > > > > > > > > The crash happens in xf86OutputSetEDID > > > (xorg/xserver/hw/xfree86/modes/xf86Crtc.c) > > > at "free(output->MonInfo)". MonInfo is assigned with > > > sna_output->fake_edid_mon > > > which is allocated by intel driver in sna_output_load_fake_edid > > > (src/sna/sna_display.c). > > > > > > > > > Sequence details: > > > - Starting Xorg > > > -> fake_edid_mon is initialized > > > > > > - Connect HDMI2 > > > -> xf86OutputSetEDID is called: > > > - MonInfo is NULL > > > - MonInfo is assigned with fake_edid_mon pointer > > > - MonInfo is read by Xorg > > > > > > - Disconnect HDMI2 > > > > > > - Reconnect HDMI2 > > > -> xf86OutputSetEDID is called: > > > - MonInfo is freed thus also fake_edid_mon > > > - MonInfo is assigned with fake_edid_mon > > > - MonInfo is read but it was freed -> CRASH > > > > > > > > > The fix consists of a new instance of xf86MonPtr for each calls of > > > xf86OutputSetEDID. > > > This instance is initialized with fake_edid_raw which render > > > fake_edid_mon useless. > > > With this proposal, the behaviour of an EDID override is similar to > > > a "real" EDID. > > > > > > Regards, > > > > > > > > > Signed-off-by: Dominique Constant <dom.constant@free.fr> > > > To: Chris Wilson <chris at chris-wilson.co.uk> > > > > Apologies if this is a resend, but could you send me this patch using > > "git send-email" (or attach the output of "git format-patch"). git am > > is not happy with it. > > -Chris > > > > > Hello, > Thank you for taking into consideration this patch. Finally, got around to picking up patches for -intel. Thank you very much for the fix, -Chris _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2018-03-02 15:19 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <16051285.77697168.1517513962156.JavaMail.root@zimbra33-e6>
2018-02-02 18:37 ` [PATCH] sna: CustomEDID fix dom.constant
2018-02-02 19:13 ` Jani Nikula
2018-02-02 22:48 ` Chris Wilson
2018-02-02 21:30 ` Chris Wilson
2018-02-06 15:57 ` Chris Wilson
2018-02-06 18:57 ` dom.constant
2018-03-02 15:18 ` Chris Wilson
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.