xf86-video-intel: 3 commits - src/intel_module.c src/sna/kgem.c src/sna/sna_driver.c

Chris Wilson ickle at kemper.freedesktop.org
Wed Sep 5 09:21:10 PDT 2012


 src/intel_module.c   |   20 ++++++++++++--------
 src/sna/kgem.c       |    3 ---
 src/sna/sna_driver.c |   28 +++++++++++-----------------
 3 files changed, 23 insertions(+), 28 deletions(-)

New commits:
commit 1f5d5a37e57e63fa6e5b336a4847ce4422b89044
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Wed Sep 5 17:17:58 2012 +0100

    Add PlatformProbe to handle sharing of device entities
    
    Reported-by: Nick Bowler <nbowler at draconx.ca>
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=54561
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/intel_module.c b/src/intel_module.c
index d764dbb..a5d071b 100644
--- a/src/intel_module.c
+++ b/src/intel_module.c
@@ -546,6 +546,14 @@ intel_platform_probe(DriverPtr driver,
 		return FALSE;
 
 	scrn = xf86AllocateScreen(driver, 0);
+	if (scrn == NULL)
+		return FALSE;
+
+	xf86DrvMsg(scrn->scrnIndex, X_INFO,
+		   "using device path '%s'\n", path ? path : "Default device");
+
+	if (xf86IsEntitySharable(entity_num))
+		xf86SetEntityShared(entity_num);
 	xf86AddEntityToScreen(scrn, entity_num);
 
 	scrn->driverVersion = INTEL_VERSION;
@@ -553,20 +561,16 @@ intel_platform_probe(DriverPtr driver,
 	scrn->name = INTEL_NAME;
 	scrn->driverPrivate = (void *)(match_data | 1);
 	scrn->Probe = NULL;
+
 	switch (get_accel_method()) {
 #if USE_SNA
-        case SNA: sna_init_scrn(scrn, entity_num); break;
+        case SNA: return sna_init_scrn(scrn, entity_num);
 #endif
-
 #if USE_UXA
-        case UXA: intel_init_scrn(scrn); break;
+        case UXA: return intel_init_scrn(scrn);
 #endif
 	default: return FALSE;
 	}
-
-	xf86DrvMsg(scrn->scrnIndex, X_INFO,
-		   "using drv %s\n", path ? path : "Default device");
-	return scrn != NULL;
 }
 #endif
 
diff --git a/src/sna/sna_driver.c b/src/sna/sna_driver.c
index f0db471..a5c106e 100644
--- a/src/sna/sna_driver.c
+++ b/src/sna/sna_driver.c
@@ -226,7 +226,7 @@ struct sna_device {
 	int fd;
 	int open_count;
 };
-static int sna_device_key;
+static int sna_device_key = -1;
 
 static inline struct sna_device *sna_device(ScrnInfoPtr scrn)
 {
@@ -1080,8 +1080,6 @@ static Bool sna_pm_event(SCRN_ARG_TYPE arg, pmEvent event, Bool undo)
 
 Bool sna_init_scrn(ScrnInfoPtr scrn, int entity_num)
 {
-	EntityInfoPtr entity;
-
 #if defined(USE_GIT_DESCRIBE)
 	xf86DrvMsg(scrn->scrnIndex, X_INFO,
 		   "SNA compiled from %s\n", git_version);
@@ -1105,7 +1103,8 @@ Bool sna_init_scrn(ScrnInfoPtr scrn, int entity_num)
 	DBG(("%s\n", __FUNCTION__));
 	DBG(("pixman version: %s\n", pixman_version_string()));
 
-	sna_device_key = xf86AllocateEntityPrivateIndex();
+	if (sna_device_key == -1)
+		sna_device_key = xf86AllocateEntityPrivateIndex();
 
 	scrn->PreInit = sna_pre_init;
 	scrn->ScreenInit = sna_screen_init;
@@ -1119,15 +1118,9 @@ Bool sna_init_scrn(ScrnInfoPtr scrn, int entity_num)
 
 	scrn->ModeSet = sna_mode_set;
 
-	entity = xf86GetEntityInfo(entity_num);
-	if (!entity)
-		return FALSE;
-
 	xf86SetEntitySharable(entity_num);
-	xf86SetEntityInstanceForScreen(scrn,
-				       entity->index,
-				       xf86GetNumEntityInstances(entity->index)-1);
-	free(entity);
+	xf86SetEntityInstanceForScreen(scrn, entity_num,
+				       xf86GetNumEntityInstances(entity_num)-1);
 
 	return TRUE;
 }
commit ddde40afc081f47a3b6b694aeb21682c240c9562
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Wed Sep 5 16:48:01 2012 +0100

    sna: Harden against initialisation failures
    
    References: https://bugs.freedesktop.org/show_bug.cgi?id=54561
    Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>

diff --git a/src/intel_module.c b/src/intel_module.c
index cfd92e9..d764dbb 100644
--- a/src/intel_module.c
+++ b/src/intel_module.c
@@ -561,7 +561,7 @@ intel_platform_probe(DriverPtr driver,
 #if USE_UXA
         case UXA: intel_init_scrn(scrn); break;
 #endif
-	default: break;
+	default: return FALSE;
 	}
 
 	xf86DrvMsg(scrn->scrnIndex, X_INFO,
diff --git a/src/sna/sna_driver.c b/src/sna/sna_driver.c
index b814e1f..f0db471 100644
--- a/src/sna/sna_driver.c
+++ b/src/sna/sna_driver.c
@@ -230,6 +230,9 @@ static int sna_device_key;
 
 static inline struct sna_device *sna_device(ScrnInfoPtr scrn)
 {
+	if (scrn->entityList == NULL)
+		return NULL;
+
 	return xf86GetEntityPrivate(scrn->entityList[0], sna_device_key)->ptr;
 }
 
@@ -963,12 +966,11 @@ static void sna_free_screen(FREE_SCREEN_ARGS_DECL)
 
 	DBG(("%s\n", __FUNCTION__));
 
-	if (sna) {
+	if (sna && ((intptr_t)sna & 1) == 0) {
 		sna_mode_fini(sna);
-
 		free(sna);
-		scrn->driverPrivate = NULL;
 	}
+	scrn->driverPrivate = NULL;
 
 	sna_close_drm_master(scrn);
 }
@@ -1117,12 +1119,11 @@ Bool sna_init_scrn(ScrnInfoPtr scrn, int entity_num)
 
 	scrn->ModeSet = sna_mode_set;
 
-	xf86SetEntitySharable(scrn->entityList[0]);
-
 	entity = xf86GetEntityInfo(entity_num);
 	if (!entity)
 		return FALSE;
 
+	xf86SetEntitySharable(entity_num);
 	xf86SetEntityInstanceForScreen(scrn,
 				       entity->index,
 				       xf86GetNumEntityInstances(entity->index)-1);
commit 4627dc36fa56ab971cd90088bd29a597dd12dc02
Author: Chris Wilson <chris at chris-wilson.co.uk>
Date:   Wed Sep 5 16:17:17 2012 +0100

    Revert "sna: Flush the batch before a render operation if the GPU is idle"
    
    This reverts commit ad57ac07a273bf376b74884de47d8ee1e7129fb8.
    
    These checks end up being too frequent and not allowing us to batch
    sufficient commands to offset the overhead of batch submission. Hmm.

diff --git a/src/sna/kgem.c b/src/sna/kgem.c
index de38f0a..4b1738e 100644
--- a/src/sna/kgem.c
+++ b/src/sna/kgem.c
@@ -3578,9 +3578,6 @@ bool kgem_check_bo(struct kgem *kgem, ...)
 	DBG(("%s: num_pages=+%d, num_exec=+%d\n",
 	     __FUNCTION__, num_pages, num_exec));
 
-	if (kgem->nexec && kgem_is_idle(kgem))
-		return false;
-
 	if (!num_pages)
 		return true;
 


More information about the xorg-commit mailing list