xf86-video-intel: src/sna/sna_display.c src/sna/sna_driver.c src/sna/sna.h

Chris Wilson ickle at kemper.freedesktop.org
Thu Oct 1 02:03:17 PDT 2015


 src/sna/sna.h         |    2 +-
 src/sna/sna_display.c |    6 +++---
 src/sna/sna_driver.c  |    6 +++---
 3 files changed, 7 insertions(+), 7 deletions(-)

New commits:
commit 096ddef22d6c57198a424eef00845dc7302b0cfe
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Thu Oct 1 09:47:59 2015 +0100

    sna: Indicate when we expect to call RRGetInfo during discovery
    
    Continuing the udevless saga where we query for topology changes on
    calls to RRGetInfo() and so where we cannot call RRGetInfo() ourselves
    on discovering the changes (to facilitate hotplug). The next step is
    explicitly prevent the recursive call.
    
    References: https://bugs.freedesktop.org/show_bug.cgi?id=91929#c10
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna.h b/src/sna/sna.h
index 6c4d179..7592f7b 100644
--- a/src/sna/sna.h
+++ b/src/sna/sna.h
@@ -442,7 +442,7 @@ bool sna_mode_pre_init(ScrnInfoPtr scrn, struct sna *sna);
 bool sna_mode_fake_init(struct sna *sna, int num_fake);
 bool sna_mode_wants_tear_free(struct sna *sna);
 void sna_mode_adjust_frame(struct sna *sna, int x, int y);
-extern void sna_mode_discover(struct sna *sna);
+extern void sna_mode_discover(struct sna *sna, bool tell);
 extern void sna_mode_check(struct sna *sna);
 extern bool sna_mode_disable(struct sna *sna);
 extern void sna_mode_enable(struct sna *sna);
diff --git a/src/sna/sna_display.c b/src/sna/sna_display.c
index 6db379d..a763d18 100644
--- a/src/sna/sna_display.c
+++ b/src/sna/sna_display.c
@@ -2641,7 +2641,7 @@ error:
 	sna_crtc->cursor_transform = saved_cursor_transform;
 	sna_crtc->hwcursor = saved_hwcursor;
 	sna_crtc->bo = saved_bo;
-	sna_mode_discover(sna);
+	sna_mode_discover(sna, true);
 	return FALSE;
 }
 
@@ -4829,7 +4829,7 @@ output_check_status(struct sna *sna, struct sna_output *output)
 	return output->status == status;
 }
 
-void sna_mode_discover(struct sna *sna)
+void sna_mode_discover(struct sna *sna, bool tell)
 {
 	ScreenPtr screen = xf86ScrnToScreen(sna->scrn);
 	xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(sna->scrn);
@@ -4939,7 +4939,7 @@ void sna_mode_discover(struct sna *sna)
 	 * Note this could recurse once from udevless RRGetInfo() probes,
 	 * but only once.
 	 */
-	if (changed)
+	if (changed && tell)
 		RRGetInfo(screen, TRUE);
 }
 
diff --git a/src/sna/sna_driver.c b/src/sna/sna_driver.c
index 539093e..8cbabb0 100644
--- a/src/sna/sna_driver.c
+++ b/src/sna/sna_driver.c
@@ -780,7 +780,7 @@ sna_handle_uevents(int fd, void *closure)
 		     __FUNCTION__, sna->scrn->vtSema));
 
 		if (sna->scrn->vtSema) {
-			sna_mode_discover(sna);
+			sna_mode_discover(sna, true);
 			sna_mode_check(sna);
 		} else
 			sna->flags |= SNA_REPROBE;
@@ -893,7 +893,7 @@ sna_randr_getinfo(ScreenPtr screen, Rotation *rotations)
 	DBG(("%s()\n", __FUNCTION__));
 
 	if (!sna_uevent_poll(sna))
-		sna_mode_discover(sna);
+		sna_mode_discover(sna, false);
 
 	return sna->mode.rrGetInfo(screen, rotations);
 }
@@ -1222,7 +1222,7 @@ static Bool sna_enter_vt(VT_FUNC_ARGS_DECL)
 
 	if (sna->flags & SNA_REPROBE) {
 		DBG(("%s: reporting deferred hotplug event\n", __FUNCTION__));
-		sna_mode_discover(sna);
+		sna_mode_discover(sna, true);
 	}
 
 	sna_set_desired_mode(sna);


More information about the xorg-commit mailing list