xserver 1.14.2RC1
This commit is contained in:
parent
41c893eebb
commit
6ed547ab2c
1
.gitignore
vendored
1
.gitignore
vendored
@ -25,3 +25,4 @@ xorg-server-1.9.1.tar.bz2
|
|||||||
/xorg-server-20130215.tar.xz
|
/xorg-server-20130215.tar.xz
|
||||||
/xorg-server-1.14.0.tar.bz2
|
/xorg-server-1.14.0.tar.bz2
|
||||||
/xorg-server-1.14.1.tar.bz2
|
/xorg-server-1.14.1.tar.bz2
|
||||||
|
/xorg-server-1.14.1.901.tar.bz2
|
||||||
|
@ -1,38 +0,0 @@
|
|||||||
From d8d3c78b6ebdf63836951d2dbd2d3d621ff26da2 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Andreas=20M=C3=BCller?= <schnitzeltony@googlemail.com>
|
|
||||||
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 <schnitzeltony@googlemail.com>
|
|
||||||
Reviewed-by: Mark Kettenis <kettenis@openbsd.org>
|
|
||||||
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
||||||
---
|
|
||||||
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
|
|
||||||
|
|
@ -1,124 +0,0 @@
|
|||||||
From 3aac7a59dc6ef2d8bbf46ba5d37acdf6013e9450 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Daniel Martin <daniel.martin@secunet.com>
|
|
||||||
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 <daniel.martin@secunet.com>
|
|
||||||
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
||||||
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
||||||
---
|
|
||||||
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 <level> 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
|
|
||||||
|
|
@ -1,78 +0,0 @@
|
|||||||
From bd58ebe4cf3b0ce60f87fb26a3715f774dabd349 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Daniel Martin <consume.noise@gmail.com>
|
|
||||||
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 <consume.noise@gmail.com>
|
|
||||||
Reviewed-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
||||||
Signed-off-by: Peter Hutterer <peter.hutterer@who-t.net>
|
|
||||||
---
|
|
||||||
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
|
|
||||||
|
|
@ -1,185 +0,0 @@
|
|||||||
From a7bbd0cbf4b7a7331bb441c9c744c148435b5155 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Dave Airlie <airlied@redhat.com>
|
|
||||||
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 <airlied@gmail.com>
|
|
||||||
---
|
|
||||||
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
|
|
||||||
|
|
@ -1,60 +0,0 @@
|
|||||||
From c760fb0154848d47438908ba8b3da2fffc68a460 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Chris Wilson <chris@chris-wilson.co.uk>
|
|
||||||
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 <keithp@keithp.com>
|
|
||||||
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 <chris@chris-wilson.co.uk>
|
|
||||||
Also-written-by: Maarten Lankhorst <maarten.lankhorst@canonical.com>
|
|
||||||
Reviewed-by: Keith Packard <keithp@keithp.com>
|
|
||||||
Signed-off-by: Keith Packard <keithp@keithp.com>
|
|
||||||
(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
|
|
||||||
|
|
2
sources
2
sources
@ -1 +1 @@
|
|||||||
6a0f1a1639ada4b9da7e9582bc79252a xorg-server-1.14.1.tar.bz2
|
4f231ad29ce44f3718cc1bf3b357dbb4 xorg-server-1.14.1.901.tar.bz2
|
||||||
|
@ -41,8 +41,8 @@
|
|||||||
|
|
||||||
Summary: X.Org X11 X server
|
Summary: X.Org X11 X server
|
||||||
Name: xorg-x11-server
|
Name: xorg-x11-server
|
||||||
Version: 1.14.1
|
Version: 1.14.1.901
|
||||||
Release: 4%{?gitdate:.%{gitdate}}%{dist}
|
Release: 1%{?gitdate:.%{gitdate}}%{dist}
|
||||||
URL: http://www.x.org
|
URL: http://www.x.org
|
||||||
License: MIT
|
License: MIT
|
||||||
Group: User Interface/X
|
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
|
Patch6030: xserver-1.6.99-right-of.patch
|
||||||
#Patch6044: xserver-1.6.99-hush-prerelease-warning.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
|
# upstream submitted
|
||||||
Patch6052: 0001-randr-upstream-set-changed-fixes.patch
|
Patch6052: 0001-randr-upstream-set-changed-fixes.patch
|
||||||
Patch6053: 0001-gpu-screen-upstream-fixes.patch
|
|
||||||
|
|
||||||
# Fix libselinux-triggered build error
|
# Fix libselinux-triggered build error
|
||||||
# RedHat/Fedora-specific patch
|
# 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
|
# mustard: make the default queue length bigger to calm abrt down
|
||||||
Patch7064: 0001-mieq-Bump-default-queue-size-to-512.patch
|
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
|
# upstream in -next for 1.15, e21e183059df5975e7086850d1931edb2c1bbd06
|
||||||
%if !0%{?rhel}
|
%if !0%{?rhel}
|
||||||
Patch7071: 0001-os-use-libunwind-to-generate-backtraces.patch
|
Patch7071: 0001-os-use-libunwind-to-generate-backtraces.patch
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
# backport from master (#965749)
|
|
||||||
Patch7072: 0001-dixstruct.h-fix-segfaults-char-is-unsigned-for-ARM-a.patch
|
|
||||||
|
|
||||||
%global moduledir %{_libdir}/xorg/modules
|
%global moduledir %{_libdir}/xorg/modules
|
||||||
%global drimoduledir %{_libdir}/dri
|
%global drimoduledir %{_libdir}/dri
|
||||||
%global sdkdir %{_includedir}/xorg
|
%global sdkdir %{_includedir}/xorg
|
||||||
@ -595,6 +581,9 @@ rm -rf $RPM_BUILD_ROOT
|
|||||||
%{xserver_source_dir}
|
%{xserver_source_dir}
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Jun 06 2013 Peter Hutterer <peter.hutterer@redhat.com> 1.14.1.901-1
|
||||||
|
- xserver 1.14.2RC1
|
||||||
|
|
||||||
* Tue Jun 04 2013 Peter Hutterer <peter.hutterer@redhat.com> 1.14.1-4
|
* Tue Jun 04 2013 Peter Hutterer <peter.hutterer@redhat.com> 1.14.1-4
|
||||||
- Update quirks for trackballs and the La-VIEW Technology Naos 5000 mouse
|
- Update quirks for trackballs and the La-VIEW Technology Naos 5000 mouse
|
||||||
|
|
||||||
|
@ -1,293 +0,0 @@
|
|||||||
From 5e9e979fae229480d1a4af4f247c0251cb2852f9 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Fedora X Ninjas <x@fedoraproject.org>
|
|
||||||
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
|
|
||||||
|
|
@ -18,7 +18,7 @@ Signed-off-by: Dave Airlie <airlied@gmail.com>
|
|||||||
3 files changed, 47 insertions(+)
|
3 files changed, 47 insertions(+)
|
||||||
|
|
||||||
diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c
|
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
|
--- a/hw/xfree86/common/xf86Init.c
|
||||||
+++ b/hw/xfree86/common/xf86Init.c
|
+++ b/hw/xfree86/common/xf86Init.c
|
||||||
@@ -361,6 +361,16 @@ xf86CreateRootWindow(WindowPtr pWin)
|
@@ -361,6 +361,16 @@ xf86CreateRootWindow(WindowPtr pWin)
|
||||||
@ -48,7 +48,7 @@ index 91ec4c8..142ce95 100644
|
|||||||
if (sigio_blocked)
|
if (sigio_blocked)
|
||||||
OsReleaseSIGIO();
|
OsReleaseSIGIO();
|
||||||
diff --git a/hw/xfree86/common/xf86platformBus.c b/hw/xfree86/common/xf86platformBus.c
|
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
|
--- a/hw/xfree86/common/xf86platformBus.c
|
||||||
+++ b/hw/xfree86/common/xf86platformBus.c
|
+++ b/hw/xfree86/common/xf86platformBus.c
|
||||||
@@ -393,6 +393,8 @@ xf86platformProbeDev(DriverPtr drvp)
|
@@ -393,6 +393,8 @@ xf86platformProbeDev(DriverPtr drvp)
|
||||||
@ -60,8 +60,8 @@ index e368dee..1581413 100644
|
|||||||
int
|
int
|
||||||
xf86platformAddDevice(int index)
|
xf86platformAddDevice(int index)
|
||||||
{
|
{
|
||||||
@@ -465,6 +467,7 @@ xf86platformAddDevice(int index)
|
@@ -457,6 +459,7 @@ xf86platformAddDevice(int index)
|
||||||
}
|
|
||||||
/* attach unbound to 0 protocol screen */
|
/* attach unbound to 0 protocol screen */
|
||||||
AttachUnboundGPU(xf86Screens[0]->pScreen, xf86GPUScreens[i]->pScreen);
|
AttachUnboundGPU(xf86Screens[0]->pScreen, xf86GPUScreens[i]->pScreen);
|
||||||
+ xf86AutoConfigOutputDevice(xf86GPUScreens[i], xf86Screens[0]);
|
+ xf86AutoConfigOutputDevice(xf86GPUScreens[i], xf86Screens[0]);
|
||||||
@ -69,15 +69,14 @@ index e368dee..1581413 100644
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
diff --git a/hw/xfree86/modes/xf86Crtc.c b/hw/xfree86/modes/xf86Crtc.c
|
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
|
--- a/hw/xfree86/modes/xf86Crtc.c
|
||||||
+++ b/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;
|
crtc->x = crtc->y = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
+
|
+
|
||||||
+
|
|
||||||
+void xf86AutoConfigOutputDevice(ScrnInfoPtr pScrn, ScrnInfoPtr master)
|
+void xf86AutoConfigOutputDevice(ScrnInfoPtr pScrn, ScrnInfoPtr master)
|
||||||
+{
|
+{
|
||||||
+ RRProviderPtr master_provider;
|
+ RRProviderPtr master_provider;
|
||||||
@ -108,6 +107,3 @@ index 4a490c6..5453f3a 100644
|
|||||||
+ slave_config->randr_provider->output_source = master_provider;
|
+ slave_config->randr_provider->output_source = master_provider;
|
||||||
+ }
|
+ }
|
||||||
+}
|
+}
|
||||||
--
|
|
||||||
1.8.2
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user