[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

xserver-xorg-video-intel: Changes to 'ubuntu'



 debian/changelog                                                  |   12 -
 debian/patches/101_copy-fb.patch                                  |   48 ++--
 debian/patches/106_backport_vblank_on_server_regenerate_fix.patch |  112 ++++++++++
 debian/patches/series                                             |    1 
 4 files changed, 149 insertions(+), 24 deletions(-)

New commits:
commit 255f28fce2a6b0fac726efc7edc4690dc2bd3612
Author: Christopher James Halse Rogers <christopher.halse.rogers@canonical.com>
Date:   Sun Sep 26 13:04:12 2010 +1000

    Fix display refresh on server regenerate

diff --git a/debian/changelog b/debian/changelog
index 264143e..7a8ff4e 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -10,8 +10,12 @@ xserver-xorg-video-intel (2:2.12.0-1ubuntu5) maverick; urgency=low
   * debian/patches/101_copy-fb.patch: Move scratch pixmap creation to the
     drmmode_copy_fb function, and clean up after we've used it.  Fixes the
     SIGSEGV in FreeClientResources when logging out of KDE (LP: #628077)
+  * debian/patches/106_backport_vblank_on_server_regenerate_fix.patch:
+    Backport fix for SwapBuffers hang after server regenerate.  LP 628077
+    was hiding this by crashing the server.  Fixes kwin desktop effects hanging
+    on second and subsequent logins.
 
- -- Christopher James Halse Rogers <raof@ubuntu.com>  Sat, 25 Sep 2010 20:44:22 +1000
+ -- Christopher James Halse Rogers <raof@ubuntu.com>  Sun, 26 Sep 2010 10:12:15 +1000
 
 xserver-xorg-video-intel (2:2.12.0-1ubuntu4) maverick; urgency=low
 
diff --git a/debian/patches/106_backport_vblank_on_server_regenerate_fix.patch b/debian/patches/106_backport_vblank_on_server_regenerate_fix.patch
new file mode 100644
index 0000000..ecf6557
--- /dev/null
+++ b/debian/patches/106_backport_vblank_on_server_regenerate_fix.patch
@@ -0,0 +1,112 @@
+Author: Christopher Halse Rogers <christopher.halse.rogers@canonical.com>
+Description: Backport vsync fix from the following commit:
+ .
+ commit c882f6a22a862c1664c375e05e5e6fc4bdb04edb
+ Author: Chris Wilson <chris@chris-wilson.co.uk>
+ Date:   Wed Aug 18 10:21:22 2010 +0100
+
+    Move registration of vsync fd from pre-init to screen-init
+    
+    Marty Jack reported an issue he found where the page-flipping handler
+    was being lost on server reset. This results in the swap completion
+    notification being lost, with the sporadic hang of full screen
+    applications like Compiz, flash and even glxgears!
+    
+    Fixes:
+    
+      Bug 29584 - Server in compute loop
+      https://bugs.freedesktop.org/show_bug.cgi?id=29584
+    
+    There are also several possibly related bugs with similar symptoms, i.e.
+    OpenGL applications hanging on missed swap notifications.
+    
+    Reported-by: Marty Jack <martyj19@comcast.net>
+    Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
+    Cc: Keith Packard <keithp@keithp.com>
+
+Index: xserver-xorg-video-intel/src/drmmode_display.c
+===================================================================
+--- xserver-xorg-video-intel.orig/src/drmmode_display.c	2010-09-26 10:33:35.167165002 +1000
++++ xserver-xorg-video-intel/src/drmmode_display.c	2010-09-26 10:37:41.000000000 +1000
+@@ -1466,14 +1466,12 @@
+ 		xf86DrvMsg(scrn->scrnIndex, X_INFO,
+ 			   "Kernel page flipping support detected, but forcibly disabled.\n");
+ 		intel->use_pageflipping = FALSE;
+-		drmmode->flip_count = 0;
++		intel->can_pageflip = TRUE;
++
+ 		drmmode->event_context.version = DRM_EVENT_CONTEXT_VERSION;
+ 		drmmode->event_context.vblank_handler = drmmode_vblank_handler;
+ 		drmmode->event_context.page_flip_handler =
+ 		    drmmode_page_flip_handler;
+-		AddGeneralSocket(fd);
+-		RegisterBlockAndWakeupHandlers((BlockHandlerProcPtr)NoopDDA,
+-					       drm_wakeup_handler, drmmode);
+ 	}
+ 
+ 	scrn->canDoBGNoneRoot = TRUE;
+@@ -1481,6 +1479,31 @@
+ 	return TRUE;
+ }
+ 
++void
++drmmode_init(ScrnInfoPtr scrn)
++{
++	intel_screen_private *intel = intel_get_screen_private(scrn);
++	if (intel->can_pageflip) {
++		xf86CrtcConfigPtr xf86_config;
++		drmmode_crtc_private_ptr drmmode_crtc;
++		drmmode_ptr drmmode;
++		
++		xf86_config = XF86_CRTC_CONFIG_PTR(scrn);
++		
++		drmmode_crtc = xf86_config->crtc[0]->driver_private;
++		drmmode = drmmode_crtc->drmmode;
++
++		/* We need to re-register the mode->fd for the synchronisation
++		 * feedback on every server generation, so perform the
++		 * registration within ScreenInit and not PreInit.
++		 */
++		drmmode->flip_count = 0;
++		AddGeneralSocket(drmmode->fd);
++		RegisterBlockAndWakeupHandlers((BlockHandlerProcPtr)NoopDDA,
++					       drm_wakeup_handler, drmmode);
++	}
++}
++
+ int
+ drmmode_get_pipe_from_crtc_id(drm_intel_bufmgr *bufmgr, xf86CrtcPtr crtc)
+ {
+Index: xserver-xorg-video-intel/src/i830.h
+===================================================================
+--- xserver-xorg-video-intel.orig/src/i830.h	2010-09-26 10:33:35.127165002 +1000
++++ xserver-xorg-video-intel/src/i830.h	2010-09-26 10:38:21.000000000 +1000
+@@ -417,6 +417,7 @@
+ 	char *deviceName;
+ 
+ 	Bool use_pageflipping;
++	Bool can_pageflip;
+ 	Bool force_fallback;
+ 
+ 	/* Broken-out options. */
+@@ -442,6 +443,7 @@
+ };
+ 
+ extern Bool drmmode_pre_init(ScrnInfoPtr pScrn, int fd, int cpp);
++extern void drmmode_init(ScrnInfoPtr scrn);
+ extern int drmmode_get_pipe_from_crtc_id(drm_intel_bufmgr *bufmgr, xf86CrtcPtr crtc);
+ extern int drmmode_output_dpms_status(xf86OutputPtr output);
+ extern Bool drmmode_do_pageflip(ScreenPtr screen, dri_bo *new_front, void *data);
+Index: xserver-xorg-video-intel/src/i830_driver.c
+===================================================================
+--- xserver-xorg-video-intel.orig/src/i830_driver.c	2010-09-26 10:33:35.197165002 +1000
++++ xserver-xorg-video-intel/src/i830_driver.c	2010-09-26 10:33:35.217165002 +1000
+@@ -1244,6 +1244,8 @@
+ 	if (serverGeneration == 1)
+ 		xf86ShowUnusedOptions(scrn->scrnIndex, scrn->options);
+ 
++	drmmode_init(scrn);
++
+ 	intel->starting = FALSE;
+ 	intel->suspended = FALSE;
+ 
diff --git a/debian/patches/series b/debian/patches/series
index 12be815..994395c 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -3,3 +3,4 @@
 103-mbp-backlight-support.patch
 104_sandybridge_id_update.patch
 105_sandybridge_dri_disable.patch
