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