diff -u xserver-xorg-video-intel-2.17.0/debian/changelog xserver-xorg-video-intel-2.17.0/debian/changelog --- xserver-xorg-video-intel-2.17.0/debian/changelog +++ xserver-xorg-video-intel-2.17.0/debian/changelog @@ -1,3 +1,19 @@ +xserver-xorg-video-intel (2:2.17.0-1ubuntu4.2) precise-proposed; urgency=low + + * Add 106-uxa-only-consider-attached-outputs-valid.patch, two upstream + commits merged together that fix GPU hangs on resume, due to outputs + getting marked valid before the kernel reports them attached. + (LP: #992391) + * Replace 101_copy-fb.patch with the patch that went upstream, backported + to build against the older xserver. Needed for other backports. + - refreshed patch 104 to apply. + * Add 107-uxa-fix-pageflip-race.patch, fixes a race with pageflip and + dpms, resulting in for instance compiz hanging. (LP: #966744) + - consists of five upstream commits merged as one and backported to + build against the xserver in precise + + -- Timo Aaltonen Fri, 05 Oct 2012 22:40:38 +0300 + xserver-xorg-video-intel (2:2.17.0-1ubuntu4.1) precise-proposed; urgency=low * Add 105_reduce_ivb_gt1_max_thread_count.patch, backported commit diff -u xserver-xorg-video-intel-2.17.0/debian/patches/series xserver-xorg-video-intel-2.17.0/debian/patches/series --- xserver-xorg-video-intel-2.17.0/debian/patches/series +++ xserver-xorg-video-intel-2.17.0/debian/patches/series @@ -7,0 +8,2 @@ +106-uxa-only-consider-attached-outputs-valid.patch +107-uxa-fix-pageflip-race.patch diff -u xserver-xorg-video-intel-2.17.0/debian/patches/101_copy-fb.patch xserver-xorg-video-intel-2.17.0/debian/patches/101_copy-fb.patch --- xserver-xorg-video-intel-2.17.0/debian/patches/101_copy-fb.patch +++ xserver-xorg-video-intel-2.17.0/debian/patches/101_copy-fb.patch @@ -1,16 +1,27 @@ -Index: xserver-xorg-video-intel/src/intel.h -=================================================================== ---- xserver-xorg-video-intel.orig/src/intel.h 2011-12-20 15:47:35.802985779 +1100 -+++ xserver-xorg-video-intel/src/intel.h 2011-12-20 15:47:38.618985789 +1100 -@@ -432,6 +432,7 @@ - OptionInfoPtr Options; - - /* Driver phase/state information */ -+ Bool starting; - Bool suspended; - - enum last_3d last_3d; -@@ -461,6 +462,7 @@ +commit 3b9b64c7c9b5b0bfaafb97c9a9fe5849bbb412da +Author: Dave Airlie +Date: Tue Jun 12 10:26:34 2012 +0100 + + uxa: do copy fb at startup. + + Copy the current framebuffer for smooth wayland->gdm handoff. + + This has been hanging around in Fedora for too long now, and we've + dropped the feature a few times, and yes I know the Simpsons did it^W^W^W + SNA does it. + + I've updated the code to have some of the better fixes from nouveau. + + I've no idea who wrote this code either, krh or ajax. [ickle: The + earliest version I've found had krh's fingerprints on it, though it may + still have been a joint effort.] + + Signed-off-by: Dave Airlie + [ickle: improve error handling, only copy the fb during initial takeover] + +--- a/src/intel.h ++++ b/src/intel.h +@@ -461,6 +461,7 @@ extern int intel_get_pipe_from_crtc_id(drm_intel_bufmgr *bufmgr, xf86CrtcPtr crtc); extern int intel_crtc_id(xf86CrtcPtr crtc); extern int intel_output_dpms_status(xf86OutputPtr output); @@ -18,90 +29,80 @@ enum DRI2FrameEventType { DRI2_SWAP, -Index: xserver-xorg-video-intel/src/intel_display.c -=================================================================== ---- xserver-xorg-video-intel.orig/src/intel_display.c 2011-12-20 15:47:35.778985780 +1100 -+++ xserver-xorg-video-intel/src/intel_display.c 2011-12-20 15:54:45.422987131 +1100 -@@ -36,6 +36,8 @@ +--- a/src/intel_display.c ++++ b/src/intel_display.c +@@ -35,6 +35,7 @@ + #include #include #include - +#include -+ + #include "xorgVersion.h" - #include "intel.h" -@@ -45,6 +47,8 @@ +@@ -44,6 +45,8 @@ + #include "X11/Xatom.h" #include "X11/extensions/dpmsconst.h" #include "xf86DDC.h" - ++#include "fb.h" +#include "uxa.h" -+ + struct intel_mode { int fd; - uint32_t fb_id; -@@ -939,6 +943,13 @@ - drmModeConnectorPtr koutput = intel_output->mode_output; - struct intel_mode *mode = intel_output->mode; - int i; -+ intel_screen_private *intel = intel_get_screen_private(output->scrn); -+ -+ /* xf86Crtc.c calls dpms off in set desired modes, so ignore -+ * the request if we're starting up. */ -+ -+ if (intel->starting) -+ return; - - for (i = 0; i < koutput->count_props; i++) { - drmModePropertyPtr props; -@@ -1632,6 +1643,11 @@ - } - - intel->modes = mode; -+ -+#if GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) < 9 -+ scrn->canDoBGNoneRoot = TRUE; -+#endif -+ - return TRUE; - } - -@@ -1701,3 +1717,100 @@ +@@ -1701,3 +1704,129 @@ struct intel_crtc *intel_crtc = crtc->driver_private; return intel_crtc->pipe; } + +static PixmapPtr -+intel_create_pixmap_for_fbcon(ScrnInfoPtr scrn) ++intel_create_pixmap_for_bo(ScreenPtr pScreen, dri_bo *bo, ++ int width, int height, ++ int depth, int bpp, ++ int pitch) ++{ ++ PixmapPtr pixmap; ++ ++ pixmap = pScreen->CreatePixmap(pScreen, 0, 0, depth, 0); ++ if (pixmap == NullPixmap) ++ return pixmap; ++ ++ if (!pScreen->ModifyPixmapHeader(pixmap, ++ width, height, ++ depth, bpp, ++ pitch, NULL)) { ++ pScreen->DestroyPixmap(pixmap); ++ return NullPixmap; ++ } ++ ++ intel_set_pixmap_bo(pixmap, bo); ++ return pixmap; ++} ++ ++static PixmapPtr ++intel_create_pixmap_for_fbcon(ScrnInfoPtr scrn, int fbcon_id) +{ -+ xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn); -+ struct intel_crtc *intel_crtc = xf86_config->crtc[0]->driver_private; + ScreenPtr pScreen = screenInfo.screens[scrn->scrnIndex]; -+ struct intel_mode *mode = intel_crtc->mode; + intel_screen_private *intel = intel_get_screen_private(scrn); -+ drmModeFBPtr fbcon = NULL; ++ struct intel_mode *mode = intel->modes; ++ int fd = mode->fd; ++ drmModeFBPtr fbcon; + struct drm_gem_flink flink; + drm_intel_bo *bo; -+ PixmapPtr pixmap = NULL; -+ int i; ++ PixmapPtr pixmap = NullPixmap; + -+ for (i = 0; i < mode->mode_res->count_crtcs; i++) { -+ intel_crtc = xf86_config->crtc[i]->driver_private; -+ if (intel_crtc->mode_crtc->buffer_id == 0) -+ continue; -+ fbcon = drmModeGetFB(mode->fd, -+ intel_crtc->mode_crtc->buffer_id); -+ if (fbcon != NULL) -+ break; -+ } -+ if (i == mode->mode_res->count_crtcs) ++ fbcon = drmModeGetFB(fd, fbcon_id); ++ if (fbcon == NULL) + return NULL; + ++ if (fbcon->depth != scrn->depth || ++ fbcon->width != scrn->virtualX || ++ fbcon->height != scrn->virtualY) ++ goto out_free_fb; ++ + flink.handle = fbcon->handle; -+ if (ioctl(mode->fd, DRM_IOCTL_GEM_FLINK, &flink) < 0) { ++ if (ioctl(fd, DRM_IOCTL_GEM_FLINK, &flink) < 0) { + xf86DrvMsg(scrn->scrnIndex, X_ERROR, + "Couldn't flink fbcon handle\n"); -+ return NULL; ++ goto out_free_fb; + } + + bo = drm_intel_bo_gem_create_from_name(intel->bufmgr, @@ -109,23 +110,18 @@ + if (bo == NULL) { + xf86DrvMsg(scrn->scrnIndex, X_ERROR, + "Couldn't allocate bo for fbcon handle\n"); -+ return NULL; ++ goto out_free_fb; + } -+ if (!CreateScratchPixmapsForScreen(pScreen->myNum)) -+ return NULL; + -+ pixmap = GetScratchPixmapHeader(pScreen, -+ fbcon->width, fbcon->height, -+ fbcon->depth, fbcon->bpp, -+ fbcon->pitch, NULL); -+ if (pixmap == NULL) { ++ pixmap = intel_create_pixmap_for_bo(pScreen, bo, ++ fbcon->width, fbcon->height, ++ fbcon->depth, fbcon->bpp, ++ fbcon->pitch); ++ if (pixmap == NullPixmap) + xf86DrvMsg(scrn->scrnIndex, X_ERROR, + "Couldn't allocate pixmap fbcon contents\n"); -+ return NULL; -+ } -+ -+ intel_set_pixmap_bo(pixmap, bo); + drm_intel_bo_unreference(bo); ++out_free_fb: + drmModeFreeFB(fbcon); + + return pixmap; @@ -136,75 +132,64 @@ ++ xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn); + ScreenPtr pScreen = screenInfo.screens[scrn->scrnIndex]; + intel_screen_private *intel = intel_get_screen_private(scrn); + PixmapPtr src, dst; + unsigned int pitch = scrn->displayWidth * intel->cpp; ++ struct intel_crtc *intel_crtc; ++ int i, fbcon_id; + -+ src = intel_create_pixmap_for_fbcon(scrn); -+ if (src == NULL) { -+ xf86DrvMsg(scrn->scrnIndex, X_ERROR, -+ "Couldn't create pixmap for fbcon\n"); ++ if (intel->force_fallback) + return; -+ } + -+ /* We dont have a screen Pixmap yet */ -+ dst = GetScratchPixmapHeader(pScreen, -+ scrn->virtualX, scrn->virtualY, -+ scrn->depth, scrn->bitsPerPixel, -+ pitch, -+ NULL); -+ intel_set_pixmap_bo(dst, intel->front_buffer); ++ fbcon_id = 0; ++ for (i = 0; i < xf86_config->num_crtc; i++) { ++ intel_crtc = xf86_config->crtc[i]->driver_private; ++ if (intel_crtc->mode_crtc->buffer_id) ++ fbcon_id = intel_crtc->mode_crtc->buffer_id; ++ } ++ if (!fbcon_id) ++ return; + -+ intel->uxa_driver->prepare_copy(src, dst, -1, -1, GXcopy, FB_ALLONES); ++ src = intel_create_pixmap_for_fbcon(scrn, fbcon_id); ++ if (src == NULL) ++ return; + -+ intel->uxa_driver->copy(dst, 0, 0, 0, 0, ++ /* We dont have a screen Pixmap yet */ ++ dst = intel_create_pixmap_for_bo(pScreen, intel->front_buffer, ++ scrn->virtualX, scrn->virtualY, ++ scrn->depth, scrn->bitsPerPixel, ++ pitch); ++ if (dst == NullPixmap) ++ goto cleanup_src; ++ ++ if (!intel->uxa_driver->prepare_copy(src, dst, ++ -1, -1, ++ GXcopy, FB_ALLONES)) ++ goto cleanup_dst; ++ ++ intel->uxa_driver->copy(dst, ++ 0, 0, ++ 0, 0, + scrn->virtualX, scrn->virtualY); -+ + intel->uxa_driver->done_copy(dst); ++ pScreen->canDoBGNoneRoot = TRUE; + -+ intel_batch_submit(scrn); -+ -+ (*pScreen->DestroyPixmap)(src); ++cleanup_dst: + (*pScreen->DestroyPixmap)(dst); -+ FreeScratchPixmapsForScreen(pScreen->myNum); ++cleanup_src: ++ (*pScreen->DestroyPixmap)(src); +} -+ -Index: xserver-xorg-video-intel/src/intel_driver.c -=================================================================== ---- xserver-xorg-video-intel.orig/src/intel_driver.c 2011-12-20 15:47:35.762985780 +1100 -+++ xserver-xorg-video-intel/src/intel_driver.c 2011-12-20 15:47:38.618985789 +1100 -@@ -950,6 +950,10 @@ - intel->directRenderingType = DRI_DRI2; - #endif - -+#if GET_ABI_MAJOR(ABI_VIDEODRV_VERSION) >= 9 -+ screen->canDoBGNoneRoot = TRUE; -+#endif -+ - if (!intel_init_initial_framebuffer(scrn)) +--- a/src/intel_driver.c ++++ b/src/intel_driver.c +@@ -238,7 +238,11 @@ + if (!(*screen->CreateScreenResources) (screen)) return FALSE; -@@ -958,6 +962,8 @@ - if (INTEL_INFO(intel)->gen >= 40) - gen4_render_state_init(scrn); - -+ intel->starting = FALSE; +- return intel_uxa_create_screen_resources(screen); ++ if (!intel_uxa_create_screen_resources(screen)) ++ return FALSE; + - miClearVisualTypes(); - if (!miSetVisualTypes(scrn->depth, - miGetDefaultVisualMask(scrn->depth), -@@ -1093,6 +1099,7 @@ - - intel_mode_init(intel); - -+ intel->starting = FALSE; - intel->suspended = FALSE; - - #if HAVE_UDEV -@@ -1159,6 +1166,8 @@ - - intel_set_gem_max_sizes(scrn); - + intel_copy_fb(scrn); -+ - if (!xf86SetDesiredModes(scrn)) - return FALSE; ++ return TRUE; + } + static void PreInitCleanup(ScrnInfoPtr scrn) diff -u xserver-xorg-video-intel-2.17.0/debian/patches/104_uxa_fix_gtt_mapping_limits.patch xserver-xorg-video-intel-2.17.0/debian/patches/104_uxa_fix_gtt_mapping_limits.patch --- xserver-xorg-video-intel-2.17.0/debian/patches/104_uxa_fix_gtt_mapping_limits.patch +++ xserver-xorg-video-intel-2.17.0/debian/patches/104_uxa_fix_gtt_mapping_limits.patch @@ -30,14 +30,12 @@ diff -Nurp patched/src/intel_driver.c build/src/intel_driver.c --- patched/src/intel_driver.c 2012-02-15 17:31:03.643780719 -0800 +++ build/src/intel_driver.c 2012-02-15 17:28:59.439522179 -0800 -@@ -1164,8 +1164,6 @@ static Bool I830EnterVT(int scrnIndex, i +@@ -1164,6 +1164,4 @@ static Bool I830EnterVT(int scrnIndex, i strerror(errno)); } - intel_set_gem_max_sizes(scrn); - - intel_copy_fb(scrn); - if (!xf86SetDesiredModes(scrn)) diff -Nurp patched/src/intel.h build/src/intel.h --- patched/src/intel.h 2012-02-15 17:31:03.643780719 -0800 only in patch2: unchanged: --- xserver-xorg-video-intel-2.17.0.orig/debian/patches/107-uxa-fix-pageflip-race.patch +++ xserver-xorg-video-intel-2.17.0/debian/patches/107-uxa-fix-pageflip-race.patch @@ -0,0 +1,126 @@ +commit edc5b7f741a4bb8e9a58b5eb2201fa9304f94ef7 +Author: Chris Wilson +Date: Thu Sep 27 13:27:20 2012 +0100 + +commit 5a45cbacb777e478d8fbda9223b0fb5c705d7249 +Author: Chris Wilson +Date: Thu Sep 27 13:31:27 2012 +0100 + +commit feef53005b57d6b4489a15f8d0db8245dcb0cfaa +Author: Chris Wilson +Date: Thu Sep 27 13:36:55 2012 +0100 + +commit cb0b72c4fbb7b1bc941522d8679fef856f2f8936 +Author: Chris Wilson +Date: Thu Sep 27 14:53:46 2012 +0100 + +commit 88cfd23379950d1fe4e682519c48ef6e3091c2f3 +Author: Chris Wilson +Date: Thu Sep 27 16:16:39 2012 +0100 + +diff --git a/src/intel_display.c b/src/intel_display.c +index 4ab7dd3..fae7066 100644 +--- a/src/intel_display.c ++++ b/src/intel_display.c +@@ -1449,15 +1449,15 @@ intel_do_pageflip(intel_screen_private *intel, + struct intel_mode *mode = crtc->mode; + unsigned int pitch = scrn->displayWidth * intel->cpp; + struct intel_pageflip *flip; +- int i, old_fb_id; ++ uint32_t new_fb_id; ++ int i; + + /* + * Create a new handle for the back buffer + */ +- old_fb_id = mode->fb_id; + if (drmModeAddFB(mode->fd, scrn->virtualX, scrn->virtualY, + scrn->depth, scrn->bitsPerPixel, pitch, +- new_front->handle, &mode->fb_id)) ++ new_front->handle, &new_fb_id)) + goto error_out; + + intel_batch_submit(scrn); +@@ -1476,7 +1476,7 @@ intel_do_pageflip(intel_screen_private *intel, + mode->fe_tv_usec = 0; + + for (i = 0; i < config->num_crtc; i++) { +- if (!config->crtc[i]->enabled) ++ if (!intel_crtc_on(config->crtc[i])) + continue; + + mode->flip_info = flip_info; +@@ -1499,7 +1499,7 @@ intel_do_pageflip(intel_screen_private *intel, + + if (drmModePageFlip(mode->fd, + crtc_id(crtc), +- mode->fb_id, ++ new_fb_id, + DRM_MODE_PAGE_FLIP_EVENT, flip)) { + xf86DrvMsg(scrn->scrnIndex, X_WARNING, + "flip queue failed: %s\n", strerror(errno)); +@@ -1508,12 +1508,16 @@ intel_do_pageflip(intel_screen_private *intel, + } + } + +- mode->old_fb_id = old_fb_id; ++ mode->old_fb_id = mode->fb_id; ++ mode->fb_id = new_fb_id; + return TRUE; + + error_undo: +- drmModeRmFB(mode->fd, mode->fb_id); +- mode->fb_id = old_fb_id; ++ drmModeRmFB(mode->fd, new_fb_id); ++ for (i = 0; i < config->num_crtc; i++) { ++ if (config->crtc[i]->enabled) ++ intel_crtc_apply(config->crtc[i]); ++ } + + error_out: + xf86DrvMsg(scrn->scrnIndex, X_WARNING, "Page flip failed: %s\n", +diff --git a/src/intel_dri.c b/src/intel_dri.c +index 135ba4e..c4dbd72 100644 +--- a/src/intel_dri.c ++++ b/src/intel_dri.c +@@ -473,7 +473,7 @@ I830DRI2CopyRegion(DrawablePtr drawable, RegionPtr pRegion, + BoxPtr box; + BoxRec crtcbox; + int y1, y2; +- int pipe = -1, event, load_scan_lines_pipe; ++ int event, load_scan_lines_pipe; + xf86CrtcPtr crtc; + Bool full_height = FALSE; + +@@ -485,7 +485,7 @@ I830DRI2CopyRegion(DrawablePtr drawable, RegionPtr pRegion, + * buffer + */ + if (crtc != NULL && !crtc->rotatedData) { +- pipe = intel_crtc_to_pipe(crtc); ++ int pipe = intel_crtc_to_pipe(crtc); + + /* + * Make sure we don't wait for a scanline that will +@@ -874,7 +874,8 @@ I830DRI2ScheduleFlip(struct intel_screen_private *intel, + static Bool + can_exchange(DrawablePtr drawable, DRI2BufferPtr front, DRI2BufferPtr back) + { +- struct intel_screen_private *intel = intel_get_screen_private(xf86Screens[drawable->pScreen->myNum]); ++ ScrnInfoPtr pScrn = xf86Screens[drawable->pScreen->myNum]; ++ struct intel_screen_private *intel = intel_get_screen_private(pScrn); + I830DRI2BufferPrivatePtr front_priv = front->driverPrivate; + I830DRI2BufferPrivatePtr back_priv = back->driverPrivate; + PixmapPtr front_pixmap = front_priv->pixmap; +@@ -885,6 +886,12 @@ can_exchange(DrawablePtr drawable, DRI2BufferPtr front, DRI2BufferPtr back) + if (drawable == NULL) + return FALSE; + ++ if (!pScrn->vtSema) ++ return FALSE; ++ ++ if (I830DRI2DrawablePipe(drawable) < 0) ++ return FALSE; ++ + if (!DRI2CanFlip(drawable)) + return FALSE; + only in patch2: unchanged: --- xserver-xorg-video-intel-2.17.0.orig/debian/patches/106-uxa-only-consider-attached-outputs-valid.patch +++ xserver-xorg-video-intel-2.17.0/debian/patches/106-uxa-only-consider-attached-outputs-valid.patch @@ -0,0 +1,106 @@ +commit 3f3bde4f0c72f6f31aae322bcdc20b95eade6631 +Author: Chris Wilson +Date: Thu May 24 11:58:46 2012 +0100 + + uxa: Only consider an output valid if the kernel reports it attached + + Reported-by: Kyle Hill + Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=50078 + Signed-off-by: Chris Wilson + +commit c4eb5528a456b65c673f7c984d14a622ac67cdca +Author: Chris Wilson +Date: Tue Jun 5 16:04:16 2012 +0100 + + uxa: Check for DPMS off before scheduling a WAIT_ON_EVENT + + Regression from commit 3f3bde4f0c72f6f31aae322bcdc20b95eade6631 + Author: Chris Wilson + Date: Thu May 24 11:58:46 2012 +0100 + + uxa: Only consider an output valid if the kernel reports it attached + + When backporting from SNA, a key difference that UXA does not track DPMS + state in its enabled flag and that a DPMS off CRTC is still bound to the + fb. So we do need to rescan the outputs and check that we have a + connector enabled *and* the pipe is running prior to emitting a scanline + wait. + + References: https://bugs.freedesktop.org/show_bug.cgi?id=50668 + Signed-off-by: Chris Wilson + +--- a/src/intel_display.c ++++ b/src/intel_display.c +@@ -1716,6 +1716,43 @@ + return intel_crtc->pipe; + } + ++Bool intel_crtc_on(xf86CrtcPtr crtc) ++{ ++ ScrnInfoPtr scrn = crtc->scrn; ++ xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(crtc->scrn); ++ struct intel_crtc *intel_crtc = crtc->driver_private; ++ drmModeCrtcPtr drm_crtc; ++ Bool ret; ++ int i; ++ ++ if (!crtc->enabled) ++ return FALSE; ++ ++ /* Kernel manages CRTC status based on output config */ ++ ret = FALSE; ++ for (i = 0; i < xf86_config->num_output; i++) { ++ xf86OutputPtr output = xf86_config->output[i]; ++ if (output->crtc == crtc && ++ intel_output_dpms_status(output) == DPMSModeOn) { ++ ret = TRUE; ++ break; ++ } ++ } ++ if (!ret) ++ return FALSE; ++ ++ /* And finally check with the kernel that the fb is bound */ ++ drm_crtc = drmModeGetCrtc(intel_crtc->mode->fd, crtc_id(intel_crtc)); ++ if (drm_crtc == NULL) ++ return FALSE; ++ ++ ret = (drm_crtc->mode_valid && ++ intel_crtc->mode->fb_id == drm_crtc->buffer_id); ++ free(drm_crtc); ++ ++ return ret; ++} ++ + static PixmapPtr + intel_create_pixmap_for_fbcon(ScrnInfoPtr scrn) + { +--- a/src/intel_driver.c ++++ b/src/intel_driver.c +@@ -789,26 +789,6 @@ + return TRUE; + } + +-Bool intel_crtc_on(xf86CrtcPtr crtc) +-{ +- ScrnInfoPtr scrn = crtc->scrn; +- xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(scrn); +- int i; +- +- if (!crtc->enabled) +- return FALSE; +- +- /* Kernel manages CRTC status based out output config */ +- for (i = 0; i < xf86_config->num_output; i++) { +- xf86OutputPtr output = xf86_config->output[i]; +- if (output->crtc == crtc && +- intel_output_dpms_status(output) == DPMSModeOn) +- return TRUE; +- } +- +- return FALSE; +-} +- + static void + intel_flush_callback(CallbackListPtr *list, + pointer user_data, pointer call_data)