+106_backport_vblank_on_server_regenerate_fix.patch

commit 3eff60fc941b47a4b406c81ffe8979f38a4b1a24
Author: Christopher James Halse Rogers <christopher.halse.rogers@canonical.com>
Date:   Sat Sep 25 20:42:59 2010 +1000

    Fix segfault on logout in KDE due to problem in 101_copy-fb

diff --git a/debian/changelog b/debian/changelog
index f8b981c..264143e 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,11 +1,17 @@
 xserver-xorg-video-intel (2:2.12.0-1ubuntu5) maverick; urgency=low
 
+  [ Robert Hooker ]
   * Disable DRI on Sandybridge chipsets. Support for them will not be released
     until the Q42010 Intel releases, which will not be pulled into maverick.
     Without this change, all 3D apps on these devices cause hangs.
     (LP: #639667)
 
- -- Robert Hooker <robert.hooker@canonical.com>  Thu, 23 Sep 2010 20:03:59 -0400
+  [ Christopher James Halse Rogers ]
+  * debian/patches/101_copy-fb.patch: Move scratch pixmap creation to the
+    drmmode_copy_fb function, and clean up after we've used it.  Fixes the
+    SIGSEGV in FreeClientResources when logging out of KDE (LP: #628077)
+
+ -- Christopher James Halse Rogers <raof@ubuntu.com>  Sat, 25 Sep 2010 20:44:22 +1000
 
 xserver-xorg-video-intel (2:2.12.0-1ubuntu4) maverick; urgency=low
 
diff --git a/debian/patches/101_copy-fb.patch b/debian/patches/101_copy-fb.patch
index 7bf1df8..dbd105a 100644
--- a/debian/patches/101_copy-fb.patch
+++ b/debian/patches/101_copy-fb.patch
@@ -1,7 +1,7 @@
-diff --git a/src/drmmode_display.c b/src/drmmode_display.c
-index ba24206..bd6ef4e 100644
---- a/src/drmmode_display.c
-+++ b/src/drmmode_display.c
+Index: xserver-xorg-video-intel/src/drmmode_display.c
+===================================================================
+--- xserver-xorg-video-intel.orig/src/drmmode_display.c	2010-09-23 16:26:34.275006000 +1000
++++ xserver-xorg-video-intel/src/drmmode_display.c	2010-09-23 16:29:20.555006001 +1000
 @@ -36,6 +36,8 @@
  #include <errno.h>
  #include <poll.h>
@@ -11,7 +11,7 @@ index ba24206..bd6ef4e 100644
  #include "xorgVersion.h"
  
  #include "i830.h"
-@@ -853,6 +855,13 @@ drmmode_output_dpms(xf86OutputPtr output, int mode)
+@@ -853,6 +855,13 @@
  	drmmode_ptr drmmode = drmmode_output->drmmode;
  	int i;
  	drmModePropertyPtr props;
@@ -25,7 +25,7 @@ index ba24206..bd6ef4e 100644
  
  	for (i = 0; i < koutput->count_props; i++) {
  		props = drmModeGetProperty(drmmode->fd, koutput->props[i]);
-@@ -1466,6 +1475,8 @@ Bool drmmode_pre_init(ScrnInfoPtr scrn, int fd, int cpp)
+@@ -1466,6 +1475,8 @@
  					       drm_wakeup_handler, drmmode);
  	}
  
@@ -34,7 +34,7 @@ index ba24206..bd6ef4e 100644
  	return TRUE;
  }
  
