From: dom.constant@free.fr
To: Chris Wilson <chris@chris-wilson.co.uk>
Cc: intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH] sna: CustomEDID fix
Date: Tue, 6 Feb 2018 19:57:05 +0100 (CET) [thread overview]
Message-ID: <565783785.91372277.1517943425201.JavaMail.root@zimbra33-e6> (raw)
In-Reply-To: <151793263334.17167.6704927019482392166@mail.alporthouse.com>
> 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
next prev parent reply other threads:[~2018-02-06 18:57 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
[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 [this message]
2018-03-02 15:18 ` Chris Wilson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=565783785.91372277.1517943425201.JavaMail.root@zimbra33-e6 \
--to=dom.constant@free.fr \
--cc=chris@chris-wilson.co.uk \
--cc=intel-gfx@lists.freedesktop.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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.