summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKeith Packard <keithp@keithp.com>2008-10-14 14:35:36 -0700
committerKeith Packard <keithp@keithp.com>2008-10-19 14:12:02 -0700
commitae224be27bb4432f25dae851debea6966bf31261 (patch)
tree134161ac3a3d2b5c1e41b4f57b776795283d0bf9
parent7ddea0447c8972104d43cd7966f5ce89b4cca20c (diff)
Check for DRI module before initializing GEM mm
GEM requires the DRI extension module currently, so make sure that is loaded (by checking for the DRIQueryVersion symbol) before trying to call it. This allows the server to start with the DRI extension disabled. Signed-off-by: Keith Packard <keithp@keithp.com>
-rw-r--r--src/i830_memory.c29
1 files changed, 21 insertions, 8 deletions
diff --git a/src/i830_memory.c b/src/i830_memory.c
index 505564f5..b778f398 100644
--- a/src/i830_memory.c
+++ b/src/i830_memory.c
@@ -393,6 +393,7 @@ i830_allocator_init(ScrnInfoPtr pScrn, unsigned long offset, unsigned long size)
int dri_major, dri_minor, dri_patch;
struct drm_i915_getparam gp;
int has_gem;
+ int has_dri;
#endif
start = xcalloc(1, sizeof(*start));
@@ -431,21 +432,33 @@ i830_allocator_init(ScrnInfoPtr pScrn, unsigned long offset, unsigned long size)
pI830->memory_list = start;
#ifdef XF86DRI
- DRIQueryVersion(&dri_major, &dri_minor, &dri_patch);
-
- has_gem = 0;
- gp.param = I915_PARAM_HAS_GEM;
- gp.value = &has_gem;
+ has_gem = FALSE;
+ has_dri = FALSE;
+
+ if (pI830->directRenderingEnabled &&
+ xf86LoaderCheckSymbol ("DRIQueryVersion"))
+ {
+ DRIQueryVersion(&dri_major, &dri_minor, &dri_patch);
+ has_dri = TRUE;
+ }
- (void)drmCommandWriteRead(pI830->drmSubFD, DRM_I915_GETPARAM,
- &gp, sizeof(gp));
+ if (pI830->directRenderingEnabled &&
+ xf86LoaderCheckSymbol ("drmCommandWriteRead"))
+ {
+ has_gem = FALSE;
+ gp.param = I915_PARAM_HAS_GEM;
+ gp.value = &has_gem;
+
+ (void)drmCommandWriteRead(pI830->drmSubFD, DRM_I915_GETPARAM,
+ &gp, sizeof(gp));
+ }
/* Now that we have our manager set up, initialize the kernel MM if
* possible, covering almost all of the aperture. We need libdri interface
* 5.4 or newer so we can rely on the lock being held after DRIScreenInit,
* rather than after DRIFinishScreenInit.
*/
- if (pI830->directRenderingEnabled && has_gem &&
+ if (pI830->directRenderingEnabled && has_gem && has_dri &&
(dri_major > 5 || (dri_major == 5 && dri_minor >= 4)))
{
int mmsize;