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

Chris Wilson ickle at kemper.freedesktop.org
Thu Jul 19 00:58:41 PDT 2012


 src/sna/sna.h        |    2 +-
 src/sna/sna_accel.c  |   12 ++++++------
 src/sna/sna_driver.c |   12 ++++++------
 3 files changed, 13 insertions(+), 13 deletions(-)

New commits:
commit 7a3b98e05b706548527e73b2008600391c601a62
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Thu Jul 19 08:42:05 2012 +0100

    sna: Re-register the SHM funcs every server generation
    
    As the SHM layer hooks into the CloseScreen chain to free its privates,
    we then need to call the registration function again on the next
    generation to ensure that the private is reallocated before use.
    
    Reported-by: Pawel Sikora <pluto at agmk.net>
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=52255
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/sna/sna.h b/src/sna/sna.h
index 194c712..3ced2b4 100644
--- a/src/sna/sna.h
+++ b/src/sna/sna.h
@@ -569,7 +569,7 @@ void sna_accel_watch_flush(struct sna *sna, int enable);
 void sna_accel_close(struct sna *sna);
 void sna_accel_free(struct sna *sna);
 
-bool sna_accel_create(struct sna *sna);
+bool sna_accel_create(ScreenPtr screen, struct sna *sna);
 void sna_copy_fbcon(struct sna *sna);
 
 bool sna_composite_create(struct sna *sna);
diff --git a/src/sna/sna_accel.c b/src/sna/sna_accel.c
index d4b9f37..1b8c8ac 100644
--- a/src/sna/sna_accel.c
+++ b/src/sna/sna_accel.c
@@ -12990,11 +12990,6 @@ bool sna_accel_init(ScreenPtr screen, struct sna *sna)
 	assert(screen->SetWindowPixmap == NULL);
 	screen->SetWindowPixmap = sna_set_window_pixmap;
 
-	if (USE_SHM_VMAP && sna->kgem.has_vmap)
-		ShmRegisterFuncs(screen, &shm_funcs);
-	else
-		ShmRegisterFbFuncs(screen);
-
 	if (!sna_picture_init(screen))
 		return false;
 
@@ -13036,8 +13031,13 @@ bool sna_accel_init(ScreenPtr screen, struct sna *sna)
 	return true;
 }
 
-bool sna_accel_create(struct sna *sna)
+bool sna_accel_create(ScreenPtr screen, struct sna *sna)
 {
+	if (USE_SHM_VMAP && sna->kgem.has_vmap)
+		ShmRegisterFuncs(screen, &shm_funcs);
+	else
+		ShmRegisterFbFuncs(screen);
+
 	if (!sna_glyphs_create(sna))
 		return false;
 
diff --git a/src/sna/sna_driver.c b/src/sna/sna_driver.c
index 3871ab6..21e967a 100644
--- a/src/sna/sna_driver.c
+++ b/src/sna/sna_driver.c
@@ -168,6 +168,12 @@ static Bool sna_create_screen_resources(ScreenPtr screen)
 	free(screen->devPrivate);
 	screen->devPrivate = NULL;
 
+	if (!sna_accel_create(screen, sna)) {
+		xf86DrvMsg(screen->myNum, X_ERROR,
+			   "[intel] Failed to initialise acceleration routines\n");
+		goto cleanup_front;
+	}
+
 	sna->front = screen->CreatePixmap(screen,
 					  screen->width,
 					  screen->height,
@@ -194,12 +200,6 @@ static Bool sna_create_screen_resources(ScreenPtr screen)
 
 	screen->SetScreenPixmap(sna->front);
 
-	if (!sna_accel_create(sna)) {
-		xf86DrvMsg(screen->myNum, X_ERROR,
-			   "[intel] Failed to initialise acceleration routines\n");
-		goto cleanup_front;
-	}
-
 	sna_copy_fbcon(sna);
 
 	if (!sna_enter_vt(VT_FUNC_ARGS(0))) {


More information about the xorg-commit mailing list