-@@ -1500,3 +1511,96 @@ void drmmode_closefb(ScrnInfoPtr scrn)
+@@ -1500,3 +1511,101 @@
  	drmModeRmFB(drmmode->fd, drmmode->fb_id);
  	drmmode->fb_id = 0;
  }
@@ -80,6 +80,10 @@ index ba24206..bd6ef4e 100644
 +		return NULL;
 +	}
 +
++
++	if (!CreateScratchPixmapsForScreen(scrn->scrnIndex))
++		return FALSE;
++
 +	pixmap = GetScratchPixmapHeader(pScreen,
 +					fbcon->width, fbcon->height,
 +					fbcon->depth, fbcon->bpp,
@@ -130,12 +134,13 @@ index ba24206..bd6ef4e 100644
 +
 +	(*pScreen->DestroyPixmap)(src);
 +	(*pScreen->DestroyPixmap)(dst);
++	FreeScratchPixmapsForScreen(pScreen->myNum);
 +}
-diff --git a/src/i830.h b/src/i830.h
-index 64acda3..83d1da9 100644
---- a/src/i830.h
-+++ b/src/i830.h
-@@ -423,6 +423,7 @@ typedef struct intel_screen_private {
+Index: xserver-xorg-video-intel/src/i830.h
+===================================================================
+--- xserver-xorg-video-intel.orig/src/i830.h	2010-09-23 16:26:34.385006000 +1000
++++ xserver-xorg-video-intel/src/i830.h	2010-09-23 16:29:20.555006001 +1000
+@@ -423,6 +423,7 @@
  	OptionInfoPtr Options;
  
  	/* Driver phase/state information */
@@ -143,7 +148,7 @@ index 64acda3..83d1da9 100644
  	Bool suspended;
  
  	enum last_3d last_3d;
-@@ -486,6 +487,7 @@ extern int drmmode_get_pipe_from_crtc_id(drm_intel_bufmgr * bufmgr,
+@@ -486,6 +487,7 @@
  					 xf86CrtcPtr crtc);
  extern int drmmode_output_dpms_status(xf86OutputPtr output);
  extern int drmmode_crtc_id(xf86CrtcPtr crtc);
@@ -151,11 +156,11 @@ index 64acda3..83d1da9 100644
  
  extern Bool i830_crtc_on(xf86CrtcPtr crtc);
  extern int i830_crtc_to_pipe(xf86CrtcPtr crtc);
-diff --git a/src/i830_driver.c b/src/i830_driver.c
-index b8e0c0b..a4190ec 100644
---- a/src/i830_driver.c
-+++ b/src/i830_driver.c
-@@ -1093,6 +1093,8 @@ I830ScreenInit(int scrnIndex, ScreenPtr screen, int argc, char **argv)
+Index: xserver-xorg-video-intel/src/i830_driver.c
+===================================================================
+--- xserver-xorg-video-intel.orig/src/i830_driver.c	2010-09-23 16:26:34.165006000 +1000
++++ xserver-xorg-video-intel/src/i830_driver.c	2010-09-23 16:29:20.565006001 +1000
+@@ -1093,6 +1093,8 @@
  	if (IS_I965G(intel))
  		gen4_render_state_init(scrn);
  
@@ -164,7 +169,7 @@ index b8e0c0b..a4190ec 100644
  	miClearVisualTypes();
  	if (!miSetVisualTypes(scrn->depth,
  			      miGetDefaultVisualMask(scrn->depth),
-@@ -1231,6 +1233,7 @@ I830ScreenInit(int scrnIndex, ScreenPtr screen, int argc, char **argv)
+@@ -1231,6 +1233,7 @@
  	if (serverGeneration == 1)
  		xf86ShowUnusedOptions(scrn->scrnIndex, scrn->options);
  
@@ -172,13 +177,10 @@ index b8e0c0b..a4190ec 100644
  	intel->suspended = FALSE;
  
  	return uxa_resources_init(screen);
-@@ -1289,6 +1292,12 @@ static Bool I830EnterVT(int scrnIndex, int flags)
+@@ -1289,6 +1292,9 @@
  
  	i830_set_gem_max_sizes(scrn);
  
-+	if (!CreateScratchPixmapsForScreen(scrn->scrnIndex))
-+		return FALSE;
-+
 +	if (!IS_GEN6(intel))
 +		drmmode_copy_fb(scrn);
 +


Reply to: