xf86-video-intel: 2 commits - src/sna/sna_display.c
Chris Wilson
ickle at kemper.freedesktop.org
Tue Jun 24 03:39:04 PDT 2014
src/sna/sna_display.c | 57 ++++++++++++++++++++++++++++++++++----------------
1 file changed, 39 insertions(+), 18 deletions(-)
New commits:
commit 5c8829b30ad3acd2e59dac9ffa2aba8aadcada61
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Tue Jun 24 11:35:23 2014 +0100
sna: Add some more DBG around connector discovery
References: https://bugs.freedesktop.org/show_bug.cgi?id=80355
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c
index 45af254..0956619 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -2328,8 +2328,10 @@ sna_output_detect(xf86OutputPtr output)
DBG(("%s(%s:%d)\n", __FUNCTION__, output->name, sna_output->id));
- if (!sna_output->id)
+ if (!sna_output->id) {
+ DBG(("%s(%s) hiding due to lost connection\n", __FUNCTION__, output->name));
return XF86OutputStatusDisconnected;
+ }
VG_CLEAR(compat_conn);
compat_conn.conn.connector_id = sna_output->id;
@@ -3275,6 +3277,7 @@ sna_output_add(struct sna *sna, unsigned id, unsigned serial)
DBG(("%s: GETCONNECTOR[%d] failed, ret=%d\n", __FUNCTION__, id, errno));
return -1;
}
+ assert(compat_conn.conn.connector_id == id);
if (compat_conn.conn.connector_type < ARRAY_SIZE(output_names))
output_name = output_names[compat_conn.conn.connector_type];
@@ -3365,6 +3368,7 @@ sna_output_add(struct sna *sna, unsigned id, unsigned serial)
DBG(("%s: second! GETCONNECTOR failed, ret=%d\n", __FUNCTION__, errno));
goto cleanup;
}
+ assert(compat_conn.conn.connector_id == id);
/* statically constructed property list */
assert(sna_output->num_props == compat_conn.conn.count_props);
@@ -3414,6 +3418,7 @@ sna_output_add(struct sna *sna, unsigned id, unsigned serial)
goto cleanup;
}
+ DBG(("%s: inserting output #%d of %d\n", __FUNCTION__, sna->mode.num_real_output, config->num_output));
for (i = config->num_output; i > sna->mode.num_real_output; i--) {
outputs[i] = outputs[i-1];
assert(outputs[i]->driver_private == NULL);
@@ -3489,6 +3494,7 @@ reset:
sna_output->possible_encoders,
serial, sna_output->edid_idx, sna_output->dpms_id,
(unsigned long)(uintptr_t)output->crtc));
+ assert(sna_output->id == id);
return 1;
@@ -3522,6 +3528,8 @@ static void sna_output_del(xf86OutputPtr output)
if (config->output[i] == output)
break;
assert(i < to_sna(scrn)->mode.num_real_output);
+ DBG(("%s: removing output #%d of %d\n",
+ __FUNCTION__, i, to_sna(scrn)->mode.num_real_output));
for (; i < config->num_output; i++) {
config->output[i] = config->output[i+1];
@@ -3630,7 +3638,9 @@ void sna_mode_discover(struct sna *sna)
if (to_sna_output(output)->serial == serial)
continue;
- DBG(("%s: removing output %s (id=%d)\n", __FUNCTION__, output->name, to_sna_output(output)->id));
+ DBG(("%s: removing output %s (id=%d), serial=%u [now %u]\n",
+ __FUNCTION__, output->name, to_sna_output(output)->id,
+ to_sna_output(output)->serial, serial));
if (sna->flags & SNA_REMOVE_OUTPUTS) {
sna_output_del(output); i--;
} else {
commit 271ed88e517745505c133bd68c40a8566ec8a625
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date: Tue Jun 24 11:24:26 2014 +0100
sna: Ensure serial is not 0 for runtime MST discovery
We reserve serial==0 for the initial setup that is run before RandR is
configured. After the server is running, we have to take extra steps to
make the outputs visible to userspace.
Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c
index cb2fcc3..45af254 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -141,8 +141,8 @@ struct sna_property {
struct sna_output {
xf86OutputPtr base;
- int id;
- int serial;
+ unsigned id;
+ unsigned serial;
unsigned possible_encoders;
unsigned attached_encoders;
@@ -3243,7 +3243,7 @@ static int name_from_path(struct sna *sna,
}
static int
-sna_output_add(struct sna *sna, int id, int serial)
+sna_output_add(struct sna *sna, unsigned id, unsigned serial)
{
ScrnInfoPtr scrn = sna->scrn;
xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(scrn);
@@ -3579,8 +3579,9 @@ void sna_mode_discover(struct sna *sna)
xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(sna->scrn);
struct drm_mode_card_res res;
uint32_t connectors[32];
- int i, j, serial;
- int changed = 0;
+ unsigned changed = 0;
+ unsigned serial;
+ int i, j;
DBG(("%s()\n", __FUNCTION__));
VG_CLEAR(connectors);
@@ -3601,11 +3602,16 @@ void sna_mode_discover(struct sna *sna)
assert(sna->mode.num_real_encoder == res.count_encoders);
serial = ++sna->mode.serial;
+ if (serial == 0)
+ serial = ++sna->mode.serial;
+
for (i = 0; i < res.count_connectors; i++) {
for (j = 0; j < sna->mode.num_real_output; j++) {
- if (to_sna_output(config->output[j])->id == connectors[i]) {
- DBG(("%s: found %s (id=%d)\n", __FUNCTION__, config->output[j]->name, connectors[i]));
- to_sna_output(config->output[j])->serial = serial;
+ xf86OutputPtr output = config->output[j];
+ if (to_sna_output(output)->id == connectors[i]) {
+ DBG(("%s: found %s (id=%d)\n", __FUNCTION__, output->name, connectors[i]));
+ assert(to_sna_output(output)->id);
+ to_sna_output(output)->serial = serial;
break;
}
}
@@ -3617,16 +3623,21 @@ void sna_mode_discover(struct sna *sna)
for (i = 0; i < sna->mode.num_real_output; i++) {
xf86OutputPtr output = config->output[i];
- if (to_sna_output(output)->serial != serial) {
- DBG(("%s: removing output %s (id=%d)\n", __FUNCTION__, output->name, connectors[i]));
- if (sna->flags & SNA_REMOVE_OUTPUTS) {
- sna_output_del(output); i--;
- } else {
- to_sna_output(output)->id = 0;
- output->crtc = NULL;
- }
- changed |= 2;
+
+ if (to_sna_output(output)->id == 0)
+ continue;
+
+ if (to_sna_output(output)->serial == serial)
+ continue;
+
+ DBG(("%s: removing output %s (id=%d)\n", __FUNCTION__, output->name, to_sna_output(output)->id));
+ if (sna->flags & SNA_REMOVE_OUTPUTS) {
+ sna_output_del(output); i--;
+ } else {
+ to_sna_output(output)->id = 0;
+ output->crtc = NULL;
}
+ changed |= 2;
}
if (changed) {
More information about the xorg-commit
mailing list