diff --git a/.gitignore b/.gitignore index b41b735..b7a5984 100644 --- a/.gitignore +++ b/.gitignore @@ -25,3 +25,4 @@ xorg-server-1.9.1.tar.bz2 /xorg-server-20130215.tar.xz /xorg-server-1.14.0.tar.bz2 /xorg-server-1.14.1.tar.bz2 +/xorg-server-1.14.1.901.tar.bz2 diff --git a/0001-dixstruct.h-fix-segfaults-char-is-unsigned-for-ARM-a.patch b/0001-dixstruct.h-fix-segfaults-char-is-unsigned-for-ARM-a.patch deleted file mode 100644 index 5a8b391..0000000 --- a/0001-dixstruct.h-fix-segfaults-char-is-unsigned-for-ARM-a.patch +++ /dev/null @@ -1,38 +0,0 @@ -From d8d3c78b6ebdf63836951d2dbd2d3d621ff26da2 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Andreas=20M=C3=BCller?= -Date: Tue, 16 Apr 2013 14:30:43 +0200 -Subject: [PATCH] dixstruct.h: fix segfaults - char is unsigned for ARM and - PowerPC architectures -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -see ARM related bug reports [1-3] - -[1] https://github.com/archlinuxarm/PKGBUILDs/issues/446I -[2] http://www.raspberrypi.org/phpBB3/viewtopic.php?t=38568&p=321673 -[3] http://lists.linuxtogo.org/pipermail/openembedded-core/2013-April/037805.html - -Signed-off-by: Andreas Müller -Reviewed-by: Mark Kettenis -Signed-off-by: Peter Hutterer ---- - include/dixstruct.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/include/dixstruct.h b/include/dixstruct.h -index 6784819..aef822c 100644 ---- a/include/dixstruct.h -+++ b/include/dixstruct.h -@@ -96,7 +96,7 @@ typedef struct _Client { - unsigned int clientGone:1; - unsigned int closeDownMode:2; - unsigned int clientState:2; -- char smart_priority; -+ signed char smart_priority; - short noClientException; /* this client died or needs to be killed */ - int priority; - ReplySwapPtr pSwapReplyFunc; --- -1.8.2.1 - diff --git a/0001-ephyr-Add-resizeable-option.patch b/0001-ephyr-Add-resizeable-option.patch deleted file mode 100644 index fd50885..0000000 --- a/0001-ephyr-Add-resizeable-option.patch +++ /dev/null @@ -1,124 +0,0 @@ -From 3aac7a59dc6ef2d8bbf46ba5d37acdf6013e9450 Mon Sep 17 00:00:00 2001 -From: Daniel Martin -Date: Tue, 11 Dec 2012 17:23:55 +0100 -Subject: [PATCH] ephyr: Add -resizeable option - -With this option passed, ephyr windows can be resized like normal -windows on the fly, without the need of an explicit parent window. - -Signed-off-by: Daniel Martin -Reviewed-by: Peter Hutterer -Signed-off-by: Peter Hutterer ---- - hw/kdrive/ephyr/ephyr.c | 1 + - hw/kdrive/ephyr/ephyrinit.c | 6 ++++++ - hw/kdrive/ephyr/hostx.c | 34 ++++++++++++++++++++++------------ - 3 files changed, 29 insertions(+), 12 deletions(-) - -diff --git a/hw/kdrive/ephyr/ephyr.c b/hw/kdrive/ephyr/ephyr.c -index e6520d0..f32e432 100644 ---- a/hw/kdrive/ephyr/ephyr.c -+++ b/hw/kdrive/ephyr/ephyr.c -@@ -56,6 +56,7 @@ typedef struct _EphyrInputPrivate { - } EphyrKbdPrivate, EphyrPointerPrivate; - - Bool EphyrWantGrayScale = 0; -+Bool EphyrWantResize = 0; - - Bool - ephyrInitialize(KdCardInfo * card, EphyrPriv * priv) -diff --git a/hw/kdrive/ephyr/ephyrinit.c b/hw/kdrive/ephyr/ephyrinit.c -index 5e2eb67..adacac9 100644 ---- a/hw/kdrive/ephyr/ephyrinit.c -+++ b/hw/kdrive/ephyr/ephyrinit.c -@@ -31,6 +31,7 @@ - - extern Window EphyrPreExistingHostWin; - extern Bool EphyrWantGrayScale; -+extern Bool EphyrWantResize; - extern Bool kdHasPointer; - extern Bool kdHasKbd; - -@@ -116,6 +117,7 @@ ddxUseMsg(void) - ErrorF("-host-cursor Re-use exisiting X host server cursor\n"); - ErrorF("-fullscreen Attempt to run Xephyr fullscreen\n"); - ErrorF("-grayscale Simulate 8bit grayscale\n"); -+ ErrorF("-resizeable Make Xephyr windows resizeable\n"); - ErrorF - ("-fakexa Simulate acceleration using software rendering\n"); - ErrorF("-verbosity Set log verbosity level\n"); -@@ -210,6 +212,10 @@ ddxProcessArgument(int argc, char **argv, int i) - EphyrWantGrayScale = 1; - return 1; - } -+ else if (!strcmp(argv[i], "-resizeable")) { -+ EphyrWantResize = 1; -+ return 1; -+ } - else if (!strcmp(argv[i], "-fakexa")) { - ephyrFuncs.initAccel = ephyrDrawInit; - ephyrFuncs.enableAccel = ephyrDrawEnable; -diff --git a/hw/kdrive/ephyr/hostx.c b/hw/kdrive/ephyr/hostx.c -index aed0285..c8642cb 100644 ---- a/hw/kdrive/ephyr/hostx.c -+++ b/hw/kdrive/ephyr/hostx.c -@@ -117,6 +117,8 @@ extern EphyrKeySyms ephyrKeySyms; - - extern int monitorResolution; - -+extern Bool EphyrWantResize; -+ - char *ephyrResName = NULL; - int ephyrResNameFromCmd = 0; - char *ephyrTitle = NULL; -@@ -697,7 +699,7 @@ hostx_screen_init(EphyrScreenInfo screen, - XResizeWindow(HostX.dpy, host_screen->win, width, height); - - /* Ask the WM to keep our size static */ -- if (host_screen->win_pre_existing == None) { -+ if (host_screen->win_pre_existing == None && !EphyrWantResize) { - size_hints = XAllocSizeHints(); - size_hints->max_width = size_hints->min_width = width; - size_hints->max_height = size_hints->min_height = height; -@@ -1012,19 +1014,27 @@ hostx_get_event(EphyrHostXEvent * ev) - - case ConfigureNotify: - { -- struct EphyrHostScreen *host_screen = -- host_screen_from_window(xev.xconfigure.window); -- -- if (host_screen && host_screen->win_pre_existing != None) { -- ev->type = EPHYR_EV_CONFIGURE; -- ev->data.configure.width = xev.xconfigure.width; -- ev->data.configure.height = xev.xconfigure.height; -- ev->data.configure.window = xev.xconfigure.window; -- ev->data.configure.screen = host_screen->mynum; -- return 1; -+ struct EphyrHostScreen *host_screen; -+ -+ /* event compression as for Expose events, cause -+ * we don't want to resize the framebuffer for -+ * every single change */ -+ while (XCheckTypedWindowEvent(HostX.dpy, xev.xconfigure.window, -+ ConfigureNotify, &xev)); -+ host_screen = host_screen_from_window(xev.xconfigure.window); -+ -+ if (!host_screen || -+ (host_screen->win_pre_existing == None && !EphyrWantResize)) { -+ return 0; - } - -- return 0; -+ ev->type = EPHYR_EV_CONFIGURE; -+ ev->data.configure.width = xev.xconfigure.width; -+ ev->data.configure.height = xev.xconfigure.height; -+ ev->data.configure.window = xev.xconfigure.window; -+ ev->data.configure.screen = host_screen->mynum; -+ -+ return 1; - } - default: - break; --- -1.8.1.4 - diff --git a/0001-ephyr-Fix-crash-on-24bpp-host-framebuffer.patch b/0001-ephyr-Fix-crash-on-24bpp-host-framebuffer.patch deleted file mode 100644 index 43297bf..0000000 --- a/0001-ephyr-Fix-crash-on-24bpp-host-framebuffer.patch +++ /dev/null @@ -1,78 +0,0 @@ -From bd58ebe4cf3b0ce60f87fb26a3715f774dabd349 Mon Sep 17 00:00:00 2001 -From: Daniel Martin -Date: Thu, 20 Dec 2012 13:50:17 +0100 -Subject: [PATCH] ephyr: Fix crash on 24bpp host framebuffer - -Use bytes_per_line and bits_per_pixel from the created XImage to fix - https://bugzilla.redhat.com/show_bug.cgi?id=518960 - -Signed-off-by: Daniel Martin -Reviewed-by: Peter Hutterer -Signed-off-by: Peter Hutterer ---- - hw/kdrive/ephyr/ephyr.c | 6 ++---- - hw/kdrive/ephyr/hostx.c | 6 +++++- - hw/kdrive/ephyr/hostx.h | 3 ++- - 3 files changed, 9 insertions(+), 6 deletions(-) - -diff --git a/hw/kdrive/ephyr/ephyr.c b/hw/kdrive/ephyr/ephyr.c -index f32e432..02d4970 100644 ---- a/hw/kdrive/ephyr/ephyr.c -+++ b/hw/kdrive/ephyr/ephyr.c -@@ -238,13 +238,11 @@ ephyrMapFramebuffer(KdScreenInfo * screen) - KdComputePointerMatrix(&m, ephyrRandr, screen->width, screen->height); - KdSetPointerMatrix(&m); - -- priv->bytes_per_line = -- ((screen->width * screen->fb.bitsPerPixel + 31) >> 5) << 2; -- - buffer_height = ephyrBufferHeight(screen); - - priv->base = -- hostx_screen_init(screen, screen->width, screen->height, buffer_height); -+ hostx_screen_init(screen, screen->width, screen->height, buffer_height, -+ &priv->bytes_per_line, &screen->fb.bitsPerPixel); - - if ((scrpriv->randr & RR_Rotate_0) && !(scrpriv->randr & RR_Reflect_All)) { - scrpriv->shadow = FALSE; -diff --git a/hw/kdrive/ephyr/hostx.c b/hw/kdrive/ephyr/hostx.c -index c8642cb..f2b458d 100644 ---- a/hw/kdrive/ephyr/hostx.c -+++ b/hw/kdrive/ephyr/hostx.c -@@ -619,7 +619,8 @@ hostx_set_cmap_entry(unsigned char idx, - */ - void * - hostx_screen_init(EphyrScreenInfo screen, -- int width, int height, int buffer_height) -+ int width, int height, int buffer_height, -+ int *bytes_per_line, int *bits_per_pixel) - { - int bitmap_pad; - Bool shm_success = False; -@@ -696,6 +697,9 @@ hostx_screen_init(EphyrScreenInfo screen, - malloc(host_screen->ximg->bytes_per_line * buffer_height); - } - -+ *bytes_per_line = host_screen->ximg->bytes_per_line; -+ *bits_per_pixel = host_screen->ximg->bits_per_pixel; -+ - XResizeWindow(HostX.dpy, host_screen->win, width, height); - - /* Ask the WM to keep our size static */ -diff --git a/hw/kdrive/ephyr/hostx.h b/hw/kdrive/ephyr/hostx.h -index 31c4053..38b7b37 100644 ---- a/hw/kdrive/ephyr/hostx.h -+++ b/hw/kdrive/ephyr/hostx.h -@@ -193,7 +193,8 @@ hostx_set_cmap_entry(unsigned char idx, - unsigned char r, unsigned char g, unsigned char b); - - void *hostx_screen_init(EphyrScreenInfo screen, -- int width, int height, int buffer_height); -+ int width, int height, int buffer_height, -+ int *bytes_per_line, int *bits_per_pixel); - - void - --- -1.8.1.4 - diff --git a/0001-gpu-screen-upstream-fixes.patch b/0001-gpu-screen-upstream-fixes.patch deleted file mode 100644 index f892cd4..0000000 --- a/0001-gpu-screen-upstream-fixes.patch +++ /dev/null @@ -1,185 +0,0 @@ -From a7bbd0cbf4b7a7331bb441c9c744c148435b5155 Mon Sep 17 00:00:00 2001 -From: Dave Airlie -Date: Wed, 9 Jan 2013 12:51:55 +1000 -Subject: [PATCH] gpu screen: upstream fixes - -dix/gpu: remove asserts for output/offload from same slave -xf86crtc: don't use scrn->display for gpu screens -dix: allow pixmap dirty helper to be used for non-shared pixmaps -gpu: call CreateScreenResources for GPU screens -xfree86: don't enable anything in xf86InitialConfiguration for GPU screens - -Signed-off-by: Dave Airlie ---- - dix/dispatch.c | 2 -- - dix/main.c | 3 +++ - dix/pixmap.c | 2 ++ - fb/fbpixmap.c | 1 + - hw/xfree86/common/xf86platformBus.c | 8 ++++++++ - hw/xfree86/modes/xf86Crtc.c | 34 ++++++++++++++++++++++++---------- - 6 files changed, 38 insertions(+), 12 deletions(-) - -diff --git a/dix/dispatch.c b/dix/dispatch.c -index 8d61735..90b6c7c 100644 ---- a/dix/dispatch.c -+++ b/dix/dispatch.c -@@ -3942,7 +3942,6 @@ void - AttachOutputGPU(ScreenPtr pScreen, ScreenPtr new) - { - assert(new->isGPU); -- assert(!new->current_master); - xorg_list_add(&new->output_head, &pScreen->output_slave_list); - new->current_master = pScreen; - } -@@ -3959,7 +3958,6 @@ void - AttachOffloadGPU(ScreenPtr pScreen, ScreenPtr new) - { - assert(new->isGPU); -- assert(!new->current_master); - xorg_list_add(&new->offload_head, &pScreen->offload_slave_list); - new->current_master = pScreen; - } -diff --git a/dix/main.c b/dix/main.c -index fb935c9..e558d70 100644 ---- a/dix/main.c -+++ b/dix/main.c -@@ -211,6 +211,9 @@ main(int argc, char *argv[], char *envp[]) - ScreenPtr pScreen = screenInfo.gpuscreens[i]; - if (!CreateScratchPixmapsForScreen(pScreen)) - FatalError("failed to create scratch pixmaps"); -+ if (pScreen->CreateScreenResources && -+ !(*pScreen->CreateScreenResources) (pScreen)) -+ FatalError("failed to create screen resources"); - } - - for (i = 0; i < screenInfo.numScreens; i++) { -diff --git a/dix/pixmap.c b/dix/pixmap.c -index 2418812..fe92147 100644 ---- a/dix/pixmap.c -+++ b/dix/pixmap.c -@@ -243,6 +243,8 @@ Bool PixmapSyncDirtyHelper(PixmapDirtyUpdatePtr dirty, RegionPtr dirty_region) - } - - dst = dirty->slave_dst->master_pixmap; -+ if (!dst) -+ dst = dirty->slave_dst; - - RegionTranslate(dirty_region, -dirty->x, -dirty->y); - n = RegionNumRects(dirty_region); -diff --git a/fb/fbpixmap.c b/fb/fbpixmap.c -index fbcdca9..0824b64 100644 ---- a/fb/fbpixmap.c -+++ b/fb/fbpixmap.c -@@ -67,6 +67,7 @@ fbCreatePixmapBpp(ScreenPtr pScreen, int width, int height, int depth, int bpp, - pPixmap->devKind = paddedWidth; - pPixmap->refcnt = 1; - pPixmap->devPrivate.ptr = (pointer) ((char *) pPixmap + base + adjust); -+ pPixmap->master_pixmap = NULL; - - #ifdef FB_DEBUG - pPixmap->devPrivate.ptr = -diff --git a/hw/xfree86/common/xf86platformBus.c b/hw/xfree86/common/xf86platformBus.c -index bcb65ff..e368dee 100644 ---- a/hw/xfree86/common/xf86platformBus.c -+++ b/hw/xfree86/common/xf86platformBus.c -@@ -455,6 +455,14 @@ xf86platformAddDevice(int index) - - CreateScratchPixmapsForScreen(xf86GPUScreens[i]->pScreen); - -+ if (xf86GPUScreens[i]->pScreen->CreateScreenResources && -+ !(*xf86GPUScreens[i]->pScreen->CreateScreenResources) (xf86GPUScreens[i]->pScreen)) { -+ RemoveGPUScreen(xf86GPUScreens[i]->pScreen); -+ xf86DeleteScreen(xf86GPUScreens[i]); -+ xf86UnclaimPlatformSlot(&xf86_platform_devices[index], NULL); -+ xf86NumGPUScreens = old_screens; -+ return -1; -+ } - /* attach unbound to 0 protocol screen */ - AttachUnboundGPU(xf86Screens[0]->pScreen, xf86GPUScreens[i]->pScreen); - -diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c -index 7d55f60..989595f 100644 ---- a/hw/xfree86/modes/xf86Crtc.c -+++ b/hw/xfree86/modes/xf86Crtc.c -@@ -1908,6 +1908,14 @@ xf86CollectEnabledOutputs(ScrnInfoPtr scrn, xf86CrtcConfigPtr config, - Bool any_enabled = FALSE; - int o; - -+ /* -+ * Don't bother enabling outputs on GPU screens: a client needs to attach -+ * it to a source provider before setting a mode that scans out a shared -+ * pixmap. -+ */ -+ if (scrn->is_gpu) -+ return FALSE; -+ - for (o = 0; o < config->num_output; o++) - any_enabled |= enabled[o] = xf86OutputEnabled(config->output[o], TRUE); - -@@ -2360,11 +2368,11 @@ xf86InitialConfiguration(ScrnInfoPtr scrn, Bool canGrow) - config->debug_modes = xf86ReturnOptValBool(config->options, - OPTION_MODEDEBUG, FALSE); - -- if (scrn->display->virtualX) -+ if (scrn->display->virtualX && !scrn->is_gpu) - width = scrn->display->virtualX; - else - width = config->maxWidth; -- if (scrn->display->virtualY) -+ if (scrn->display->virtualY && !scrn->is_gpu) - height = scrn->display->virtualY; - else - height = config->maxHeight; -@@ -2377,9 +2385,11 @@ xf86InitialConfiguration(ScrnInfoPtr scrn, Bool canGrow) - - ret = xf86CollectEnabledOutputs(scrn, config, enabled); - if (ret == FALSE && canGrow) { -- xf86DrvMsg(i, X_WARNING, -- "Unable to find connected outputs - setting %dx%d initial framebuffer\n", -- NO_OUTPUT_DEFAULT_WIDTH, NO_OUTPUT_DEFAULT_HEIGHT); -+ if (!scrn->is_gpu) -+ xf86DrvMsg(i, X_WARNING, -+ "Unable to find connected outputs - setting %dx%d " -+ "initial framebuffer\n", -+ NO_OUTPUT_DEFAULT_WIDTH, NO_OUTPUT_DEFAULT_HEIGHT); - have_outputs = FALSE; - } - else { -@@ -2428,8 +2438,10 @@ xf86InitialConfiguration(ScrnInfoPtr scrn, Bool canGrow) - - /* XXX override xf86 common frame computation code */ - -- scrn->display->frameX0 = 0; -- scrn->display->frameY0 = 0; -+ if (!scrn->is_gpu) { -+ scrn->display->frameX0 = 0; -+ scrn->display->frameY0 = 0; -+ } - - for (c = 0; c < config->num_crtc; c++) { - xf86CrtcPtr crtc = config->crtc[c]; -@@ -2477,7 +2489,7 @@ xf86InitialConfiguration(ScrnInfoPtr scrn, Bool canGrow) - } - } - -- if (scrn->display->virtualX == 0) { -+ if (scrn->display->virtualX == 0 || scrn->is_gpu) { - /* - * Expand virtual size to cover the current config and potential mode - * switches, if the driver can't enlarge the screen later. -@@ -2492,8 +2504,10 @@ xf86InitialConfiguration(ScrnInfoPtr scrn, Bool canGrow) - } - } - -- scrn->display->virtualX = width; -- scrn->display->virtualY = height; -+ if (!scrn->is_gpu) { -+ scrn->display->virtualX = width; -+ scrn->display->virtualY = height; -+ } - } - - if (width > scrn->virtualX) --- -1.8.2 - diff --git a/0001-hw-xfree86-Only-report-SetDesiredModes-failed-if-at-.patch b/0001-hw-xfree86-Only-report-SetDesiredModes-failed-if-at-.patch deleted file mode 100644 index 02fd152..0000000 --- a/0001-hw-xfree86-Only-report-SetDesiredModes-failed-if-at-.patch +++ /dev/null @@ -1,60 +0,0 @@ -From c760fb0154848d47438908ba8b3da2fffc68a460 Mon Sep 17 00:00:00 2001 -From: Chris Wilson -Date: Thu, 10 Jan 2013 03:26:33 +0000 -Subject: [PATCH] hw/xfree86: Only report SetDesiredModes() failed if at least - one modeset fails - -commit 6703a7c7cf1a349c137e247a0c8eb462ff7b07be -Author: Keith Packard -Date: Tue Jan 8 20:24:32 2013 -0800 - - hw/xfree86: Require only one working CRTC to start the server. - -changed the logic to try to set the mode on all connected outputs rather -than abort upon the first failure. The return error code was then -tweaked such that it reported success if it set a mode on any crtc. -However, this confuses the headless case where we never enable any crtcs -and also, importantly, never fail to set a crtc. - -Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=59190 - -Signed-off-by: Chris Wilson -Also-written-by: Maarten Lankhorst -Reviewed-by: Keith Packard -Signed-off-by: Keith Packard -(cherry picked from commit 451ba4bd41b82acd4aec6236ba121e00cfeb311b) ---- - hw/xfree86/modes/xf86Crtc.c | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c -index f9ae465..7d55f60 100644 ---- a/hw/xfree86/modes/xf86Crtc.c -+++ b/hw/xfree86/modes/xf86Crtc.c -@@ -2598,8 +2598,8 @@ xf86SetDesiredModes(ScrnInfoPtr scrn) - { - xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(scrn); - xf86CrtcPtr crtc = config->crtc[0]; -+ int enabled = 0, failed = 0; - int c; -- int enabled = 0; - - /* A driver with this hook will take care of this */ - if (!crtc->funcs->set_mode_major) { -@@ -2659,11 +2659,12 @@ xf86SetDesiredModes(ScrnInfoPtr scrn) - if (config->output[o]->crtc == crtc) - config->output[o]->crtc = NULL; - crtc->enabled = FALSE; -+ ++failed; - } - } - - xf86DisableUnusedFunctions(scrn); -- return enabled != 0; -+ return enabled != 0 || failed == 0; - } - - /** --- -1.8.2 - diff --git a/sources b/sources index e1487d4..50ce7a2 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -6a0f1a1639ada4b9da7e9582bc79252a xorg-server-1.14.1.tar.bz2 +4f231ad29ce44f3718cc1bf3b357dbb4 xorg-server-1.14.1.901.tar.bz2 diff --git a/xorg-x11-server.spec b/xorg-x11-server.spec index 45e8171..5d27afb 100644 --- a/xorg-x11-server.spec +++ b/xorg-x11-server.spec @@ -41,8 +41,8 @@ Summary: X.Org X11 X server Name: xorg-x11-server -Version: 1.14.1 -Release: 4%{?gitdate:.%{gitdate}}%{dist} +Version: 1.14.1.901 +Release: 1%{?gitdate:.%{gitdate}}%{dist} URL: http://www.x.org License: MIT Group: User Interface/X @@ -84,13 +84,8 @@ Patch6011: xserver-1.6.0-less-acpi-brokenness.patch Patch6030: xserver-1.6.99-right-of.patch #Patch6044: xserver-1.6.99-hush-prerelease-warning.patch -# upstream backports - sent to stable -Patch6050: xserver-1.14.0-fix-gpu-hotplug-vt-switch.patch -Patch6051: 0001-hw-xfree86-Only-report-SetDesiredModes-failed-if-at-.patch - # upstream submitted Patch6052: 0001-randr-upstream-set-changed-fixes.patch -Patch6053: 0001-gpu-screen-upstream-fixes.patch # Fix libselinux-triggered build error # RedHat/Fedora-specific patch @@ -109,20 +104,11 @@ Patch7052: 0001-xf86-return-NULL-for-compat-output-if-no-outputs.patch # mustard: make the default queue length bigger to calm abrt down Patch7064: 0001-mieq-Bump-default-queue-size-to-512.patch -# Bug 962572 - X-sandboxes are not resizeable -# enabled by default until sandbox -X uses the option -Patch7065: 0001-ephyr-Add-resizeable-option.patch -# Bug 518960 - Xephyr crashes in 24bpp -Patch7067: 0001-ephyr-Fix-crash-on-24bpp-host-framebuffer.patch - # upstream in -next for 1.15, e21e183059df5975e7086850d1931edb2c1bbd06 %if !0%{?rhel} Patch7071: 0001-os-use-libunwind-to-generate-backtraces.patch %endif -# backport from master (#965749) -Patch7072: 0001-dixstruct.h-fix-segfaults-char-is-unsigned-for-ARM-a.patch - %global moduledir %{_libdir}/xorg/modules %global drimoduledir %{_libdir}/dri %global sdkdir %{_includedir}/xorg @@ -595,6 +581,9 @@ rm -rf $RPM_BUILD_ROOT %{xserver_source_dir} %changelog +* Thu Jun 06 2013 Peter Hutterer 1.14.1.901-1 +- xserver 1.14.2RC1 + * Tue Jun 04 2013 Peter Hutterer 1.14.1-4 - Update quirks for trackballs and the La-VIEW Technology Naos 5000 mouse diff --git a/xserver-1.14.0-fix-gpu-hotplug-vt-switch.patch b/xserver-1.14.0-fix-gpu-hotplug-vt-switch.patch deleted file mode 100644 index c467208..0000000 --- a/xserver-1.14.0-fix-gpu-hotplug-vt-switch.patch +++ /dev/null @@ -1,293 +0,0 @@ -From 5e9e979fae229480d1a4af4f247c0251cb2852f9 Mon Sep 17 00:00:00 2001 -From: Fedora X Ninjas -Date: Fri, 12 Apr 2013 10:16:21 +1000 -Subject: [PATCH] fix GPU hotplugging while VT switched. - -Backports 3 patches from upstream into one. ---- - hw/xfree86/common/xf86.h | 1 + - hw/xfree86/common/xf86Events.c | 15 +++++++++- - hw/xfree86/common/xf86Init.c | 2 +- - hw/xfree86/common/xf86Xinput.c | 2 +- - hw/xfree86/common/xf86platformBus.c | 19 +++++++++++++ - hw/xfree86/common/xf86platformBus.h | 4 +++ - hw/xfree86/os-support/linux/lnx_platform.c | 45 ++++++++++++++++++++++++++---- - hw/xfree86/os-support/solaris/sun_init.c | 2 +- - hw/xfree86/os-support/xf86_OSproc.h | 3 ++ - include/hotplug.h | 1 + - 10 files changed, 85 insertions(+), 9 deletions(-) - -diff --git a/hw/xfree86/common/xf86.h b/hw/xfree86/common/xf86.h -index 1514c26..828d958 100644 ---- a/hw/xfree86/common/xf86.h -+++ b/hw/xfree86/common/xf86.h -@@ -243,6 +243,7 @@ extern _X_EXPORT void xf86InterceptSigIll(void (*sigillhandler) (void)); - extern _X_EXPORT Bool xf86EnableVTSwitch(Bool new); - extern _X_EXPORT void xf86ProcessActionEvent(ActionEvent action, void *arg); - extern _X_EXPORT void xf86PrintBacktrace(void); -+extern _X_EXPORT Bool xf86VTOwner(void); - - /* xf86Helper.c */ - -diff --git a/hw/xfree86/common/xf86Events.c b/hw/xfree86/common/xf86Events.c -index d92174e..7a35250 100644 ---- a/hw/xfree86/common/xf86Events.c -+++ b/hw/xfree86/common/xf86Events.c -@@ -84,6 +84,7 @@ - #include "dpmsproc.h" - #endif - -+#include "xf86platformBus.h" - /* - * This is a toggling variable: - * FALSE = No VT switching keys have been pressed last time around -@@ -428,7 +429,7 @@ xf86VTSwitch(void) - * Since all screens are currently all in the same state it is sufficient - * check the first. This might change in future. - */ -- if (xf86Screens[0]->vtSema) { -+ if (xf86VTOwner()) { - - DebugF("xf86VTSwitch: Leaving, xf86Exiting is %s\n", - BOOLTOSTRING((dispatchException & DE_TERMINATE) ? TRUE : FALSE)); -@@ -561,6 +562,9 @@ xf86VTSwitch(void) - for (ih = InputHandlers; ih; ih = ih->next) - xf86EnableInputHandler(ih); - -+ /* check for any new output devices */ -+ xf86platformVTProbe(); -+ - OsReleaseSIGIO(); - } - } -@@ -769,3 +773,12 @@ DDXRingBell(int volume, int pitch, int duration) - { - xf86OSRingBell(volume, pitch, duration); - } -+ -+Bool -+xf86VTOwner(void) -+{ -+ /* at system startup xf86Screens[0] won't be set - but we will own the VT */ -+ if (xf86NumScreens == 0) -+ return TRUE; -+ return xf86Screens[0]->vtSema; -+} -diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c -index a34d7c1..142ce95 100644 ---- a/hw/xfree86/common/xf86Init.c -+++ b/hw/xfree86/common/xf86Init.c -@@ -829,7 +829,7 @@ InitOutput(ScreenInfo * pScreenInfo, int argc, char **argv) - if (serverGeneration != 1) { - xf86Resetting = TRUE; - /* All screens are in the same state, so just check the first */ -- if (!xf86Screens[0]->vtSema) { -+ if (!xf86VTOwner()) { - #ifdef HAS_USL_VTS - ioctl(xf86Info.consoleFd, VT_RELDISP, VT_ACKACQ); - #endif -diff --git a/hw/xfree86/common/xf86Xinput.c b/hw/xfree86/common/xf86Xinput.c -index bee407b..26c03c6 100644 ---- a/hw/xfree86/common/xf86Xinput.c -+++ b/hw/xfree86/common/xf86Xinput.c -@@ -870,7 +870,7 @@ xf86NewInputDevice(InputInfoPtr pInfo, DeviceIntPtr *pdev, BOOL enable) - } - - /* Enable it if it's properly initialised and we're currently in the VT */ -- if (enable && dev->inited && dev->startup && xf86Screens[0]->vtSema) { -+ if (enable && dev->inited && dev->startup && xf86VTOwner()) { - OsBlockSignals(); - EnableDevice(dev, TRUE); - if (!dev->enabled) { -diff --git a/hw/xfree86/common/xf86platformBus.c b/hw/xfree86/common/xf86platformBus.c -index 4ccb005..0b0f846 100644 ---- a/hw/xfree86/common/xf86platformBus.c -+++ b/hw/xfree86/common/xf86platformBus.c -@@ -114,6 +114,11 @@ xf86_get_platform_device_attrib(struct xf86_platform_device *device, int attrib_ - return NULL; - } - -+Bool -+xf86_get_platform_device_unowned(int index) -+{ -+ return xf86_platform_devices[index].attribs->unowned; -+} - - /* - * xf86IsPrimaryPlatform() -- return TRUE if primary device -@@ -502,4 +507,18 @@ xf86platformRemoveDevice(int index) - out: - return; - } -+ -+/* called on return from VT switch to find any new devices */ -+void xf86platformVTProbe(void) -+{ -+ int i; -+ -+ for (i = 0; i < xf86_num_platform_devices; i++) { -+ if (xf86_platform_devices[i].attribs->unowned == FALSE) -+ continue; -+ -+ xf86_platform_devices[i].attribs->unowned = FALSE; -+ xf86PlatformReprobeDevice(i, xf86_platform_devices[i].attribs); -+ } -+} - #endif -diff --git a/hw/xfree86/common/xf86platformBus.h b/hw/xfree86/common/xf86platformBus.h -index 49afc24..4e17578 100644 ---- a/hw/xfree86/common/xf86platformBus.h -+++ b/hw/xfree86/common/xf86platformBus.h -@@ -46,6 +46,8 @@ extern int - xf86_remove_platform_device(int dev_index); - extern Bool - xf86_add_platform_device_attrib(int index, int attrib_id, char *attrib_str); -+extern Bool -+xf86_get_platform_device_unowned(int index); - - extern int - xf86platformAddDevice(int index); -@@ -59,6 +61,8 @@ xf86PlatformDeviceCheckBusID(struct xf86_platform_device *device, const char *bu - - extern _X_EXPORT int - xf86PlatformMatchDriver(char *matches[], int nmatches); -+ -+extern void xf86platformVTProbe(void); - #endif - - #endif -diff --git a/hw/xfree86/os-support/linux/lnx_platform.c b/hw/xfree86/os-support/linux/lnx_platform.c -index 76f5583..21768ee 100644 ---- a/hw/xfree86/os-support/linux/lnx_platform.c -+++ b/hw/xfree86/os-support/linux/lnx_platform.c -@@ -18,7 +18,7 @@ - #include "hotplug.h" - - static Bool --get_drm_info(struct OdevAttributes *attribs, char *path) -+get_drm_info(struct OdevAttributes *attribs, char *path, int delayed_index) - { - drmSetVersion sv; - char *buf; -@@ -37,10 +37,14 @@ get_drm_info(struct OdevAttributes *attribs, char *path) - return FALSE; - } - -- xf86_add_platform_device(attribs); -+ /* for a delayed probe we've already added the device */ -+ if (delayed_index == -1) { -+ xf86_add_platform_device(attribs); -+ delayed_index = xf86_num_platform_devices - 1; -+ } - - buf = drmGetBusid(fd); -- xf86_add_platform_device_attrib(xf86_num_platform_devices - 1, -+ xf86_add_platform_device_attrib(delayed_index, - ODEV_ATTRIB_BUSID, buf); - drmFreeBusid(buf); - close(fd); -@@ -89,6 +93,23 @@ xf86PlatformDeviceCheckBusID(struct xf86_platform_device *device, const char *bu - } - - void -+xf86PlatformReprobeDevice(int index, struct OdevAttributes *attribs) -+{ -+ Bool ret; -+ char *dpath; -+ dpath = xf86_get_platform_attrib(index, ODEV_ATTRIB_PATH); -+ -+ ret = get_drm_info(attribs, dpath, index); -+ if (ret == FALSE) { -+ xf86_remove_platform_device(index); -+ return; -+ } -+ ret = xf86platformAddDevice(index); -+ if (ret == -1) -+ xf86_remove_platform_device(index); -+} -+ -+void - xf86PlatformDeviceProbe(struct OdevAttributes *attribs) - { - struct OdevAttribute *attrib; -@@ -119,7 +140,15 @@ xf86PlatformDeviceProbe(struct OdevAttributes *attribs) - LogMessage(X_INFO, "config/udev: Adding drm device (%s)\n", - path); - -- ret = get_drm_info(attribs, path); -+ if (!xf86VTOwner()) { -+ /* if we don't currently own the VT then don't probe the device, -+ just mark it as unowned for later use */ -+ attribs->unowned = TRUE; -+ xf86_add_platform_device(attribs); -+ return; -+ } -+ -+ ret = get_drm_info(attribs, path, -1); - if (ret == FALSE) - goto out_free; - -@@ -138,6 +167,9 @@ void NewGPUDeviceRequest(struct OdevAttributes *attribs) - if (old_num == xf86_num_platform_devices) - return; - -+ if (xf86_get_platform_device_unowned(xf86_num_platform_devices - 1) == TRUE) -+ return; -+ - ret = xf86platformAddDevice(xf86_num_platform_devices-1); - if (ret == -1) - xf86_remove_platform_device(xf86_num_platform_devices-1); -@@ -171,7 +203,10 @@ void DeleteGPUDeviceRequest(struct OdevAttributes *attribs) - - ErrorF("xf86: remove device %d %s\n", index, syspath); - -- xf86platformRemoveDevice(index); -+ if (xf86_get_platform_device_unowned(index) == TRUE) -+ xf86_remove_platform_device(index); -+ else -+ xf86platformRemoveDevice(index); - out: - config_odev_free_attribute_list(attribs); - } -diff --git a/hw/xfree86/os-support/solaris/sun_init.c b/hw/xfree86/os-support/solaris/sun_init.c -index 4b75a98..68527a5 100644 ---- a/hw/xfree86/os-support/solaris/sun_init.c -+++ b/hw/xfree86/os-support/solaris/sun_init.c -@@ -274,7 +274,7 @@ xf86OpenConsole(void) - * this is to make sure we don't continue until the activate - * signal is received. - */ -- if (!xf86Screens[0]->vtSema) -+ if (!xf86VTOwner()) - sleep(5); - } - #endif /* HAS_USL_VTS */ -diff --git a/hw/xfree86/os-support/xf86_OSproc.h b/hw/xfree86/os-support/xf86_OSproc.h -index ea2b16e..6be5946 100644 ---- a/hw/xfree86/os-support/xf86_OSproc.h -+++ b/hw/xfree86/os-support/xf86_OSproc.h -@@ -223,6 +223,9 @@ extern _X_EXPORT void xf86InitVidMem(void); - #include "hotplug.h" - void - xf86PlatformDeviceProbe(struct OdevAttributes *attribs); -+ -+void -+xf86PlatformReprobeDevice(int index, struct OdevAttributes *attribs); - #endif - - _XFUNCPROTOEND -diff --git a/include/hotplug.h b/include/hotplug.h -index 2a95b45..29a22c4 100644 ---- a/include/hotplug.h -+++ b/include/hotplug.h -@@ -40,6 +40,7 @@ struct OdevAttribute { - - struct OdevAttributes { - struct xorg_list list; -+ Bool unowned; - }; - - struct OdevAttributes * --- -1.8.2 - diff --git a/xserver-autobind-hotplug.patch b/xserver-autobind-hotplug.patch index 1d99084..a55a8fc 100644 --- a/xserver-autobind-hotplug.patch +++ b/xserver-autobind-hotplug.patch @@ -18,14 +18,14 @@ Signed-off-by: Dave Airlie 3 files changed, 47 insertions(+) diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c -index 91ec4c8..142ce95 100644 +index 91ec4c8..f95eec5 100644 --- a/hw/xfree86/common/xf86Init.c +++ b/hw/xfree86/common/xf86Init.c @@ -361,6 +361,16 @@ xf86CreateRootWindow(WindowPtr pWin) return ret; } -+extern void xf86AutoConfigOutputDevice(ScrnInfoPtr pScrn, ScrnInfoPtr master); ++extern void xf86AutoConfigOutputDevice(ScrnInfoPtr pScrn, ScrnInfoPtr master); +static void +xf86AutoConfigOutputDevices(void) +{ @@ -48,7 +48,7 @@ index 91ec4c8..142ce95 100644 if (sigio_blocked) OsReleaseSIGIO(); diff --git a/hw/xfree86/common/xf86platformBus.c b/hw/xfree86/common/xf86platformBus.c -index e368dee..1581413 100644 +index bcb65ff..0b0f846 100644 --- a/hw/xfree86/common/xf86platformBus.c +++ b/hw/xfree86/common/xf86platformBus.c @@ -393,6 +393,8 @@ xf86platformProbeDev(DriverPtr drvp) @@ -60,8 +60,8 @@ index e368dee..1581413 100644 int xf86platformAddDevice(int index) { -@@ -465,6 +467,7 @@ xf86platformAddDevice(int index) - } +@@ -457,6 +459,7 @@ xf86platformAddDevice(int index) + /* attach unbound to 0 protocol screen */ AttachUnboundGPU(xf86Screens[0]->pScreen, xf86GPUScreens[i]->pScreen); + xf86AutoConfigOutputDevice(xf86GPUScreens[i], xf86Screens[0]); @@ -69,15 +69,14 @@ index e368dee..1581413 100644 return 0; } diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c -index 4a490c6..5453f3a 100644 +index 1790137..b01da8d 100644 --- a/hw/xfree86/modes/xf86Crtc.c +++ b/hw/xfree86/modes/xf86Crtc.c -@@ -3358,3 +3358,35 @@ xf86DetachAllCrtc(ScrnInfoPtr scrn) +@@ -3328,3 +3328,34 @@ xf86DetachAllCrtc(ScrnInfoPtr scrn) crtc->x = crtc->y = 0; } } + -+ +void xf86AutoConfigOutputDevice(ScrnInfoPtr pScrn, ScrnInfoPtr master) +{ + RRProviderPtr master_provider; @@ -93,7 +92,7 @@ index 4a490c6..5453f3a 100644 + if ((master->capabilities & RR_Capability_SinkOffload) && + pScrn->capabilities & RR_Capability_SourceOffload) { + /* source offload */ -+ ++ + DetachUnboundGPU(pScrn->pScreen); + unbound = TRUE; + AttachOffloadGPU(master->pScreen, pScrn->pScreen); @@ -108,6 +107,3 @@ index 4a490c6..5453f3a 100644 + slave_config->randr_provider->output_source = master_provider; + } +} --- -1.8.2 -