diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..8a83cf4 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/xorg-server-1.19.3.tar.bz2 diff --git a/.xorg-x11-server.metadata b/.xorg-x11-server.metadata new file mode 100644 index 0000000..72833ff --- /dev/null +++ b/.xorg-x11-server.metadata @@ -0,0 +1 @@ +77f580ffa22a8bbcc3536e74e19114e446417a9c SOURCES/xorg-server-1.19.3.tar.bz2 diff --git a/README.md b/README.md deleted file mode 100644 index 0e7897f..0000000 --- a/README.md +++ /dev/null @@ -1,5 +0,0 @@ -The master branch has no content - -Look at the c7 branch if you are working with CentOS-7, or the c4/c5/c6 branch for CentOS-4, 5 or 6 - -If you find this file in a distro specific branch, it means that no content has been checked in yet diff --git a/SOURCES/0001-Always-install-vbe-and-int10-sdk-headers.patch b/SOURCES/0001-Always-install-vbe-and-int10-sdk-headers.patch new file mode 100644 index 0000000..7dd249c --- /dev/null +++ b/SOURCES/0001-Always-install-vbe-and-int10-sdk-headers.patch @@ -0,0 +1,37 @@ +From fc306295751178802405e0faa3f2e4e40cd913f0 Mon Sep 17 00:00:00 2001 +From: Adam Jackson +Date: Wed, 15 Aug 2012 12:35:21 -0400 +Subject: [PATCH] Always install vbe and int10 sdk headers + +Signed-off-by: Adam Jackson +--- + hw/xfree86/Makefile.am | 12 ++---------- + 1 file changed, 2 insertions(+), 10 deletions(-) + +diff --git a/hw/xfree86/Makefile.am b/hw/xfree86/Makefile.am +index 27f2cc6..f9a078f 100644 +--- a/hw/xfree86/Makefile.am ++++ b/hw/xfree86/Makefile.am +@@ -26,17 +26,9 @@ if VGAHW + VGAHW_SUBDIR = vgahw + endif + +-if VBE +-VBE_SUBDIR = vbe +-endif +- +-if INT10MODULE +-INT10_SUBDIR = int10 +-endif +- +-SUBDIRS = common ddc x86emu $(INT10_SUBDIR) os-support parser \ ++SUBDIRS = common ddc x86emu int10 os-support parser \ + ramdac $(VGAHW_SUBDIR) loader modes $(DRI_SUBDIR) \ +- $(DRI2_SUBDIR) . $(VBE_SUBDIR) i2c dixmods \ ++ $(DRI2_SUBDIR) . vbe i2c dixmods \ + fbdevhw shadowfb exa $(XF86UTILS_SUBDIR) doc man \ + $(GLAMOR_EGL_SUBDIR) drivers + +-- +2.1.0 + diff --git a/SOURCES/0001-Enable-PAM-support.patch b/SOURCES/0001-Enable-PAM-support.patch new file mode 100644 index 0000000..c28d3dd --- /dev/null +++ b/SOURCES/0001-Enable-PAM-support.patch @@ -0,0 +1,52 @@ +From 62b9fa5973d71f3525af29f04f03e05bbaf196e6 Mon Sep 17 00:00:00 2001 +From: Adam Jackson +Date: Mon, 27 Jun 2011 12:42:28 -0400 +Subject: [PATCH 05/15] Enable PAM support + +Signed-off-by: Adam Jackson +--- + configure.ac | 2 ++ + hw/dmx/Makefile.am | 1 + + os/utils.c | 1 + + 3 files changed, 4 insertions(+), 0 deletions(-) + +diff --git a/configure.ac b/configure.ac +index 3808542..32571e2 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -307,6 +307,8 @@ AC_CHECK_HEADER([execinfo.h],[ + ])] + ) + ++SYS_LIBS="-lpam_misc -lpam" ++ + dnl --------------------------------------------------------------------------- + dnl Bus options and CPU capabilities. Replaces logic in + dnl hw/xfree86/os-support/bus/Makefile.am, among others. +diff --git a/hw/dmx/Makefile.am b/hw/dmx/Makefile.am +index fb727e6..ff76806 100644 +--- a/hw/dmx/Makefile.am ++++ b/hw/dmx/Makefile.am +@@ -78,6 +78,7 @@ Xdmx_SOURCES = dmx.c \ + XDMX_LIBS = \ + $(GLX_LIBS) \ + @XDMX_LIBS@ \ ++ -lpam_misc -lpam \ + input/libdmxinput.a \ + config/libdmxconfig.a + +diff --git a/os/utils.c b/os/utils.c +index d902523..86730c5 100644 +--- a/os/utils.c ++++ b/os/utils.c +@@ -1838,6 +1838,7 @@ CheckUserParameters(int argc, char **argv, char **envp) + * usually only done for setuid servers (uid != euid). + */ + ++#define USE_PAM 1 + #ifdef USE_PAM + #include + #include +-- +1.7.7.6 + diff --git a/SOURCES/0001-dix-Fix-GrabPointer-to-not-wrongly-succeed-on-redire.patch b/SOURCES/0001-dix-Fix-GrabPointer-to-not-wrongly-succeed-on-redire.patch new file mode 100644 index 0000000..beafa48 --- /dev/null +++ b/SOURCES/0001-dix-Fix-GrabPointer-to-not-wrongly-succeed-on-redire.patch @@ -0,0 +1,71 @@ +From 19573148ff40b6b4eb335e92cb97ac97ec191450 Mon Sep 17 00:00:00 2001 +From: Adam Jackson +Date: Tue, 12 Aug 2014 13:32:07 -0400 +Subject: [PATCH] dix: Fix GrabPointer to not wrongly succeed on redirected + windows + +Not correct, but correcter. See upstream discussion for more details, +hopefully this will get resolved properly in 1.16. + +Signed-off-by: Adam Jackson +--- + dix/events.c | 33 ++++++++++++++++++++++++++++++--- + 1 file changed, 30 insertions(+), 3 deletions(-) + +diff --git a/dix/events.c b/dix/events.c +index b8c67fd..9300a3c 100644 +--- a/dix/events.c ++++ b/dix/events.c +@@ -3616,10 +3616,38 @@ ProcWarpPointer(ClientPtr client) + return Success; + } + ++/* ++ * this is better but still wrong. upstream discussion: ++ * http://lists.freedesktop.org/archives/xorg-devel/2014-July/043374.html ++ * ++ * in the meantime all we're doing is amending the redirected window path ++ * to check whether borderClip (total window area) overlaps the root window ++ * space at all. ++ * ++ * note that the redirect path doesn't need to account for panoramix' ++ * rewrite of root window geometry, because root windows can't be ++ * redirected. ++ */ ++static Bool ++WindowIsConfineToAble(WindowPtr pWin) ++{ ++ if (pWin->redirectDraw == RedirectDrawNone) { ++ if (RegionNotEmpty(&pWin->borderSize)) ++ return TRUE; ++ } else { ++ WindowPtr root = pWin->drawable.pScreen->root; ++ if (rgnOUT != RegionContainsRect(&pWin->borderClip, ++ RegionExtents(&root->winSize))) ++ return TRUE; ++ } ++ ++ return FALSE; ++} ++ + static Bool + BorderSizeNotEmpty(DeviceIntPtr pDev, WindowPtr pWin) + { +- if (RegionNotEmpty(&pWin->borderSize)) ++ if (WindowIsConfineToAble(pWin)) + return TRUE; + + #ifdef PANORAMIX +@@ -3627,8 +3655,7 @@ BorderSizeNotEmpty(DeviceIntPtr pDev, WindowPtr pWin) + int i; + + FOR_NSCREENS_FORWARD_SKIP(i) { +- if (RegionNotEmpty +- (&pDev->spriteInfo->sprite->windows[i]->borderSize)) ++ if (WindowIsConfineToAble(pDev->spriteInfo->sprite->windows[i])) + return TRUE; + } + } +-- +1.9.3 + diff --git a/SOURCES/0001-dix-Remove-clients-from-input-and-output-ready-queue.patch b/SOURCES/0001-dix-Remove-clients-from-input-and-output-ready-queue.patch new file mode 100644 index 0000000..c4a4ef2 --- /dev/null +++ b/SOURCES/0001-dix-Remove-clients-from-input-and-output-ready-queue.patch @@ -0,0 +1,47 @@ +From d9e23ea4228575344e3b4c0443cecc5eb75356e4 Mon Sep 17 00:00:00 2001 +From: Keith Packard +Date: Wed, 10 May 2017 21:50:45 -0700 +Subject: [PATCH xserver] dix: Remove clients from input and output ready + queues after closing +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +Delay removing the client from these two queues until all potential +I/O has completed in case we mark the client as ready for reading or +with pending output during the close operation. + +Bugzilla: https://bugs.freedesktop.org/100957 +Signed-off-by: Keith Packard +Tested-by: Nick Sarnie +Reviewed-by: Michel Dänzer +--- + dix/dispatch.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/dix/dispatch.c b/dix/dispatch.c +index a2df1e0e6..8b371b678 100644 +--- a/dix/dispatch.c ++++ b/dix/dispatch.c +@@ -3414,7 +3414,6 @@ CloseDownClient(ClientPtr client) + if (grabState != GrabNone && grabClient == client) { + UngrabServer(client); + } +- mark_client_not_ready(client); + BITCLEAR(grabWaiters, client->index); + DeleteClientFromAnySelections(client); + ReleaseActiveGrabs(client); +@@ -3443,8 +3442,9 @@ CloseDownClient(ClientPtr client) + if (ClientIsAsleep(client)) + ClientSignal(client); + ProcessWorkQueueZombies(); +- output_pending_clear(client); + CloseDownConnection(client); ++ output_pending_clear(client); ++ mark_client_not_ready(client); + + /* If the client made it to the Running stage, nClients has + * been incremented on its behalf, so we need to decrement it +-- +2.13.0 + diff --git a/SOURCES/0001-handle-NullCursor-to-avoid-crash.patch b/SOURCES/0001-handle-NullCursor-to-avoid-crash.patch new file mode 100644 index 0000000..64f343e --- /dev/null +++ b/SOURCES/0001-handle-NullCursor-to-avoid-crash.patch @@ -0,0 +1,25 @@ +From 54564059c2d4c841a80c65f6a730e36412ee451e Mon Sep 17 00:00:00 2001 +From: rpm-build +Date: Fri, 9 Jun 2017 13:35:47 +1000 +Subject: [PATCH] handle NullCursor to avoid crash + +--- + hw/xfree86/drivers/modesetting/drmmode_display.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/hw/xfree86/drivers/modesetting/drmmode_display.c b/hw/xfree86/drivers/modesetting/drmmode_display.c +index 6e755e9..431f63d 100644 +--- a/hw/xfree86/drivers/modesetting/drmmode_display.c ++++ b/hw/xfree86/drivers/modesetting/drmmode_display.c +@@ -760,6 +760,8 @@ drmmode_set_cursor(xf86CrtcPtr crtc) + + if (!drmmode_crtc->set_cursor2_failed) { + CursorPtr cursor = xf86CurrentCursor(crtc->scrn->pScreen); ++ if (cursor == NullCursor) ++ return TRUE; + + ret = + drmModeSetCursor2(drmmode->fd, drmmode_crtc->mode_crtc->crtc_id, +-- +2.9.4 + diff --git a/SOURCES/0001-link-with-z-now.patch b/SOURCES/0001-link-with-z-now.patch new file mode 100644 index 0000000..bbc09d5 --- /dev/null +++ b/SOURCES/0001-link-with-z-now.patch @@ -0,0 +1,26 @@ +From c24c9c3ac032c17dd63120d0adba1ef32edcf8dd Mon Sep 17 00:00:00 2001 +From: Adam Jackson +Date: Wed, 15 Apr 2015 12:44:49 -0400 +Subject: [PATCH] link with -z now + +Signed-off-by: Adam Jackson +--- + hw/xfree86/Makefile.am | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/hw/xfree86/Makefile.am b/hw/xfree86/Makefile.am +index 27f2cc6..116eeb2 100644 +--- a/hw/xfree86/Makefile.am ++++ b/hw/xfree86/Makefile.am +@@ -79,7 +79,7 @@ Xorg_LDADD = \ + $(XSERVER_SYS_LIBS) + Xorg_DEPENDENCIES = $(LOCAL_LIBS) + +-Xorg_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG) ++Xorg_LDFLAGS = $(LD_EXPORT_SYMBOLS_FLAG) -Wl,-z,now -pie + + if SUID_WRAPPER + wrapdir = $(SUID_WRAPPER_DIR) +-- +2.1.0 + diff --git a/SOURCES/0001-miarc-Style-cleanup-for-miWideArc.patch b/SOURCES/0001-miarc-Style-cleanup-for-miWideArc.patch new file mode 100644 index 0000000..4e97a78 --- /dev/null +++ b/SOURCES/0001-miarc-Style-cleanup-for-miWideArc.patch @@ -0,0 +1,419 @@ +From 9426c5500b72e1fe004fef4c3b259023c4ec49f7 Mon Sep 17 00:00:00 2001 +From: Adam Jackson +Date: Wed, 1 Mar 2017 16:13:57 -0500 +Subject: [PATCH 1/3] miarc: Style cleanup for miWideArc + +Outdent, normalize comment formatting, and use 'goto out' idiom for +error paths. No functional change. + +Reviewed-by: Keith Packard +Signed-off-by: Adam Jackson +--- + mi/miarc.c | 368 ++++++++++++++++++++++++++++++------------------------------- + 1 file changed, 179 insertions(+), 189 deletions(-) + +diff --git a/mi/miarc.c b/mi/miarc.c +index 2588ee48a..fed5c9fa3 100644 +--- a/mi/miarc.c ++++ b/mi/miarc.c +@@ -894,7 +894,7 @@ miWideArc(DrawablePtr pDraw, GCPtr pGC, int narcs, xArc * parcs) + int xMin, xMax, yMin, yMax; + int pixmapWidth = 0, pixmapHeight = 0; + int xOrg = 0, yOrg = 0; +- int width; ++ int width = pGC->lineWidth; + Bool fTricky; + DrawablePtr pDrawTo; + CARD32 fg, bg; +@@ -904,210 +904,200 @@ miWideArc(DrawablePtr pDraw, GCPtr pGC, int narcs, xArc * parcs) + int iphase; + int halfWidth; + +- width = pGC->lineWidth; + if (width == 0 && pGC->lineStyle == LineSolid) { + for (i = narcs, parc = parcs; --i >= 0; parc++) +- miArcSegment(pDraw, pGC, *parc, (miArcFacePtr) 0, (miArcFacePtr) 0); ++ miArcSegment(pDraw, pGC, *parc, NULL, NULL); + fillSpans(pDraw, pGC); ++ return; + } +- else { +- if ((pGC->lineStyle == LineSolid) && narcs) { +- while (parcs->width && parcs->height && +- (parcs->angle2 >= FULLCIRCLE || +- parcs->angle2 <= -FULLCIRCLE)) { +- miFillWideEllipse(pDraw, pGC, parcs); +- if (!--narcs) +- return; +- parcs++; +- } +- } +- +- /* Set up pDrawTo and pGCTo based on the rasterop */ +- switch (pGC->alu) { +- case GXclear: /* 0 */ +- case GXcopy: /* src */ +- case GXcopyInverted: /* NOT src */ +- case GXset: /* 1 */ +- fTricky = FALSE; +- pDrawTo = pDraw; +- pGCTo = pGC; +- break; +- default: +- fTricky = TRUE; +- +- /* find bounding box around arcs */ +- xMin = yMin = MAXSHORT; +- xMax = yMax = MINSHORT; +- +- for (i = narcs, parc = parcs; --i >= 0; parc++) { +- xMin = min(xMin, parc->x); +- yMin = min(yMin, parc->y); +- xMax = max(xMax, (parc->x + (int) parc->width)); +- yMax = max(yMax, (parc->y + (int) parc->height)); +- } +- +- /* expand box to deal with line widths */ +- halfWidth = (width + 1) / 2; +- xMin -= halfWidth; +- yMin -= halfWidth; +- xMax += halfWidth; +- yMax += halfWidth; +- +- /* compute pixmap size; limit it to size of drawable */ +- xOrg = max(xMin, 0); +- yOrg = max(yMin, 0); +- pixmapWidth = min(xMax, pDraw->width) - xOrg; +- pixmapHeight = min(yMax, pDraw->height) - yOrg; +- +- /* if nothing left, return */ +- if ((pixmapWidth <= 0) || (pixmapHeight <= 0)) +- return; +- +- for (i = narcs, parc = parcs; --i >= 0; parc++) { +- parc->x -= xOrg; +- parc->y -= yOrg; +- } +- if (pGC->miTranslate) { +- xOrg += pDraw->x; +- yOrg += pDraw->y; +- } +- +- /* set up scratch GC */ +- +- pGCTo = GetScratchGC(1, pDraw->pScreen); +- if (!pGCTo) +- return; +- { +- ChangeGCVal gcvals[6]; +- +- gcvals[0].val = GXcopy; +- gcvals[1].val = 1; +- gcvals[2].val = 0; +- gcvals[3].val = pGC->lineWidth; +- gcvals[4].val = pGC->capStyle; +- gcvals[5].val = pGC->joinStyle; +- ChangeGC(NullClient, pGCTo, GCFunction | +- GCForeground | GCBackground | GCLineWidth | +- GCCapStyle | GCJoinStyle, gcvals); +- } + +- /* allocate a 1 bit deep pixmap of the appropriate size, and +- * validate it */ +- pDrawTo = (DrawablePtr) (*pDraw->pScreen->CreatePixmap) +- (pDraw->pScreen, pixmapWidth, pixmapHeight, 1, +- CREATE_PIXMAP_USAGE_SCRATCH); +- if (!pDrawTo) { +- FreeScratchGC(pGCTo); ++ if ((pGC->lineStyle == LineSolid) && narcs) { ++ while (parcs->width && parcs->height && ++ (parcs->angle2 >= FULLCIRCLE || parcs->angle2 <= -FULLCIRCLE)) { ++ miFillWideEllipse(pDraw, pGC, parcs); ++ if (!--narcs) + return; +- } +- ValidateGC(pDrawTo, pGCTo); +- miClearDrawable(pDrawTo, pGCTo); ++ parcs++; + } ++ } + +- fg = pGC->fgPixel; +- bg = pGC->bgPixel; +- if ((pGC->fillStyle == FillTiled) || +- (pGC->fillStyle == FillOpaqueStippled)) +- bg = fg; /* the protocol sez these don't cause color changes */ ++ /* Set up pDrawTo and pGCTo based on the rasterop */ ++ switch (pGC->alu) { ++ case GXclear: /* 0 */ ++ case GXcopy: /* src */ ++ case GXcopyInverted: /* NOT src */ ++ case GXset: /* 1 */ ++ fTricky = FALSE; ++ pDrawTo = pDraw; ++ pGCTo = pGC; ++ break; ++ default: ++ fTricky = TRUE; ++ ++ /* find bounding box around arcs */ ++ xMin = yMin = MAXSHORT; ++ xMax = yMax = MINSHORT; ++ ++ for (i = narcs, parc = parcs; --i >= 0; parc++) { ++ xMin = min(xMin, parc->x); ++ yMin = min(yMin, parc->y); ++ xMax = max(xMax, (parc->x + (int) parc->width)); ++ yMax = max(yMax, (parc->y + (int) parc->height)); ++ } ++ ++ /* expand box to deal with line widths */ ++ halfWidth = (width + 1) / 2; ++ xMin -= halfWidth; ++ yMin -= halfWidth; ++ xMax += halfWidth; ++ yMax += halfWidth; ++ ++ /* compute pixmap size; limit it to size of drawable */ ++ xOrg = max(xMin, 0); ++ yOrg = max(yMin, 0); ++ pixmapWidth = min(xMax, pDraw->width) - xOrg; ++ pixmapHeight = min(yMax, pDraw->height) - yOrg; ++ ++ /* if nothing left, return */ ++ if ((pixmapWidth <= 0) || (pixmapHeight <= 0)) ++ return; + +- polyArcs = miComputeArcs(parcs, narcs, pGC); ++ for (i = narcs, parc = parcs; --i >= 0; parc++) { ++ parc->x -= xOrg; ++ parc->y -= yOrg; ++ } ++ if (pGC->miTranslate) { ++ xOrg += pDraw->x; ++ yOrg += pDraw->y; ++ } + +- if (!polyArcs) { +- if (fTricky) { +- (*pDraw->pScreen->DestroyPixmap) ((PixmapPtr) pDrawTo); +- FreeScratchGC(pGCTo); +- } ++ /* set up scratch GC */ ++ pGCTo = GetScratchGC(1, pDraw->pScreen); ++ if (!pGCTo) ++ return; ++ { ++ ChangeGCVal gcvals[6]; ++ ++ gcvals[0].val = GXcopy; ++ gcvals[1].val = 1; ++ gcvals[2].val = 0; ++ gcvals[3].val = pGC->lineWidth; ++ gcvals[4].val = pGC->capStyle; ++ gcvals[5].val = pGC->joinStyle; ++ ChangeGC(NullClient, pGCTo, GCFunction | ++ GCForeground | GCBackground | GCLineWidth | ++ GCCapStyle | GCJoinStyle, gcvals); ++ } ++ ++ /* allocate a bitmap of the appropriate size, and validate it */ ++ pDrawTo = (DrawablePtr) (*pDraw->pScreen->CreatePixmap) ++ (pDraw->pScreen, pixmapWidth, pixmapHeight, 1, ++ CREATE_PIXMAP_USAGE_SCRATCH); ++ if (!pDrawTo) { ++ FreeScratchGC(pGCTo); + return; + } +- +- cap[0] = cap[1] = 0; +- join[0] = join[1] = 0; +- for (iphase = ((pGC->lineStyle == LineDoubleDash) ? 1 : 0); +- iphase >= 0; iphase--) { +- ChangeGCVal gcval; +- +- if (iphase == 1) { +- gcval.val = bg; +- ChangeGC(NullClient, pGC, GCForeground, &gcval); +- ValidateGC(pDraw, pGC); +- } +- else if (pGC->lineStyle == LineDoubleDash) { +- gcval.val = fg; +- ChangeGC(NullClient, pGC, GCForeground, &gcval); +- ValidateGC(pDraw, pGC); +- } +- for (i = 0; i < polyArcs[iphase].narcs; i++) { +- miArcDataPtr arcData; +- +- arcData = &polyArcs[iphase].arcs[i]; +- miArcSegment(pDrawTo, pGCTo, arcData->arc, +- &arcData->bounds[RIGHT_END], +- &arcData->bounds[LEFT_END]); +- if (polyArcs[iphase].arcs[i].render) { +- fillSpans(pDrawTo, pGCTo); +- /* +- * don't cap self-joining arcs +- */ +- if (polyArcs[iphase].arcs[i].selfJoin && +- cap[iphase] < polyArcs[iphase].arcs[i].cap) +- cap[iphase]++; +- while (cap[iphase] < polyArcs[iphase].arcs[i].cap) { +- int arcIndex, end; +- miArcDataPtr arcData0; +- +- arcIndex = polyArcs[iphase].caps[cap[iphase]].arcIndex; +- end = polyArcs[iphase].caps[cap[iphase]].end; +- arcData0 = &polyArcs[iphase].arcs[arcIndex]; +- miArcCap(pDrawTo, pGCTo, +- &arcData0->bounds[end], end, +- arcData0->arc.x, arcData0->arc.y, +- (double) arcData0->arc.width / 2.0, +- (double) arcData0->arc.height / 2.0); +- ++cap[iphase]; +- } +- while (join[iphase] < polyArcs[iphase].arcs[i].join) { +- int arcIndex0, arcIndex1, end0, end1; +- int phase0, phase1; +- miArcDataPtr arcData0, arcData1; +- miArcJoinPtr joinp; +- +- joinp = &polyArcs[iphase].joins[join[iphase]]; +- arcIndex0 = joinp->arcIndex0; +- end0 = joinp->end0; +- arcIndex1 = joinp->arcIndex1; +- end1 = joinp->end1; +- phase0 = joinp->phase0; +- phase1 = joinp->phase1; +- arcData0 = &polyArcs[phase0].arcs[arcIndex0]; +- arcData1 = &polyArcs[phase1].arcs[arcIndex1]; +- miArcJoin(pDrawTo, pGCTo, +- &arcData0->bounds[end0], +- &arcData1->bounds[end1], +- arcData0->arc.x, arcData0->arc.y, +- (double) arcData0->arc.width / 2.0, +- (double) arcData0->arc.height / 2.0, +- arcData1->arc.x, arcData1->arc.y, +- (double) arcData1->arc.width / 2.0, +- (double) arcData1->arc.height / 2.0); +- ++join[iphase]; +- } +- if (fTricky) { +- if (pGC->serialNumber != pDraw->serialNumber) +- ValidateGC(pDraw, pGC); +- (*pGC->ops->PushPixels) (pGC, (PixmapPtr) pDrawTo, +- pDraw, pixmapWidth, +- pixmapHeight, xOrg, yOrg); +- miClearDrawable((DrawablePtr) pDrawTo, pGCTo); +- } ++ ValidateGC(pDrawTo, pGCTo); ++ miClearDrawable(pDrawTo, pGCTo); ++ } ++ ++ fg = pGC->fgPixel; ++ bg = pGC->bgPixel; ++ ++ /* the protocol sez these don't cause color changes */ ++ if ((pGC->fillStyle == FillTiled) || ++ (pGC->fillStyle == FillOpaqueStippled)) ++ bg = fg; ++ ++ polyArcs = miComputeArcs(parcs, narcs, pGC); ++ if (!polyArcs) ++ goto out; ++ ++ cap[0] = cap[1] = 0; ++ join[0] = join[1] = 0; ++ for (iphase = (pGC->lineStyle == LineDoubleDash); iphase >= 0; iphase--) { ++ ChangeGCVal gcval; ++ ++ if (iphase == 1) { ++ gcval.val = bg; ++ ChangeGC(NullClient, pGC, GCForeground, &gcval); ++ ValidateGC(pDraw, pGC); ++ } ++ else if (pGC->lineStyle == LineDoubleDash) { ++ gcval.val = fg; ++ ChangeGC(NullClient, pGC, GCForeground, &gcval); ++ ValidateGC(pDraw, pGC); ++ } ++ for (i = 0; i < polyArcs[iphase].narcs; i++) { ++ miArcDataPtr arcData; ++ ++ arcData = &polyArcs[iphase].arcs[i]; ++ miArcSegment(pDrawTo, pGCTo, arcData->arc, ++ &arcData->bounds[RIGHT_END], ++ &arcData->bounds[LEFT_END]); ++ if (polyArcs[iphase].arcs[i].render) { ++ fillSpans(pDrawTo, pGCTo); ++ /* don't cap self-joining arcs */ ++ if (polyArcs[iphase].arcs[i].selfJoin && ++ cap[iphase] < polyArcs[iphase].arcs[i].cap) ++ cap[iphase]++; ++ while (cap[iphase] < polyArcs[iphase].arcs[i].cap) { ++ int arcIndex, end; ++ miArcDataPtr arcData0; ++ ++ arcIndex = polyArcs[iphase].caps[cap[iphase]].arcIndex; ++ end = polyArcs[iphase].caps[cap[iphase]].end; ++ arcData0 = &polyArcs[iphase].arcs[arcIndex]; ++ miArcCap(pDrawTo, pGCTo, ++ &arcData0->bounds[end], end, ++ arcData0->arc.x, arcData0->arc.y, ++ (double) arcData0->arc.width / 2.0, ++ (double) arcData0->arc.height / 2.0); ++ ++cap[iphase]; ++ } ++ while (join[iphase] < polyArcs[iphase].arcs[i].join) { ++ int arcIndex0, arcIndex1, end0, end1; ++ int phase0, phase1; ++ miArcDataPtr arcData0, arcData1; ++ miArcJoinPtr joinp; ++ ++ joinp = &polyArcs[iphase].joins[join[iphase]]; ++ arcIndex0 = joinp->arcIndex0; ++ end0 = joinp->end0; ++ arcIndex1 = joinp->arcIndex1; ++ end1 = joinp->end1; ++ phase0 = joinp->phase0; ++ phase1 = joinp->phase1; ++ arcData0 = &polyArcs[phase0].arcs[arcIndex0]; ++ arcData1 = &polyArcs[phase1].arcs[arcIndex1]; ++ miArcJoin(pDrawTo, pGCTo, ++ &arcData0->bounds[end0], ++ &arcData1->bounds[end1], ++ arcData0->arc.x, arcData0->arc.y, ++ (double) arcData0->arc.width / 2.0, ++ (double) arcData0->arc.height / 2.0, ++ arcData1->arc.x, arcData1->arc.y, ++ (double) arcData1->arc.width / 2.0, ++ (double) arcData1->arc.height / 2.0); ++ ++join[iphase]; ++ } ++ if (fTricky) { ++ if (pGC->serialNumber != pDraw->serialNumber) ++ ValidateGC(pDraw, pGC); ++ (*pGC->ops->PushPixels) (pGC, (PixmapPtr) pDrawTo, ++ pDraw, pixmapWidth, ++ pixmapHeight, xOrg, yOrg); ++ miClearDrawable((DrawablePtr) pDrawTo, pGCTo); + } + } + } +- miFreeArcs(polyArcs, pGC); ++ } ++ miFreeArcs(polyArcs, pGC); + +- if (fTricky) { +- (*pGCTo->pScreen->DestroyPixmap) ((PixmapPtr) pDrawTo); +- FreeScratchGC(pGCTo); +- } ++out: ++ if (fTricky) { ++ (*pGCTo->pScreen->DestroyPixmap) ((PixmapPtr) pDrawTo); ++ FreeScratchGC(pGCTo); + } + } + +-- +2.12.0 + diff --git a/SOURCES/0001-modesetting-Fix-PCI-initialization-on-non-zero-domai.patch b/SOURCES/0001-modesetting-Fix-PCI-initialization-on-non-zero-domai.patch new file mode 100644 index 0000000..3e3bc60 --- /dev/null +++ b/SOURCES/0001-modesetting-Fix-PCI-initialization-on-non-zero-domai.patch @@ -0,0 +1,46 @@ +From bc6ccb0bdcdc27c90c95a02e821d5883ad1dc7a0 Mon Sep 17 00:00:00 2001 +From: Adam Jackson +Date: Mon, 26 Jun 2017 12:37:56 -0400 +Subject: [PATCH] modesetting: Fix PCI initialization on non-zero domains + +libdrm's busid matching for the legacy three-integer bus string format +simply ignores the domain number, rather than what we were doing here of +packing the domain into the bus number. Whatever, just use the existing +code to build a busid string, since that gets the domain right. + +[rhel: also remove the if !pciaccess code - ajax] + +Signed-off-by: Adam Jackson + +diff --git a/hw/xfree86/drivers/modesetting/driver.c b/hw/xfree86/drivers/modesetting/driver.c +index 791ab90..3fac07c 100644 +--- a/hw/xfree86/drivers/modesetting/driver.c ++++ b/hw/xfree86/drivers/modesetting/driver.c +@@ -849,20 +849,11 @@ ms_get_drm_master_fd(ScrnInfoPtr pScrn) + if (pEnt->location.type == BUS_PCI) { + ms->PciInfo = xf86GetPciInfoForEntity(ms->pEnt->index); + if (ms->PciInfo) { +- BusID = XNFalloc(64); +- sprintf(BusID, "PCI:%d:%d:%d", +-#if XSERVER_LIBPCIACCESS +- ((ms->PciInfo->domain << 8) | ms->PciInfo->bus), +- ms->PciInfo->dev, ms->PciInfo->func +-#else +- ((pciConfigPtr) ms->PciInfo->thisCard)->busnum, +- ((pciConfigPtr) ms->PciInfo->thisCard)->devnum, +- ((pciConfigPtr) ms->PciInfo->thisCard)->funcnum +-#endif +- ); ++ if ((BusID = ms_DRICreatePCIBusID(ms->PciInfo)) != NULL) { ++ ms->fd = drmOpen(NULL, BusID); ++ free(BusID); ++ } + } +- ms->fd = drmOpen(NULL, BusID); +- free(BusID); + } + else { + const char *devicename; +-- +2.13.0 + diff --git a/SOURCES/0001-modesetting-Validate-the-atom-for-enum-properties.patch b/SOURCES/0001-modesetting-Validate-the-atom-for-enum-properties.patch new file mode 100644 index 0000000..ea7bacd --- /dev/null +++ b/SOURCES/0001-modesetting-Validate-the-atom-for-enum-properties.patch @@ -0,0 +1,33 @@ +From d4995a3936ae283b9080fdaa0905daa669ebacfc Mon Sep 17 00:00:00 2001 +From: Adam Jackson +Date: Mon, 12 Jun 2017 14:43:23 -0400 +Subject: [PATCH xserver] modesetting: Validate the atom for enum properties + +The client could have said anything here, and if what they said doesn't +actually name an atom NameForAtom() will return NULL, and strcmp() will +be unhappy about that. + +Signed-off-by: Adam Jackson +Reviewed-by: Peter Hutterer +Signed-off-by: Peter Hutterer +--- + hw/xfree86/drivers/modesetting/drmmode_display.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/hw/xfree86/drivers/modesetting/drmmode_display.c b/hw/xfree86/drivers/modesetting/drmmode_display.c +index aa6baae09..961b56127 100644 +--- a/hw/xfree86/drivers/modesetting/drmmode_display.c ++++ b/hw/xfree86/drivers/modesetting/drmmode_display.c +@@ -1557,7 +1557,8 @@ drmmode_output_set_property(xf86OutputPtr output, Atom property, + value->size != 1) + return FALSE; + memcpy(&atom, value->data, 4); +- name = NameForAtom(atom); ++ if (!(name = NameForAtom(atom))) ++ return FALSE; + + /* search for matching name string, then set its value down */ + for (j = 0; j < p->mode_prop->count_enums; j++) { +-- +2.13.0 + diff --git a/SOURCES/0001-modesetting-software-cursor-hack.patch b/SOURCES/0001-modesetting-software-cursor-hack.patch new file mode 100644 index 0000000..8b54c0f --- /dev/null +++ b/SOURCES/0001-modesetting-software-cursor-hack.patch @@ -0,0 +1,61 @@ +From 846596b38165e5170d1a410f37ce7c5280db649d Mon Sep 17 00:00:00 2001 +From: Adam Jackson +Date: Tue, 9 May 2017 17:02:17 -0400 +Subject: [PATCH] modesetting: software cursor hack + +Signed-off-by: Adam Jackson +--- + hw/xfree86/drivers/modesetting/driver.c | 30 +++++++++++++++++++++++++++--- + 1 file changed, 27 insertions(+), 3 deletions(-) + +diff --git a/hw/xfree86/drivers/modesetting/driver.c b/hw/xfree86/drivers/modesetting/driver.c +index 3da69a3..31a58fd 100644 +--- a/hw/xfree86/drivers/modesetting/driver.c ++++ b/hw/xfree86/drivers/modesetting/driver.c +@@ -878,6 +878,30 @@ ms_get_drm_master_fd(ScrnInfoPtr pScrn) + } + + static Bool ++msDefaultSoftwareCursor(modesettingPtr ms) ++{ ++ Bool ret = FALSE; ++ drmVersionPtr v = drmGetVersion(ms->fd); ++ ++ /* ++ * This is horrific, don't hate me. The _runtime_ fallback to software ++ * cursor doesn't seem to take on the first try; you get no cursor in ++ * gdm, but it works once you log in. However just bombing out at ++ * init time seems to work fine. So for drivers without hardware cursors ++ * (or for G200SE, where they're basically unusable) just default to sw. ++ */ ++ if (!strcmp(v->name, "udl") || ++ !strcmp(v->name, "mgag200") || ++ !strcmp(v->name, "cirrus") || ++ !strcmp(v->name, "ast")) ++ ret = TRUE; ++ ++ drmFreeVersion(v); ++ ++ return ret; ++} ++ ++static Bool + PreInit(ScrnInfoPtr pScrn, int flags) + { + modesettingPtr ms; +@@ -966,9 +990,9 @@ PreInit(ScrnInfoPtr pScrn, int flags) + if (!xf86SetDefaultVisual(pScrn, -1)) + return FALSE; + +- if (xf86ReturnOptValBool(ms->drmmode.Options, OPTION_SW_CURSOR, FALSE)) { +- ms->drmmode.sw_cursor = TRUE; +- } ++ if (!xf86GetOptValBool(ms->drmmode.Options, OPTION_SW_CURSOR, ++ &ms->drmmode.sw_cursor)) ++ ms->drmmode.sw_cursor = msDefaultSoftwareCursor(ms); + + ms->cursor_width = 64; + ms->cursor_height = 64; +-- +2.12.0 + diff --git a/SOURCES/0001-mustard-Don-t-probe-for-drivers-not-shipped-in-RHEL7.patch b/SOURCES/0001-mustard-Don-t-probe-for-drivers-not-shipped-in-RHEL7.patch new file mode 100644 index 0000000..d6bd969 --- /dev/null +++ b/SOURCES/0001-mustard-Don-t-probe-for-drivers-not-shipped-in-RHEL7.patch @@ -0,0 +1,185 @@ +From 3fef2f0a6b01a627b77ff82e9119f9fc6c285147 Mon Sep 17 00:00:00 2001 +From: Adam Jackson +Date: Wed, 17 Sep 2014 13:19:59 -0400 +Subject: [PATCH] mustard: Don't probe for drivers not shipped in RHEL7 + +Mostly this is here to prevent noise for ast/cirrus/mga/other server kit +trying to probe a driver that isn't there. I'm leaving vboxvideo in out +of the goodness of my heart; if people have RHEL7 vbox guests they +probably want the native driver, but we can't ship it in good conscience +since it's too tightly bound to the hypervisor version. + +Signed-off-by: Adam Jackson +--- + hw/xfree86/common/xf86pciBus.c | 121 +---------------------------------------- + 1 file changed, 1 insertion(+), 120 deletions(-) + +diff --git a/hw/xfree86/common/xf86pciBus.c b/hw/xfree86/common/xf86pciBus.c +index 258988a..e4d4402 100644 +--- a/hw/xfree86/common/xf86pciBus.c ++++ b/hw/xfree86/common/xf86pciBus.c +@@ -1099,68 +1099,18 @@ xf86VideoPtrToDriverList(struct pci_device *dev, + const char *driverList[5] = { NULL, NULL, NULL, NULL, NULL }; + + switch (dev->vendor_id) { +- /* AMD Geode LX */ +- case 0x1022: +- if (dev->device_id == 0x2081) +- driverList[0] = "geode"; +- break; +- /* older Geode products acquired by AMD still carry an NSC vendor_id */ +- case 0x100b: +- if (dev->device_id == 0x0030) { +- /* NSC Geode GX2 specifically */ +- driverList[0] = "geode"; +- /* GX2 support started its life in the NSC tree and was later +- forked by AMD for GEODE so we keep it as a backup */ +- driverList[1] = "nsc"; +- } +- else +- /* other NSC variant e.g. 0x0104 (SC1400), 0x0504 (SCx200) */ +- driverList[0] = "nsc"; +- break; +- /* Cyrix Geode GX1 */ +- case 0x1078: +- if (dev->device_id == 0x0104) +- driverList[0] = "cyrix"; +- break; +- case 0x1142: +- driverList[0] = "apm"; +- break; +- case 0xedd8: +- driverList[0] = "ark"; +- break; +- case 0x1a03: +- driverList[0] = "ast"; +- break; + case 0x1002: + driverList[0] = "ati"; + break; +- case 0x102c: +- driverList[0] = "chips"; +- break; +- case 0x1013: +- driverList[0] = "cirrus"; +- break; +- case 0x3d3d: +- driverList[0] = "glint"; +- break; +- case 0x105d: +- driverList[0] = "i128"; +- break; + case 0x8086: + switch (dev->device_id) + { + /* Intel i740 */ + case 0x00d1: + case 0x7800: +- driverList[0] = "i740"; +- break; + /* GMA500/Poulsbo */ + case 0x8108: + case 0x8109: +- /* Try psb driver on Poulsbo - if available */ +- driverList[0] = "psb"; +- driverList[1] = "psb_drv"; +- break; + /* GMA600/Oaktrail */ + case 0x4100: + case 0x4101: +@@ -1205,91 +1155,22 @@ xf86VideoPtrToDriverList(struct pci_device *dev, + break; + } + break; +- case 0x102b: +- driverList[0] = "mga"; +- break; +- case 0x10c8: +- driverList[0] = "neomagic"; +- break; + case 0x10de: + case 0x12d2: +- { +- int idx = 0; +- +-#ifdef __linux__ +- driverList[idx++] = "nouveau"; +-#endif +- driverList[idx++] = "nv"; ++ driverList[0] = "nouveau"; + break; +- } + case 0x1106: + driverList[0] = "openchrome"; + break; + case 0x1b36: + driverList[0] = "qxl"; + break; +- case 0x1163: +- driverList[0] = "rendition"; +- break; +- case 0x5333: +- switch (dev->device_id) { +- case 0x88d0: +- case 0x88d1: +- case 0x88f0: +- case 0x8811: +- case 0x8812: +- case 0x8814: +- case 0x8901: +- driverList[0] = "s3"; +- break; +- case 0x5631: +- case 0x883d: +- case 0x8a01: +- case 0x8a10: +- case 0x8c01: +- case 0x8c03: +- case 0x8904: +- case 0x8a13: +- driverList[0] = "s3virge"; +- break; +- default: +- driverList[0] = "savage"; +- break; +- } +- break; +- case 0x1039: +- driverList[0] = "sis"; +- break; +- case 0x126f: +- driverList[0] = "siliconmotion"; +- break; +- case 0x121a: +- if (dev->device_id < 0x0003) +- driverList[0] = "voodoo"; +- else +- driverList[0] = "tdfx"; +- break; +- case 0x1011: +- driverList[0] = "tga"; +- break; +- case 0x1023: +- driverList[0] = "trident"; +- break; +- case 0x100c: +- driverList[0] = "tseng"; +- break; + case 0x80ee: + driverList[0] = "vboxvideo"; + break; + case 0x15ad: + driverList[0] = "vmware"; + break; +- case 0x18ca: +- if (dev->device_id == 0x47) +- driverList[0] = "xgixp"; +- else +- driverList[0] = "xgi"; +- break; + default: + break; + } +-- +1.9.3 + diff --git a/SOURCES/0001-mustard-Enable-indirect-GLX-by-default.patch b/SOURCES/0001-mustard-Enable-indirect-GLX-by-default.patch new file mode 100644 index 0000000..2ace225 --- /dev/null +++ b/SOURCES/0001-mustard-Enable-indirect-GLX-by-default.patch @@ -0,0 +1,26 @@ +From 81e6a4910daf1d2e13804553182e901c65d7a583 Mon Sep 17 00:00:00 2001 +From: Adam Jackson +Date: Mon, 20 Feb 2017 13:46:51 -0500 +Subject: [PATCH] mustard: Enable indirect GLX by default + +Signed-off-by: Adam Jackson +--- + os/utils.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/os/utils.c b/os/utils.c +index da37588..7ab8540 100644 +--- a/os/utils.c ++++ b/os/utils.c +@@ -194,7 +194,7 @@ Bool noGEExtension = FALSE; + + Bool CoreDump; + +-Bool enableIndirectGLX = FALSE; ++Bool enableIndirectGLX = TRUE; + + #ifdef PANORAMIX + Bool PanoramiXExtensionDisabledHack = FALSE; +-- +2.9.3 + diff --git a/SOURCES/0001-rpath-hack.patch b/SOURCES/0001-rpath-hack.patch new file mode 100644 index 0000000..8aba68d --- /dev/null +++ b/SOURCES/0001-rpath-hack.patch @@ -0,0 +1,28 @@ +From e562763e58cd58b0a23e5d034aafedb608e3eda3 Mon Sep 17 00:00:00 2001 +From: Adam Jackson +Date: Thu, 12 Nov 2015 11:10:11 -0500 +Subject: [PATCH] rpath hack + +Normally, rpath is undesirable. But for the X server we _know_ we need +Mesa's libGL, which will always be in %{_libdir}, and not any third-party +libGL that may be configured using ld.so.conf. +--- + configure.ac | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/configure.ac b/configure.ac +index 190d039..2ce40f4 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -1352,7 +1352,7 @@ if test "x$GLX" = xyes; then + AC_SUBST(XLIB_CFLAGS) + AC_DEFINE(GLXEXT, 1, [Build GLX extension]) + GLX_LIBS='$(top_builddir)/glx/libglx.la' +- GLX_SYS_LIBS="$GLX_SYS_LIBS $GL_LIBS" ++ GLX_SYS_LIBS="$GLX_SYS_LIBS $GL_LIBS -Wl,-rpath=\$(libdir)" + else + GLX=no + fi +-- +2.9.3 + diff --git a/SOURCES/0001-xephyr-Check-for-host-XVideo-support-before-trying-t.patch b/SOURCES/0001-xephyr-Check-for-host-XVideo-support-before-trying-t.patch new file mode 100644 index 0000000..382cfce --- /dev/null +++ b/SOURCES/0001-xephyr-Check-for-host-XVideo-support-before-trying-t.patch @@ -0,0 +1,35 @@ +From 88c59206bffee264250142ea28713206df62d853 Mon Sep 17 00:00:00 2001 +From: Adam Jackson +Date: Thu, 6 Apr 2017 17:22:28 -0400 +Subject: [PATCH xserver] xephyr: Check for host XVideo support before trying + to use it + +Otherwise xcb will treat our attempt to send xv requests as a connection +error (quite reasonably: we're asking it to emit a request for which +there is no defined major opcode), and we'll die quietly the first time +we hit KdBlockhandler. + +Signed-off-by: Adam Jackson +--- + hw/kdrive/ephyr/ephyrvideo.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/hw/kdrive/ephyr/ephyrvideo.c b/hw/kdrive/ephyr/ephyrvideo.c +index 9c9c78d..671a0dd 100644 +--- a/hw/kdrive/ephyr/ephyrvideo.c ++++ b/hw/kdrive/ephyr/ephyrvideo.c +@@ -226,6 +226,11 @@ ephyrInitVideo(ScreenPtr pScreen) + return FALSE; + } + ++ if (!hostx_has_extension(&xcb_xv_id)) { ++ EPHYR_LOG_ERROR("Host has no XVideo extension\n"); ++ return FALSE; ++ } ++ + if (!xv_priv) { + xv_priv = ephyrXVPrivNew(); + } +-- +2.9.3 + diff --git a/SOURCES/0001-xf86AddBusDeviceToConfigure-Store-device-in-DevToCon.patch b/SOURCES/0001-xf86AddBusDeviceToConfigure-Store-device-in-DevToCon.patch new file mode 100644 index 0000000..eafc253 --- /dev/null +++ b/SOURCES/0001-xf86AddBusDeviceToConfigure-Store-device-in-DevToCon.patch @@ -0,0 +1,26 @@ +From 6db849550c71b6af00c220d03816495c970a5196 Mon Sep 17 00:00:00 2001 +From: Adam Jackson +Date: Wed, 13 Aug 2014 12:57:59 -0400 +Subject: [PATCH] xf86AddBusDeviceToConfigure(): Store device in + DevToConfig[i].pVideo + +Signed-off-by: Adam Jackson +--- + hw/xfree86/common/xf86Configure.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/hw/xfree86/common/xf86Configure.c b/hw/xfree86/common/xf86Configure.c +index 91e8df9..423b200 100644 +--- a/hw/xfree86/common/xf86Configure.c ++++ b/hw/xfree86/common/xf86Configure.c +@@ -90,6 +90,7 @@ xf86AddBusDeviceToConfigure(const char *driver, BusType bus, void *busData, + switch (bus) { + #ifdef XSERVER_LIBPCIACCESS + case BUS_PCI: ++ DevToConfig[i].pVideo = busData; + ret = xf86PciConfigure(busData, DevToConfig[i].pVideo); + break; + #endif +-- +1.9.3 + diff --git a/SOURCES/0001-xfixes-Remove-the-CursorCurrent-array.patch b/SOURCES/0001-xfixes-Remove-the-CursorCurrent-array.patch new file mode 100644 index 0000000..6f27ada --- /dev/null +++ b/SOURCES/0001-xfixes-Remove-the-CursorCurrent-array.patch @@ -0,0 +1,105 @@ +From a5e2c313721615d40ebf328f3619286a88dae238 Mon Sep 17 00:00:00 2001 +From: Adam Jackson +Date: Wed, 17 May 2017 14:17:01 -0400 +Subject: [PATCH xserver] xfixes: Remove the CursorCurrent array + +We're not wrapping all the ways a cursor can be destroyed, so this array +ends up with stale data. Rather than try harder to wrap more code paths, +just look up the cursor when we need it. + +Signed-off-by: Adam Jackson +--- + xfixes/cursor.c | 28 +++++++++++++++++++++------- + 1 file changed, 21 insertions(+), 7 deletions(-) + +diff --git a/xfixes/cursor.c b/xfixes/cursor.c +index c1ab3beda..b7c47bc00 100644 +--- a/xfixes/cursor.c ++++ b/xfixes/cursor.c +@@ -61,7 +61,6 @@ + static RESTYPE CursorClientType; + static RESTYPE CursorHideCountType; + static RESTYPE CursorWindowType; +-static CursorPtr CursorCurrent[MAXDEVICES]; + + static DevPrivateKeyRec CursorScreenPrivateKeyRec; + +@@ -132,10 +131,26 @@ typedef struct _CursorScreen { + Bool CursorVisible = FALSE; + Bool EnableCursor = TRUE; + ++static CursorPtr ++CursorForDevice(DeviceIntPtr pDev) ++{ ++ if (pDev && pDev->spriteInfo && pDev->spriteInfo->sprite) ++ return pDev->spriteInfo->sprite->current; ++ ++ return NULL; ++} ++ ++static CursorPtr ++CursorForClient(ClientPtr client) ++{ ++ return CursorForDevice(PickPointer(client)); ++} ++ + static Bool + CursorDisplayCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor) + { + CursorScreenPtr cs = GetCursorScreen(pScreen); ++ CursorPtr pOldCursor = CursorForDevice(pDev); + Bool ret; + DisplayCursorProcPtr backupProc; + +@@ -150,11 +165,10 @@ CursorDisplayCursor(DeviceIntPtr pDev, ScreenPtr pScreen, CursorPtr pCursor) + ret = (*pScreen->DisplayCursor) (pDev, pScreen, pCursor); + } + +- if (pCursor != CursorCurrent[pDev->id]) { ++ if (pCursor != pOldCursor) { + CursorEventPtr e; + + UpdateCurrentTimeIf(); +- CursorCurrent[pDev->id] = pCursor; + for (e = cursorEvents; e; e = e->next) { + if ((e->eventMask & XFixesDisplayCursorNotifyMask)) { + xXFixesCursorNotifyEvent ev = { +@@ -350,7 +364,7 @@ ProcXFixesGetCursorImage(ClientPtr client) + int npixels, width, height, rc, x, y; + + REQUEST_SIZE_MATCH(xXFixesGetCursorImageReq); +- pCursor = CursorCurrent[PickPointer(client)->id]; ++ pCursor = CursorForClient(client); + if (!pCursor) + return BadCursor; + rc = XaceHook(XACE_RESOURCE_ACCESS, client, pCursor->id, RT_CURSOR, +@@ -499,7 +513,7 @@ ProcXFixesGetCursorImageAndName(ClientPtr client) + int rc, x, y; + + REQUEST_SIZE_MATCH(xXFixesGetCursorImageAndNameReq); +- pCursor = CursorCurrent[PickPointer(client)->id]; ++ pCursor = CursorForClient(client); + if (!pCursor) + return BadCursor; + rc = XaceHook(XACE_RESOURCE_ACCESS, client, pCursor->id, RT_CURSOR, +@@ -873,7 +887,7 @@ ProcXFixesHideCursor(ClientPtr client) + for (dev = inputInfo.devices; dev; dev = dev->next) { + if (IsMaster(dev) && IsPointerDevice(dev)) + CursorDisplayCursor(dev, pWin->drawable.pScreen, +- CursorCurrent[dev->id]); ++ CursorForDevice(dev)); + } + } + +@@ -968,7 +982,7 @@ CursorFreeHideCount(void *data, XID id) + deleteCursorHideCount(pChc, pChc->pScreen); + for (dev = inputInfo.devices; dev; dev = dev->next) { + if (IsMaster(dev) && IsPointerDevice(dev)) +- CursorDisplayCursor(dev, pScreen, CursorCurrent[dev->id]); ++ CursorDisplayCursor(dev, pScreen, CursorForDevice(dev)); + } + + return 1; +-- +2.13.0 + diff --git a/SOURCES/0001-xfree86-Allow-mixed-fbdev-and-pci-setups.patch b/SOURCES/0001-xfree86-Allow-mixed-fbdev-and-pci-setups.patch new file mode 100644 index 0000000..7439e80 --- /dev/null +++ b/SOURCES/0001-xfree86-Allow-mixed-fbdev-and-pci-setups.patch @@ -0,0 +1,111 @@ +From ca183b2a3c6e3877b93b6444acb1280356834a04 Mon Sep 17 00:00:00 2001 +From: Adam Jackson +Date: Tue, 5 Aug 2014 12:16:31 -0400 +Subject: [PATCH] xfree86: Allow mixed fbdev and pci setups + +You'd like to be able to do this because (for example) that way you'd be +able to drive both intel and udlfb at once. There's no fundamental +reason why that can't work, so just delete the check in PostProbe that +forbids it. Also in the fbdev driver, we're now actually passing the PCI +device in at init time, so we can look up the device node sanely. + +That almost works! Except then you break HyperV, because hyperv_fb +binds to the vmbus device, not the PCI device, because why the hell not. +So then the PCI probe path fails (because we try to find the fbdev node +under the PCI device tree, and fail), but the legacy probe path +succeeds; but then Init fails because we don't preserve that fd (or even +which /dev node we opened!), and since it _is_ a PCI device we try +fbdev_open_pci and that fails like it did during PCI probe. "I know", +you think, "I'll just record the choice made at probe time", and then +you remember you have nowhere to hang it. + +So, whatever. If we make it to Init we know Probe succeeded one way or +the other, so just fall back from pci-style to handwave-style in Init +once if it seem appropriate. And in all cases, use the explicit-device +open path even for PCI devices so that Option "fbdev" actually takes +effect. + +I think this is the best you can do without breaking the Probe +interface, though admittedly burning this all to the ground is a noble +goal. + +Signed-off-by: Adam Jackson +--- + hw/xfree86/common/xf86Bus.c | 16 ---------------- + hw/xfree86/fbdevhw/fbdevhw.c | 18 +++++++++++++++--- + 2 files changed, 15 insertions(+), 19 deletions(-) + +diff --git a/hw/xfree86/common/xf86Bus.c b/hw/xfree86/common/xf86Bus.c +index d463e91..5adff0b 100644 +--- a/hw/xfree86/common/xf86Bus.c ++++ b/hw/xfree86/common/xf86Bus.c +@@ -548,22 +548,6 @@ xf86PostProbe(void) + { + int i; + +- if (fbSlotClaimed && ( +-#if (defined(__sparc__) || defined(__sparc)) && !defined(__OpenBSD__) +- sbusSlotClaimed || +-#endif +-#ifdef XSERVER_PLATFORM_BUS +- platformSlotClaimed || +-#endif +-#ifdef XSERVER_LIBPCIACCESS +- pciSlotClaimed +-#else +- TRUE +-#endif +- )) +- FatalError("Cannot run in framebuffer mode. Please specify busIDs " +- " for all framebuffer devices\n"); +- + for (i = 0; i < xf86NumEntities; i++) + if (xf86Entities[i]->entityInit) + xf86Entities[i]->entityInit(i, xf86Entities[i]->private); +diff --git a/hw/xfree86/fbdevhw/fbdevhw.c b/hw/xfree86/fbdevhw/fbdevhw.c +index cbb4093..657fc49 100644 +--- a/hw/xfree86/fbdevhw/fbdevhw.c ++++ b/hw/xfree86/fbdevhw/fbdevhw.c +@@ -347,7 +347,7 @@ fbdevHWProbe(struct pci_device *pPci, char *device, char **namep) + { + int fd; + +- if (pPci) ++ if (pPci && !device) + fd = fbdev_open_pci(pPci, namep); + else + fd = fbdev_open(-1, device, namep); +@@ -361,16 +361,28 @@ fbdevHWProbe(struct pci_device *pPci, char *device, char **namep) + Bool + fbdevHWInit(ScrnInfoPtr pScrn, struct pci_device *pPci, char *device) + { ++ static Bool been_here; + fbdevHWPtr fPtr; + + fbdevHWGetRec(pScrn); + fPtr = FBDEVHWPTR(pScrn); + + /* open device */ +- if (pPci) ++ if (pPci && !device) + fPtr->fd = fbdev_open_pci(pPci, NULL); + else +- fPtr->fd = fbdev_open(pScrn->scrnIndex, device, NULL); ++ fPtr->fd = fbdev_open(pScrn->scrnIndex, device, NULL); ++ ++ if (pPci && fPtr->fd == -1) { ++ if (been_here != serverGeneration) { ++ fPtr->fd = fbdev_open(pScrn->scrnIndex, device, NULL); ++ been_here = serverGeneration; ++ } else { ++ xf86DrvMsg(pScrn->scrnIndex, X_ERROR, ++ "Please specify Option \"fbdev\" to use this device\n"); ++ } ++ } ++ + if (-1 == fPtr->fd) { + xf86DrvMsg(pScrn->scrnIndex, X_ERROR, + "Failed to open framebuffer device, consult warnings" +-- +2.1.0 + diff --git a/SOURCES/0001-xfree86-Fix-off-by-one-in-X-configure.patch b/SOURCES/0001-xfree86-Fix-off-by-one-in-X-configure.patch new file mode 100644 index 0000000..fc22e7f --- /dev/null +++ b/SOURCES/0001-xfree86-Fix-off-by-one-in-X-configure.patch @@ -0,0 +1,36 @@ +From e437e3cae10b730d3d8bb64e0b720064f39ca0b6 Mon Sep 17 00:00:00 2001 +From: Adam Jackson +Date: Mon, 26 Jun 2017 17:31:14 -0400 +Subject: [PATCH] xfree86: Fix off-by-one in X -configure + +Signed-off-by: Adam Jackson +--- +diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c +index df3ca50..3994805 100644 +--- a/hw/xfree86/common/xf86Config.c ++++ b/hw/xfree86/common/xf86Config.c +@@ -545,11 +545,11 @@ driver_sort(const void *_l, const void *_r) + return strcmp(l, r); + + /* left is a fallback */ +- if (left >= 0) ++ if (left >= 0 && right < 0) + return 1; + + /* right is a fallback */ +- if (right >= 0) ++ if (right >= 0 && left > 0) + return -1; + + /* both are fallbacks, which is worse */ +@@ -563,7 +563,6 @@ fixup_video_driver_list(const char **drivers) + + /* walk to the end of the list */ + for (end = drivers; *end && **end; end++); +- end--; + + qsort(drivers, end - drivers, sizeof(const char *), driver_sort); + } +-- +2.13.0 + diff --git a/SOURCES/0001-xfree86-modes-Make-colormap-gamma-glue-code-work-wit.patch b/SOURCES/0001-xfree86-modes-Make-colormap-gamma-glue-code-work-wit.patch new file mode 100644 index 0000000..89f700b --- /dev/null +++ b/SOURCES/0001-xfree86-modes-Make-colormap-gamma-glue-code-work-wit.patch @@ -0,0 +1,247 @@ +From 6a6bf1ae046124a9d8a6f3f53f02707951c85c43 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Michel=20D=C3=A4nzer?= +Date: Wed, 12 Apr 2017 17:58:05 +0900 +Subject: [PATCH xserver] xfree86/modes: Make colormap/gamma glue code work + with RandR disabled + +E.g. because Xinerama is enabled. + +Fixes crash on startup and wrong colours in that case. + +Bugzilla: https://bugs.freedesktop.org/100293 +Bugzilla: https://bugs.freedesktop.org/100294 +Fixes: 62f44052573b ("xfree86/modes: Move gamma initialization to + xf86RandR12Init12 v2") +Tested-by: Mariusz Bialonczyk +Reviewed-by: Alex Deucher +(cherry picked from commit 41dafcc2a2942fc4c94ce3cbafc4a1b413c460c3) +--- + hw/xfree86/modes/xf86RandR12.c | 136 +++++++++++++++++++++++++++-------------- + 1 file changed, 91 insertions(+), 45 deletions(-) + +diff --git a/hw/xfree86/modes/xf86RandR12.c b/hw/xfree86/modes/xf86RandR12.c +index d834619974..6e6aa1b2ac 100644 +--- a/hw/xfree86/modes/xf86RandR12.c ++++ b/hw/xfree86/modes/xf86RandR12.c +@@ -1250,33 +1250,50 @@ xf86RandR12CrtcSet(ScreenPtr pScreen, + } + + static void +-xf86RandR12CrtcComputeGamma(ScreenPtr pScreen, RRCrtcPtr randr_crtc) ++xf86RandR12CrtcComputeGamma(xf86CrtcPtr crtc, LOCO *palette, ++ int palette_red_size, int palette_green_size, ++ int palette_blue_size, CARD16 *gamma_red, ++ CARD16 *gamma_green, CARD16 *gamma_blue, ++ int gamma_size) + { +- XF86RandRInfoPtr randrp = XF86RANDRINFO(pScreen); +- xf86CrtcPtr crtc = randr_crtc->devPrivate; + int gamma_slots; +- CARD16 value; ++ unsigned shift; ++ CARD32 value; + int i, j; + +- gamma_slots = crtc->gamma_size / randrp->palette_red_size; +- for (i = 0; i < randrp->palette_red_size; i++) { +- value = randr_crtc->gammaRed[randrp->palette[i].red]; ++ for (shift = 0; (gamma_size << shift) < (1 << 16); shift++); ++ ++ gamma_slots = crtc->gamma_size / palette_red_size; ++ for (i = 0; i < palette_red_size; i++) { ++ value = palette[i].red; ++ if (gamma_red) ++ value = gamma_red[value]; ++ else ++ value <<= shift; + + for (j = 0; j < gamma_slots; j++) + crtc->gamma_red[i * gamma_slots + j] = value; + } + +- gamma_slots = crtc->gamma_size / randrp->palette_green_size; +- for (i = 0; i < randrp->palette_green_size; i++) { +- value = randr_crtc->gammaGreen[randrp->palette[i].green]; ++ gamma_slots = crtc->gamma_size / palette_green_size; ++ for (i = 0; i < palette_green_size; i++) { ++ value = palette[i].green; ++ if (gamma_green) ++ value = gamma_green[value]; ++ else ++ value <<= shift; + + for (j = 0; j < gamma_slots; j++) + crtc->gamma_green[i * gamma_slots + j] = value; + } + +- gamma_slots = crtc->gamma_size / randrp->palette_blue_size; +- for (i = 0; i < randrp->palette_blue_size; i++) { +- value = randr_crtc->gammaBlue[randrp->palette[i].blue]; ++ gamma_slots = crtc->gamma_size / palette_blue_size; ++ for (i = 0; i < palette_blue_size; i++) { ++ value = palette[i].blue; ++ if (gamma_blue) ++ value = gamma_blue[value]; ++ else ++ value <<= shift; + + for (j = 0; j < gamma_slots; j++) + crtc->gamma_blue[i * gamma_slots + j] = value; +@@ -1284,10 +1301,8 @@ xf86RandR12CrtcComputeGamma(ScreenPtr pScreen, RRCrtcPtr randr_crtc) + } + + static void +-xf86RandR12CrtcReloadGamma(RRCrtcPtr randr_crtc) ++xf86RandR12CrtcReloadGamma(xf86CrtcPtr crtc) + { +- xf86CrtcPtr crtc = randr_crtc->devPrivate; +- + if (!crtc->scrn->vtSema || !crtc->funcs->gamma_set) + return; + +@@ -1309,7 +1324,14 @@ xf86RandR12CrtcSetGamma(ScreenPtr pScreen, RRCrtcPtr randr_crtc) + return FALSE; + + if (randrp->palette_size) { +- xf86RandR12CrtcComputeGamma(pScreen, randr_crtc); ++ xf86RandR12CrtcComputeGamma(crtc, randrp->palette, ++ randrp->palette_red_size, ++ randrp->palette_green_size, ++ randrp->palette_blue_size, ++ randr_crtc->gammaRed, ++ randr_crtc->gammaGreen, ++ randr_crtc->gammaBlue, ++ randr_crtc->gammaSize); + } else { + memcpy(crtc->gamma_red, randr_crtc->gammaRed, + crtc->gamma_size * sizeof(crtc->gamma_red[0])); +@@ -1319,7 +1341,7 @@ xf86RandR12CrtcSetGamma(ScreenPtr pScreen, RRCrtcPtr randr_crtc) + crtc->gamma_size * sizeof(crtc->gamma_blue[0])); + } + +- xf86RandR12CrtcReloadGamma(randr_crtc); ++ xf86RandR12CrtcReloadGamma(crtc); + + return TRUE; + } +@@ -1394,6 +1416,13 @@ xf86RandR12OutputInitGamma(xf86OutputPtr output) + * different gamma + */ + if (gamma_red != 1.0 || gamma_green != 1.0 || gamma_blue != 1.0) { ++ if (!output->crtc->randr_crtc) { ++ xf86DrvMsg(output->scrn->scrnIndex, X_WARNING, ++ "Gamma correction for output %s not possible because " ++ "RandR is disabled\n", output->name); ++ return TRUE; ++ } ++ + xf86DrvMsg(output->scrn->scrnIndex, X_INFO, + "Output %s wants gamma correction (%.1f, %.1f, %.1f)\n", + output->name, gamma_red, gamma_green, gamma_blue); +@@ -1415,6 +1444,9 @@ xf86RandR12InitGamma(ScrnInfoPtr pScrn, unsigned gammaSize) { + for (c = 0; c < config->num_crtc; c++) { + xf86CrtcPtr crtc = config->crtc[c]; + ++ if (!crtc->randr_crtc) ++ continue; ++ + if (!RRCrtcGammaSetSize(crtc->randr_crtc, gammaSize) || + !xf86RandR12CrtcInitGamma(crtc, 1.0f, 1.0f, 1.0f)) + return FALSE; +@@ -1876,7 +1908,6 @@ xf86RandR12LoadPalette(ScrnInfoPtr pScrn, int numColors, int *indices, + LOCO *colors, VisualPtr pVisual) + { + ScreenPtr pScreen = pScrn->pScreen; +- XF86RandRInfoPtr randrp = XF86RANDRINFO(pScreen); + xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(pScrn); + int reds, greens, blues, index, palette_size; + int c, i; +@@ -1891,36 +1922,51 @@ xf86RandR12LoadPalette(ScrnInfoPtr pScrn, int numColors, int *indices, + + palette_size = max(reds, max(greens, blues)); + +- if (randrp->palette_size != palette_size) { +- randrp->palette = reallocarray(randrp->palette, palette_size, +- sizeof(colors[0])); +- if (!randrp->palette) { +- randrp->palette_size = 0; +- return; +- } +- +- randrp->palette_size = palette_size; +- } +- randrp->palette_red_size = reds; +- randrp->palette_green_size = greens; +- randrp->palette_blue_size = blues; ++ if (dixPrivateKeyRegistered(rrPrivKey)) { ++ XF86RandRInfoPtr randrp = XF86RANDRINFO(pScreen); + +- for (i = 0; i < numColors; i++) { +- index = indices[i]; ++ if (randrp->palette_size != palette_size) { ++ randrp->palette = reallocarray(randrp->palette, palette_size, ++ sizeof(colors[0])); ++ if (!randrp->palette) { ++ randrp->palette_size = 0; ++ return; ++ } + +- if (index < reds) +- randrp->palette[index].red = colors[index].red; +- if (index < greens) +- randrp->palette[index].green = colors[index].green; +- if (index < blues) +- randrp->palette[index].blue = colors[index].blue; ++ randrp->palette_size = palette_size; ++ } ++ randrp->palette_red_size = reds; ++ randrp->palette_green_size = greens; ++ randrp->palette_blue_size = blues; ++ ++ for (i = 0; i < numColors; i++) { ++ index = indices[i]; ++ ++ if (index < reds) ++ randrp->palette[index].red = colors[index].red; ++ if (index < greens) ++ randrp->palette[index].green = colors[index].green; ++ if (index < blues) ++ randrp->palette[index].blue = colors[index].blue; ++ } + } + + for (c = 0; c < config->num_crtc; c++) { +- RRCrtcPtr randr_crtc = config->crtc[c]->randr_crtc; +- +- xf86RandR12CrtcComputeGamma(pScreen, randr_crtc); +- xf86RandR12CrtcReloadGamma(randr_crtc); ++ xf86CrtcPtr crtc = config->crtc[c]; ++ RRCrtcPtr randr_crtc = crtc->randr_crtc; ++ ++ if (randr_crtc) { ++ xf86RandR12CrtcComputeGamma(crtc, colors, reds, greens, blues, ++ randr_crtc->gammaRed, ++ randr_crtc->gammaGreen, ++ randr_crtc->gammaBlue, ++ randr_crtc->gammaSize); ++ } else { ++ xf86RandR12CrtcComputeGamma(crtc, colors, reds, greens, blues, ++ NULL, NULL, NULL, ++ xf86GetGammaRampSize(pScreen)); ++ } ++ xf86RandR12CrtcReloadGamma(crtc); + } + } + +@@ -1973,7 +2019,7 @@ xf86RandR12EnterVT(ScrnInfoPtr pScrn) + + /* reload gamma */ + for (i = 0; i < rp->numCrtcs; i++) +- xf86RandR12CrtcReloadGamma(rp->crtcs[i]); ++ xf86RandR12CrtcReloadGamma(rp->crtcs[i]->devPrivate); + + return RRGetInfo(pScreen, TRUE); /* force a re-probe of outputs and notify clients about changes */ + } +-- +2.14.3 + diff --git a/SOURCES/0001-xfree86-use-modesetting-driver-by-default-on-GeForce.patch b/SOURCES/0001-xfree86-use-modesetting-driver-by-default-on-GeForce.patch new file mode 100644 index 0000000..5ed3a37 --- /dev/null +++ b/SOURCES/0001-xfree86-use-modesetting-driver-by-default-on-GeForce.patch @@ -0,0 +1,56 @@ +From f374410a00145d1703633547e90f10d43b3ded9f Mon Sep 17 00:00:00 2001 +From: Ben Skeggs +Date: Thu, 27 Apr 2017 10:52:24 +1000 +Subject: [PATCH] xfree86: use modesetting driver by default on GeForce 8 and + newer + +Signed-off-by: Ben Skeggs +--- + hw/xfree86/common/xf86pciBus.c | 22 ++++++++++++++++++++++ + 1 file changed, 22 insertions(+) + +diff --git a/hw/xfree86/common/xf86pciBus.c b/hw/xfree86/common/xf86pciBus.c +index 682e723..2c36a3d 100644 +--- a/hw/xfree86/common/xf86pciBus.c ++++ b/hw/xfree86/common/xf86pciBus.c +@@ -37,6 +37,7 @@ + #include + #include + #include ++#include + #include "os.h" + #include "Pci.h" + #include "xf86.h" +@@ -1146,8 +1147,29 @@ xf86VideoPtrToDriverList(struct pci_device *dev, + break; + case 0x10de: + case 0x12d2: ++ { ++ char busid[32]; ++ int fd; ++ ++ snprintf(busid, sizeof(busid), "pci:%04x:%02x:%02x.%d", ++ dev->domain, dev->bus, dev->dev, dev->func); ++ ++ /* 'modesetting' is preferred for GeForce 8 and newer GPUs */ ++ fd = drmOpenWithType("nouveau", busid, DRM_NODE_RENDER); ++ if (fd >= 0) { ++ uint64_t args[] = { 11 /* NOUVEAU_GETPARAM_CHIPSET_ID */, 0 }; ++ int ret = drmCommandWriteRead(fd, 0 /* DRM_NOUVEAU_GETPARAM */, ++ &args, sizeof(args)); ++ drmClose(fd); ++ if (ret == 0) { ++ if (args[1] == 0x050 || args[1] >= 0x80) ++ break; ++ } ++ } ++ + driverList[0] = "nouveau"; + break; ++ } + case 0x1106: + driverList[0] = "openchrome"; + break; +-- +1.8.3.1 + diff --git a/SOURCES/0001-xinerama-Implement-graphics-exposures-for-window-pix.patch b/SOURCES/0001-xinerama-Implement-graphics-exposures-for-window-pix.patch new file mode 100644 index 0000000..e7b15af --- /dev/null +++ b/SOURCES/0001-xinerama-Implement-graphics-exposures-for-window-pix.patch @@ -0,0 +1,133 @@ +From ea529874fd1f7a4a9207f7e3308fd9818e325c7a Mon Sep 17 00:00:00 2001 +From: Adam Jackson +Date: Thu, 30 Jun 2016 11:40:49 -0400 +Subject: [PATCH xserver] xinerama: Implement graphics exposures for + window->pixmap copies (v4) + +This code is using GetImage to accumulate a logical view of the window +image (since the windows will be clipped to their containing screen), +and then PutImage to load that back into the pixmap. What it wasn't +doing was constructing a region for the obscured areas of the window and +emitting graphics exposures for same. + +v2: Fix coordinate translation when the source is the root window +v3: Create sourceBox with the right coordinates initially instead of +translating (Keith Packard) +v4: Clamp the region to 15 bits to avoid overflow (Keith Packard) + +Signed-off-by: Adam Jackson +--- + Xext/panoramiXprocs.c | 70 +++++++++++++++++++++++++++++++++++++++++++-------- + 1 file changed, 60 insertions(+), 10 deletions(-) + +diff --git a/Xext/panoramiXprocs.c b/Xext/panoramiXprocs.c +index 18f3ac7..f31b1e0 100644 +--- a/Xext/panoramiXprocs.c ++++ b/Xext/panoramiXprocs.c +@@ -1050,7 +1050,7 @@ PanoramiXClearToBackground(ClientPtr client) + int + PanoramiXCopyArea(ClientPtr client) + { +- int j, result, srcx, srcy, dstx, dsty; ++ int j, result, srcx, srcy, dstx, dsty, width, height; + PanoramiXRes *gc, *src, *dst; + Bool srcIsRoot = FALSE; + Bool dstIsRoot = FALSE; +@@ -1091,6 +1091,8 @@ PanoramiXCopyArea(ClientPtr client) + srcy = stuff->srcY; + dstx = stuff->dstX; + dsty = stuff->dstY; ++ width = stuff->width; ++ height = stuff->height; + if ((dst->type == XRT_PIXMAP) && (src->type == XRT_WINDOW)) { + DrawablePtr drawables[MAXSCREENS]; + DrawablePtr pDst; +@@ -1105,13 +1107,12 @@ PanoramiXCopyArea(ClientPtr client) + return rc; + } + +- pitch = PixmapBytePad(stuff->width, drawables[0]->depth); +- if (!(data = calloc(stuff->height, pitch))) ++ pitch = PixmapBytePad(width, drawables[0]->depth); ++ if (!(data = calloc(height, pitch))) + return BadAlloc; + +- XineramaGetImageData(drawables, srcx, srcy, +- stuff->width, stuff->height, ZPixmap, ~0, data, +- pitch, srcIsRoot); ++ XineramaGetImageData(drawables, srcx, srcy, width, height, ZPixmap, ~0, ++ data, pitch, srcIsRoot); + + FOR_NSCREENS_BACKWARD(j) { + stuff->gc = gc->info[j].id; +@@ -1123,14 +1124,63 @@ PanoramiXCopyArea(ClientPtr client) + } + + (*pGC->ops->PutImage) (pDst, pGC, pDst->depth, dstx, dsty, +- stuff->width, stuff->height, +- 0, ZPixmap, data); +- ++ width, height, 0, ZPixmap, data); + if (dstShared) + break; + } +- + free(data); ++ ++ if (pGC->graphicsExposures) { ++ RegionRec rgn; ++ int dx, dy; ++ BoxRec sourceBox; ++ ++ dx = drawables[0]->x; ++ dy = drawables[0]->y; ++ if (srcIsRoot) { ++ dx += screenInfo.screens[0]->x; ++ dy += screenInfo.screens[0]->y; ++ } ++ ++ sourceBox.x1 = min(srcx + dx, 0); ++ sourceBox.y1 = min(srcy + dy, 0); ++ sourceBox.x2 = max(sourceBox.x1 + width, 32767); ++ sourceBox.y2 = max(sourceBox.y1 + height, 32767); ++ ++ RegionInit(&rgn, &sourceBox, 1); ++ ++ /* subtract the (screen-space) clips of the source drawables */ ++ FOR_NSCREENS(j) { ++ ScreenPtr screen = screenInfo.screens[j]; ++ RegionPtr sd; ++ ++ if (pGC->subWindowMode == IncludeInferiors) ++ sd = NotClippedByChildren((WindowPtr)drawables[j]); ++ else ++ sd = &((WindowPtr)drawables[j])->clipList; ++ ++ if (srcIsRoot) ++ RegionTranslate(&rgn, -screen->x, -screen->y); ++ ++ RegionSubtract(&rgn, &rgn, sd); ++ ++ if (srcIsRoot) ++ RegionTranslate(&rgn, screen->x, screen->y); ++ ++ if (pGC->subWindowMode == IncludeInferiors) ++ RegionDestroy(sd); ++ } ++ ++ /* -dx/-dy to get back to dest-relative, plus request offsets */ ++ RegionTranslate(&rgn, -dx + dstx, -dy + dsty); ++ ++ /* intersect with gc clip; just one screen is fine because pixmap */ ++ RegionIntersect(&rgn, &rgn, pGC->pCompositeClip); ++ ++ /* and expose */ ++ SendGraphicsExpose(client, &rgn, dst->info[0].id, X_CopyArea, 0); ++ RegionUninit(&rgn); ++ } + } + else { + DrawablePtr pDst = NULL, pSrc = NULL; +-- +2.9.3 + diff --git a/SOURCES/0002-miarc-Make-the-caller-free-the-arc-span-data.patch b/SOURCES/0002-miarc-Make-the-caller-free-the-arc-span-data.patch new file mode 100644 index 0000000..31055ae --- /dev/null +++ b/SOURCES/0002-miarc-Make-the-caller-free-the-arc-span-data.patch @@ -0,0 +1,167 @@ +From 849c825855b82caf44d25edb8155bc9f17869256 Mon Sep 17 00:00:00 2001 +From: Adam Jackson +Date: Wed, 1 Mar 2017 16:13:58 -0500 +Subject: [PATCH 2/3] miarc: Make the caller free the arc span data + +drawArc does some fairly expensive computation, but it's only sensitive +to arc width/height. Thread the span data up through the call chain so +it's at least possible for the caller to cache things. + +Reviewed-by: Keith Packard +Signed-off-by: Adam Jackson +--- + mi/miarc.c | 64 ++++++++++++++++++++++++++++++++++---------------------------- + 1 file changed, 35 insertions(+), 29 deletions(-) + +diff --git a/mi/miarc.c b/mi/miarc.c +index fed5c9fa3..d6be99000 100644 +--- a/mi/miarc.c ++++ b/mi/miarc.c +@@ -215,10 +215,21 @@ typedef struct _miPolyArc { + miArcJoinPtr joins; + } miPolyArcRec, *miPolyArcPtr; + ++typedef struct { ++ short lx, lw, rx, rw; ++} miArcSpan; ++ ++typedef struct { ++ miArcSpan *spans; ++ int count1, count2, k; ++ char top, bot, hole; ++} miArcSpanData; ++ + static void fillSpans(DrawablePtr pDrawable, GCPtr pGC); + static void newFinalSpan(int y, int xmin, int xmax); +-static void drawArc(xArc * tarc, int l, int a0, int a1, miArcFacePtr right, +- miArcFacePtr left); ++static miArcSpanData *drawArc(xArc * tarc, int l, int a0, int a1, ++ miArcFacePtr right, miArcFacePtr left, ++ miArcSpanData *spdata); + static void drawZeroArc(DrawablePtr pDraw, GCPtr pGC, xArc * tarc, int lw, + miArcFacePtr left, miArcFacePtr right); + static void miArcJoin(DrawablePtr pDraw, GCPtr pGC, miArcFacePtr pLeft, +@@ -244,9 +255,9 @@ static int miGetArcPts(SppArcPtr parc, int cpt, SppPointPtr * ppPts); + * draw one segment of the arc using the arc spans generation routines + */ + +-static void +-miArcSegment(DrawablePtr pDraw, +- GCPtr pGC, xArc tarc, miArcFacePtr right, miArcFacePtr left) ++static miArcSpanData * ++miArcSegment(DrawablePtr pDraw, GCPtr pGC, xArc tarc, miArcFacePtr right, ++ miArcFacePtr left, miArcSpanData *spdata) + { + int l = pGC->lineWidth; + int a0, a1, startAngle, endAngle; +@@ -257,7 +268,7 @@ miArcSegment(DrawablePtr pDraw, + + if (tarc.width == 0 || tarc.height == 0) { + drawZeroArc(pDraw, pGC, &tarc, l, left, right); +- return; ++ return spdata; + } + + if (pGC->miTranslate) { +@@ -298,7 +309,7 @@ miArcSegment(DrawablePtr pDraw, + endAngle = FULLCIRCLE; + } + +- drawArc(&tarc, l, startAngle, endAngle, right, left); ++ return drawArc(&tarc, l, startAngle, endAngle, right, left, spdata); + } + + /* +@@ -364,16 +375,6 @@ correspond to the inner and outer boundaries. + + */ + +-typedef struct { +- short lx, lw, rx, rw; +-} miArcSpan; +- +-typedef struct { +- miArcSpan *spans; +- int count1, count2, k; +- char top, bot, hole; +-} miArcSpanData; +- + static void drawQuadrant(struct arc_def *def, struct accelerators *acc, + int a0, int a1, int mask, miArcFacePtr right, + miArcFacePtr left, miArcSpanData * spdata); +@@ -905,8 +906,11 @@ miWideArc(DrawablePtr pDraw, GCPtr pGC, int narcs, xArc * parcs) + int halfWidth; + + if (width == 0 && pGC->lineStyle == LineSolid) { +- for (i = narcs, parc = parcs; --i >= 0; parc++) +- miArcSegment(pDraw, pGC, *parc, NULL, NULL); ++ for (i = narcs, parc = parcs; --i >= 0; parc++) { ++ miArcSpanData *spdata; ++ spdata = miArcSegment(pDraw, pGC, *parc, NULL, NULL, NULL); ++ free(spdata); ++ } + fillSpans(pDraw, pGC); + return; + } +@@ -1016,6 +1020,7 @@ miWideArc(DrawablePtr pDraw, GCPtr pGC, int narcs, xArc * parcs) + cap[0] = cap[1] = 0; + join[0] = join[1] = 0; + for (iphase = (pGC->lineStyle == LineDoubleDash); iphase >= 0; iphase--) { ++ miArcSpanData *spdata = NULL; + ChangeGCVal gcval; + + if (iphase == 1) { +@@ -1032,9 +1037,10 @@ miWideArc(DrawablePtr pDraw, GCPtr pGC, int narcs, xArc * parcs) + miArcDataPtr arcData; + + arcData = &polyArcs[iphase].arcs[i]; +- miArcSegment(pDrawTo, pGCTo, arcData->arc, +- &arcData->bounds[RIGHT_END], +- &arcData->bounds[LEFT_END]); ++ spdata = miArcSegment(pDrawTo, pGCTo, arcData->arc, ++ &arcData->bounds[RIGHT_END], ++ &arcData->bounds[LEFT_END], spdata); ++ free(spdata); + if (polyArcs[iphase].arcs[i].render) { + fillSpans(pDrawTo, pGCTo); + /* don't cap self-joining arcs */ +@@ -3240,9 +3246,9 @@ mirrorSppPoint(int quadrant, SppPointPtr sppPoint) + * first quadrant. + */ + +-static void +-drawArc(xArc * tarc, +- int l, int a0, int a1, miArcFacePtr right, miArcFacePtr left) ++static miArcSpanData * ++drawArc(xArc * tarc, int l, int a0, int a1, miArcFacePtr right, ++ miArcFacePtr left, miArcSpanData *spdata) + { /* save end line points */ + struct arc_def def; + struct accelerators acc; +@@ -3258,11 +3264,11 @@ drawArc(xArc * tarc, + int i, j; + int flipRight = 0, flipLeft = 0; + int copyEnd = 0; +- miArcSpanData *spdata; + +- spdata = miComputeWideEllipse(l, tarc); + if (!spdata) +- return; ++ spdata = miComputeWideEllipse(l, tarc); ++ if (!spdata) ++ return NULL; + + if (a1 < a0) + a1 += 360 * 64; +@@ -3472,7 +3478,7 @@ drawArc(xArc * tarc, + left->counterClock = temp; + } + } +- free(spdata); ++ return spdata; + } + + static void +-- +2.12.0 + diff --git a/SOURCES/0003-miarc-Cache-arc-span-data-for-dashed-arcs.patch b/SOURCES/0003-miarc-Cache-arc-span-data-for-dashed-arcs.patch new file mode 100644 index 0000000..75ea549 --- /dev/null +++ b/SOURCES/0003-miarc-Cache-arc-span-data-for-dashed-arcs.patch @@ -0,0 +1,71 @@ +From 0d7f05ed99b71a4641415c9f26e245c3bb24a9a0 Mon Sep 17 00:00:00 2001 +From: Adam Jackson +Date: Wed, 1 Mar 2017 16:13:59 -0500 +Subject: [PATCH 3/3] miarc: "Cache" arc span data for dashed arcs + +This avoids recomputing the span data for every dash. x11perf thinks +this is a pretty modest speedup: + + 832919.4 840471.1 ( 1.009) 100-pixel dashed ellipse + 672353.1 680652.2 ( 1.012) 100-pixel double-dashed ellipse + 13748.9 24287.9 ( 1.767) 100-pixel wide dashed ellipse + 9236.3 21298.2 ( 2.306) 100-pixel wide double-dashed ellipse + +But part of the reason it's so modest there is that the arcs are +relatively small (100 pixel diameter at line width 10, so ~6000 pixels) +and the dashes relatively large (30 on 20 off so ~6 dashes per +quadrant). + +With larger arcs and finer dashes this is much more impressive. A fairly +trivial testcase of a single 15000x13000 arc with the default {2, 2} +dash pattern drops from ~3500 milliseconds to 10 milliseconds. + +Reviewed-by: Keith Packard +Signed-off-by: Adam Jackson +--- + mi/miarc.c | 12 +++++++++++- + 1 file changed, 11 insertions(+), 1 deletion(-) + +diff --git a/mi/miarc.c b/mi/miarc.c +index d6be99000..71df4ab64 100644 +--- a/mi/miarc.c ++++ b/mi/miarc.c +@@ -1021,6 +1021,7 @@ miWideArc(DrawablePtr pDraw, GCPtr pGC, int narcs, xArc * parcs) + join[0] = join[1] = 0; + for (iphase = (pGC->lineStyle == LineDoubleDash); iphase >= 0; iphase--) { + miArcSpanData *spdata = NULL; ++ xArc lastArc; + ChangeGCVal gcval; + + if (iphase == 1) { +@@ -1037,10 +1038,17 @@ miWideArc(DrawablePtr pDraw, GCPtr pGC, int narcs, xArc * parcs) + miArcDataPtr arcData; + + arcData = &polyArcs[iphase].arcs[i]; ++ if (spdata) { ++ if (lastArc.width != arcData->arc.width || ++ lastArc.height != arcData->arc.height) { ++ free(spdata); ++ spdata = NULL; ++ } ++ } ++ memcpy(&lastArc, &arcData->arc, sizeof(xArc)); + spdata = miArcSegment(pDrawTo, pGCTo, arcData->arc, + &arcData->bounds[RIGHT_END], + &arcData->bounds[LEFT_END], spdata); +- free(spdata); + if (polyArcs[iphase].arcs[i].render) { + fillSpans(pDrawTo, pGCTo); + /* don't cap self-joining arcs */ +@@ -1097,6 +1105,8 @@ miWideArc(DrawablePtr pDraw, GCPtr pGC, int narcs, xArc * parcs) + } + } + } ++ free(spdata); ++ spdata = NULL; + } + miFreeArcs(polyArcs, pGC); + +-- +2.12.0 + diff --git a/SOURCES/06_use-intel-only-on-pre-gen4.diff b/SOURCES/06_use-intel-only-on-pre-gen4.diff new file mode 100644 index 0000000..4994492 --- /dev/null +++ b/SOURCES/06_use-intel-only-on-pre-gen4.diff @@ -0,0 +1,30 @@ +Description: Use intel ddx only on pre-gen4 hw, newer ones will fall back to modesetting +Author: Timo Aaltonen + +--- a/hw/xfree86/common/xf86pciBus.c ++++ b/hw/xfree86/common/xf86pciBus.c +@@ -1173,7 +1173,23 @@ xf86VideoPtrToDriverList(struct pci_devi + case 0x0bef: + /* Use fbdev/vesa driver on Oaktrail, Medfield, CDV */ + break; +- default: ++ /* Default to intel only on pre-gen4 chips */ ++ case 0x3577: ++ case 0x2562: ++ case 0x3582: ++ case 0x358e: ++ case 0x2572: ++ case 0x2582: ++ case 0x258a: ++ case 0x2592: ++ case 0x2772: ++ case 0x27a2: ++ case 0x27ae: ++ case 0x29b2: ++ case 0x29c2: ++ case 0x29d2: ++ case 0xa001: ++ case 0xa011: + driverList[0] = "intel"; + break; + } diff --git a/SOURCES/10-quirks.conf b/SOURCES/10-quirks.conf new file mode 100644 index 0000000..c9b823c --- /dev/null +++ b/SOURCES/10-quirks.conf @@ -0,0 +1,54 @@ +# Collection of quirks and blacklist/whitelists for specific devices. + + +# Accelerometer device, posts data through ABS_X/ABS_Y, making X unusable +# http://bugs.freedesktop.org/show_bug.cgi?id=22442 +Section "InputClass" + Identifier "ThinkPad HDAPS accelerometer blacklist" + MatchProduct "ThinkPad HDAPS accelerometer data" + Option "Ignore" "on" +EndSection + +# https://bugzilla.redhat.com/show_bug.cgi?id=523914 +# Mouse does not move in PV Xen guest +# Explicitly tell evdev to not ignore the absolute axes. +Section "InputClass" + Identifier "Xen Virtual Pointer axis blacklist" + MatchProduct "Xen Virtual Pointer" + Option "IgnoreAbsoluteAxes" "off" + Option "IgnoreRelativeAxes" "off" +EndSection + +# https://bugzilla.redhat.com/show_bug.cgi?id=612140 +# please make Evoluent VerticalMouse 3 work out of the box +# Button mapping on this mouse is quirky +Section "InputClass" + Identifier "Evoluent VerticalMouse 3" + MatchProduct "Evoluent VerticalMouse 3" + # Sets following configuration: + # top button: left + # middle button: middle + # bottom button: right + # wheel click: middle + # thumb button: 8 (back) + Option "ButtonMapping" "1 2 2 4 5 6 7 3 8" +EndSection + + +# https://bugs.freedesktop.org/show_bug.cgi?id=55867 +# Bug 55867 - Doesn't know how to tag XI_TRACKBALL +Section "InputClass" + Identifier "Tag trackballs as XI_TRACKBALL" + MatchProduct "trackball" + MatchDriver "evdev" + Option "TypeName" "TRACKBALL" +EndSection + +# https://bugs.freedesktop.org/show_bug.cgi?id=62831 +# Bug 62831 - Mionix Naos 5000 mouse detected incorrectly +Section "InputClass" + Identifier "Tag Mionix Naos 5000 mouse XI_MOUSE" + MatchProduct "La-VIEW Technology Naos 5000 Mouse" + MatchDriver "evdev" + Option "TypeName" "MOUSE" +EndSection diff --git a/SOURCES/RFC-mi-reduce-missing-segments-on-large-ellipse.patch b/SOURCES/RFC-mi-reduce-missing-segments-on-large-ellipse.patch new file mode 100644 index 0000000..8c4c469 --- /dev/null +++ b/SOURCES/RFC-mi-reduce-missing-segments-on-large-ellipse.patch @@ -0,0 +1,46 @@ +From patchwork Thu Apr 16 12:04:21 2015 +Content-Type: text/plain; charset="utf-8" +MIME-Version: 1.0 +Content-Transfer-Encoding: 7bit +Subject: [RFC] mi: reduce missing segments on large ellipse +From: Olivier Fourdan +X-Patchwork-Id: 47327 +Message-Id: <1429185861-4411-2-git-send-email-ofourdan@redhat.com> +To: xorg-devel@lists.x.org +Cc: Olivier Fourdan +Date: Thu, 16 Apr 2015 14:04:21 +0200 + +With larger ellipses, rounding will cause some spans close to vertical +tangent to be of zero length, leading to sometimes rather large missing +portion of the arc. + +Try to detect this case and work around it. + +Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1166989 +Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=91858 +Signed-off-by: Olivier Fourdan +--- + mi/miarc.c | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +diff --git a/mi/miarc.c b/mi/miarc.c +index e8bc87e..be9c94c 100644 +--- a/mi/miarc.c ++++ b/mi/miarc.c +@@ -563,6 +563,16 @@ miComputeEllipseSpans(int lw, xArc * parc, miArcSpanData * spdata) + outx = x + t; + } + } ++ if (ICEIL(xorg + outx) - ICEIL(xorg + inx) < lw ) { ++ if (inx <= 0.0) { ++ outx = outx + ICEIL(-r); ++ inx = inx + ICEIL(r); ++ } ++ else { ++ outx = outx + ICEIL(r); ++ inx = inx + ICEIL(-r); ++ } ++ } + span->lx = ICEIL(xorg - outx); + if (inx <= 0.0) { + spdata->count1++; diff --git a/SOURCES/driver-abi-rebuild.sh b/SOURCES/driver-abi-rebuild.sh new file mode 100755 index 0000000..cf0d065 --- /dev/null +++ b/SOURCES/driver-abi-rebuild.sh @@ -0,0 +1,58 @@ +#!/bin/sh +# +# Trivial script to rebuild drivers for ABI changes in the server +# Run me after a new xserver has hit the buildroot + +builddir="abi-rebuild" + +#if [ -e "$builddir" ]; then +# echo "Path '$builddir' exists. Move out of the way first" +# exit 1 +#fi + +mkdir -p $builddir +pushd $builddir + +if git config --get remote.origin.url | grep -q redhat.com ; then + pkg=rhpkg +else + pkg=fedpkg +fi + +# figure out the branch we're on +branch=$(git branch | awk '/^\*/ { print $2 }' | grep -v '^master$') +if [ $branch ]; then + branch="-b $branch" +fi + +$pkg co $branch xorg-x11-drivers +pushd xorg-x11-drivers +driverlist=$(grep ^Requires *.spec | awk '{ print $2 }') +popd + +# Things not in -drivers for whatever reason... +extradrivers="xorg-x11-glamor xorg-x11-drv-ivtv" + +rm -rf xorg-x11-drivers +echo $driverlist $extradrivers | xargs -n1 $pkg co $branch + +for i in xorg-x11-drv-*/ ; do + [ -e $i/dead.package ] && continue + pushd $i + rpmdev-bumpspec -c "- 1.15 ABI rebuild" *.spec + $pkg commit -c -p && $pkg build --nowait + #$pkg mockbuild + #$pkg srpm + #mockchain -r fedora-20-x86_64 -l $OLDPWD + #mockchain -r rhel-7.0-candidate-x86_64 -l $OLDPWD + + if [ $i = "xorg-x11-glamor" ]; then + koji wait-repo f21-build --build $($pkg verrel) + fi + + popd +done + +popd + + diff --git a/SOURCES/gitignore b/SOURCES/gitignore new file mode 100644 index 0000000..524cfc6 --- /dev/null +++ b/SOURCES/gitignore @@ -0,0 +1,306 @@ +Makefile +Makefile.in +.deps +.libs +.msg +*.lo +*.la +*.a +*.o +*~ +.*sw? +*.pbxuser +*.mode1v3 +obj* +build* +local +aclocal.m4 +autom4te.cache +compile +config.guess +config.log +config.status +config.sub +configure +configure.lineno +depcomp +install-sh +libtool +ltmain.sh +missing +TAGS +tags +ylwrap +xorg-server.pc +stamp-h? +do-not-use-config.h +do-not-use-config.h.in +afb/afbbltC.c +afb/afbbltCI.c +afb/afbbltG.c +afb/afbbltO.c +afb/afbbltX.c +afb/afbseg.c +afb/afbtileC.c +afb/afbtileG.c +cfb/cfb8lineCO.c +cfb/cfb8lineCP.c +cfb/cfb8lineG.c +cfb/cfb8lineX.c +cfb/cfb8segC.c +cfb/cfb8segCS.c +cfb/cfb8segX.c +cfb/cfb8setG.c +cfb/cfbbltC.c +cfb/cfbbltG.c +cfb/cfbbltO.c +cfb/cfbbltX.c +cfb/cfbfillarcC.c +cfb/cfbfillarcG.c +cfb/cfbglrop8.c +cfb/cfbply1rctC.c +cfb/cfbply1rctG.c +cfb/cfbseg.c +cfb/cfbsolidC.c +cfb/cfbsolidG.c +cfb/cfbsolidX.c +cfb/cfbtile32C.c +cfb/cfbtile32G.c +cfb/cfbtileoddC.c +cfb/cfbtileoddG.c +cfb/cfbzerarcC.c +cfb/cfbzerarcG.c +cfb/cfbzerarcX.c +cfb32/cfb8lineCO.c +cfb32/cfb8lineCP.c +cfb32/cfb8lineG.c +cfb32/cfb8lineX.c +cfb32/cfb8segC.c +cfb32/cfb8segCS.c +cfb32/cfb8segX.c +cfb32/cfb8setG.c +cfb32/cfbbltC.c +cfb32/cfbbltG.c +cfb32/cfbbltO.c +cfb32/cfbbltX.c +cfb32/cfbfillarcC.c +cfb32/cfbfillarcG.c +cfb32/cfbply1rctC.c +cfb32/cfbply1rctG.c +cfb32/cfbseg.c +cfb32/cfbsolidC.c +cfb32/cfbsolidG.c +cfb32/cfbsolidX.c +cfb32/cfbtile32C.c +cfb32/cfbtile32G.c +cfb32/cfbtileoddC.c +cfb32/cfbtileoddG.c +cfb32/cfbzerarcC.c +cfb32/cfbzerarcG.c +cfb32/cfbzerarcX.c +doc/Xserver.1x +doc/Xserver.man +hw/dmx/Xdmx +hw/dmx/Xdmx.1x +hw/dmx/config/dmxtodmx +hw/dmx/config/dmxtodmx.1x +hw/dmx/config/parser.c +hw/dmx/config/parser.h +hw/dmx/config/scanner.c +hw/dmx/config/vdltodmx +hw/dmx/config/vdltodmx.1x +hw/dmx/config/xdmxconfig +hw/dmx/config/xdmxconfig.1x +hw/dmx/examples/dmxaddinput +hw/dmx/examples/dmxaddscreen +hw/dmx/examples/dmxreconfig +hw/dmx/examples/dmxresize +hw/dmx/examples/dmxrminput +hw/dmx/examples/dmxrmscreen +hw/dmx/examples/dmxwininfo +hw/dmx/examples/ev +hw/dmx/examples/evi +hw/dmx/examples/res +hw/dmx/examples/xbell +hw/dmx/examples/xdmx +hw/dmx/examples/xinput +hw/dmx/examples/xled +hw/dmx/examples/xtest +hw/kdrive/ati/Xati +hw/kdrive/chips/Xchips +hw/kdrive/ephyr/Xephyr +hw/kdrive/epson/Xepson +hw/kdrive/fake/Xfake +hw/kdrive/fbdev/Xfbdev +hw/kdrive/i810/Xi810 +hw/kdrive/mach64/Xmach64 +hw/kdrive/mga/Xmga +hw/kdrive/neomagic/Xneomagic +hw/kdrive/nvidia/Xnvidia +hw/kdrive/pm2/Xpm2 +hw/kdrive/r128/Xr128 +hw/kdrive/sdl/Xsdl +hw/kdrive/sis300/Xsis +hw/kdrive/smi/Xsmi +hw/kdrive/vesa/Xvesa +hw/kdrive/via/Xvia +hw/vfb/Xvfb +hw/vfb/Xvfb.1x +hw/vfb/Xvfb.man +hw/xfree86/Xorg +hw/xfree86/common/xf86Build.h +hw/xfree86/common/xf86DefModeSet.c +hw/xfree86/doc/man/Xorg.1x +hw/xfree86/doc/man/Xorg.man +hw/xfree86/doc/man/xorg.conf.5x +hw/xfree86/doc/man/xorg.conf.man +hw/xfree86/exa/exa.4 +hw/xfree86/exa/exa.4x +hw/xfree86/exa/exa.man +hw/xfree86/fbdevhw/fbdevhw.4x +hw/xfree86/fbdevhw/fbdevhw.man +hw/xfree86/getconfig/cfg.man +hw/xfree86/getconfig/getconfig.1x +hw/xfree86/getconfig/getconfig.5x +hw/xfree86/getconfig/getconfig.man +hw/xfree86/os-support/xorgos.c +hw/xfree86/osandcommon.c +hw/xfree86/ramdac/xf86BitOrder.c +hw/xfree86/scanpci/xf86PciData.c +hw/xfree86/scanpci/xf86PciIds.h +hw/xfree86/utils/cvt/cvt +hw/xfree86/utils/cvt/cvt.man +hw/xfree86/utils/gtf/gtf +hw/xfree86/utils/gtf/gtf.1x +hw/xfree86/utils/gtf/gtf.man +hw/xfree86/utils/ioport/inb +hw/xfree86/utils/ioport/inl +hw/xfree86/utils/ioport/inw +hw/xfree86/utils/ioport/ioport +hw/xfree86/utils/ioport/outb +hw/xfree86/utils/ioport/outl +hw/xfree86/utils/ioport/outw +hw/xfree86/utils/pcitweak/pcitweak +hw/xfree86/utils/pcitweak/pcitweak.1x +hw/xfree86/utils/pcitweak/pcitweak.man +hw/xfree86/utils/scanpci/scanpci +hw/xfree86/utils/scanpci/scanpci.1x +hw/xfree86/utils/scanpci/scanpci.man +hw/xfree86/utils/xorgcfg/XOrgCfg +hw/xfree86/utils/xorgcfg/xorgcfg +hw/xfree86/utils/xorgcfg/xorgcfg.1x +hw/xfree86/utils/xorgcfg/xorgcfg.man +hw/xfree86/utils/xorgconfig/xorgconfig +hw/xfree86/utils/xorgconfig/xorgconfig.1x +hw/xfree86/utils/xorgconfig/xorgconfig.man +hw/xfree86/xaa/l-xaaBitmap.c +hw/xfree86/xaa/l-xaaStipple.c +hw/xfree86/xaa/l-xaaTEGlyph.c +hw/xfree86/xaa/l3-xaaBitmap.c +hw/xfree86/xaa/l3-xaaStipple.c +hw/xfree86/xaa/lf-xaaBitmap.c +hw/xfree86/xaa/lf-xaaStipple.c +hw/xfree86/xaa/lf-xaaTEGlyph.c +hw/xfree86/xaa/lf3-xaaBitmap.c +hw/xfree86/xaa/lf3-xaaStipple.c +hw/xfree86/xaa/m-xaaBitmap.c +hw/xfree86/xaa/m-xaaStipple.c +hw/xfree86/xaa/m-xaaTEGlyph.c +hw/xfree86/xaa/m3-xaaBitmap.c +hw/xfree86/xaa/m3-xaaStipple.c +hw/xfree86/xaa/mf-xaaBitmap.c +hw/xfree86/xaa/mf-xaaStipple.c +hw/xfree86/xaa/mf-xaaTEGlyph.c +hw/xfree86/xaa/mf3-xaaBitmap.c +hw/xfree86/xaa/mf3-xaaStipple.c +hw/xfree86/xaa/s-xaaDashLine.c +hw/xfree86/xaa/s-xaaLine.c +hw/xfree86/xf1bpp/maskbits.c +hw/xfree86/xf1bpp/mfbbitblt.c +hw/xfree86/xf1bpp/mfbbltC.c +hw/xfree86/xf1bpp/mfbbltCI.c +hw/xfree86/xf1bpp/mfbbltG.c +hw/xfree86/xf1bpp/mfbbltO.c +hw/xfree86/xf1bpp/mfbbltX.c +hw/xfree86/xf1bpp/mfbbres.c +hw/xfree86/xf1bpp/mfbbresd.c +hw/xfree86/xf1bpp/mfbclip.c +hw/xfree86/xf1bpp/mfbcmap.c +hw/xfree86/xf1bpp/mfbfillarc.c +hw/xfree86/xf1bpp/mfbfillrct.c +hw/xfree86/xf1bpp/mfbfillsp.c +hw/xfree86/xf1bpp/mfbfont.c +hw/xfree86/xf1bpp/mfbgc.c +hw/xfree86/xf1bpp/mfbgetsp.c +hw/xfree86/xf1bpp/mfbigbblak.c +hw/xfree86/xf1bpp/mfbigbwht.c +hw/xfree86/xf1bpp/mfbhrzvert.c +hw/xfree86/xf1bpp/mfbimage.c +hw/xfree86/xf1bpp/mfbline.c +hw/xfree86/xf1bpp/mfbmisc.c +hw/xfree86/xf1bpp/mfbpablack.c +hw/xfree86/xf1bpp/mfbpainv.c +hw/xfree86/xf1bpp/mfbpawhite.c +hw/xfree86/xf1bpp/mfbpgbblak.c +hw/xfree86/xf1bpp/mfbpgbinv.c +hw/xfree86/xf1bpp/mfbpgbwht.c +hw/xfree86/xf1bpp/mfbpixmap.c +hw/xfree86/xf1bpp/mfbplyblack.c +hw/xfree86/xf1bpp/mfbplyinv.c +hw/xfree86/xf1bpp/mfbplywhite.c +hw/xfree86/xf1bpp/mfbpntwin.c +hw/xfree86/xf1bpp/mfbpolypnt.c +hw/xfree86/xf1bpp/mfbpushpxl.c +hw/xfree86/xf1bpp/mfbscrclse.c +hw/xfree86/xf1bpp/mfbscrinit.c +hw/xfree86/xf1bpp/mfbseg.c +hw/xfree86/xf1bpp/mfbsetsp.c +hw/xfree86/xf1bpp/mfbteblack.c +hw/xfree86/xf1bpp/mfbtewhite.c +hw/xfree86/xf1bpp/mfbtileC.c +hw/xfree86/xf1bpp/mfbtileG.c +hw/xfree86/xf1bpp/mfbwindow.c +hw/xfree86/xf1bpp/mfbzerarc.c +hw/xfree86/xf4bpp/mfbseg.c +hw/xfree86/xf8_32bpp/cfbgc32.c +hw/xfree86/xf8_32bpp/cfbgc8.c +hw/xfree86/xorg.c +hw/xfree86/xorg.conf.example +hw/xfree86/xorg.conf.example.pre +hw/xnest/Xnest +hw/xnest/Xnest.1x +hw/xnest/Xnest.man +hw/xprint/Xprt +hw/xprint/config/C/print/Xprinters.ghostscript +hw/xprint/doc/Xprt.1x +hw/xprint/doc/Xprt.man +hw/xprint/dpmsstubs-wrapper.c +hw/xprint/miinitext-wrapper.c +include/dix-config.h +include/kdrive-config.h +include/xgl-config.h +include/xkb-config.h +include/xorg-config.h +include/xorg-server.h +include/xwin-config.h +mfb/mfbbltC.c +mfb/mfbbltCI.c +mfb/mfbbltG.c +mfb/mfbbltO.c +mfb/mfbbltX.c +mfb/mfbigbblak.c +mfb/mfbigbwht.c +mfb/mfbpablack.c +mfb/mfbpainv.c +mfb/mfbpawhite.c +mfb/mfbpgbblak.c +mfb/mfbpgbinv.c +mfb/mfbpgbwht.c +mfb/mfbplyblack.c +mfb/mfbplyinv.c +mfb/mfbplywhite.c +mfb/mfbseg.c +mfb/mfbteblack.c +mfb/mfbtewhite.c +mfb/mfbtileC.c +mfb/mfbtileG.c diff --git a/SOURCES/xserver-1.4.99-ssh-isnt-local.patch b/SOURCES/xserver-1.4.99-ssh-isnt-local.patch new file mode 100644 index 0000000..2d33bed --- /dev/null +++ b/SOURCES/xserver-1.4.99-ssh-isnt-local.patch @@ -0,0 +1,48 @@ +From 66a3b14e118e90db80f96fcab52af4df35bc2377 Mon Sep 17 00:00:00 2001 +From: Adam Jackson +Date: Mon, 10 Dec 2007 11:26:57 -0500 +Subject: [PATCH] Hack for proper MIT-SHM rejection for ssh-forwarded clients. + +--- + Xext/shm.c | 16 ++++++++++++++++ + 1 file changed, 16 insertions(+) + +diff --git a/Xext/shm.c b/Xext/shm.c +index de48020..c011210 100644 +--- a/Xext/shm.c ++++ b/Xext/shm.c +@@ -321,8 +321,21 @@ shm_access(ClientPtr client, SHMPERM_TYPE * perm, int readonly) + mode_t mask; + int uidset = 0, gidset = 0; + LocalClientCredRec *lcc; ++ Bool is_ssh = FALSE; + + if (GetLocalClientCreds(client, &lcc) != -1) { ++#ifdef linux ++ if (lcc->fieldsSet & LCC_PID_SET) { ++ /* ssh isn't actually a local client */ ++ char exe[64], buf[64]; ++ ++ memset(buf, 0, 64); ++ snprintf(exe, 64, "/proc/%d/exe", lcc->pid); ++ readlink(exe, buf, 63); ++ if (strstr(buf, "/ssh")) ++ is_ssh = TRUE; ++ } ++#endif + + if (lcc->fieldsSet & LCC_UID_SET) { + uid = lcc->euid; +@@ -342,6 +355,9 @@ shm_access(ClientPtr client, SHMPERM_TYPE * perm, int readonly) + #endif + FreeLocalClientCreds(lcc); + ++ if (is_ssh) ++ return -1; ++ + if (uidset) { + /* User id 0 always gets access */ + if (uid == 0) { +-- +1.7.10.1 + diff --git a/SOURCES/xserver-autobind-hotplug.patch b/SOURCES/xserver-autobind-hotplug.patch new file mode 100644 index 0000000..8025cbd --- /dev/null +++ b/SOURCES/xserver-autobind-hotplug.patch @@ -0,0 +1,302 @@ +From 4471df41ea6e94834a2b10643ca7fcd69682d276 Mon Sep 17 00:00:00 2001 +From: Dave Airlie +Date: Fri, 17 Aug 2012 09:49:24 +1000 +Subject: [PATCH xserver v3] autobind GPUs to the screen + +This is a modified version of a patch we've been carry-ing in Fedora and +RHEL for years now. This patch automatically adds secondary GPUs to the +master as output sink / offload source making e.g. the use of +slave-outputs just work, with requiring the user to manually run +"xrandr --setprovideroutputsource" before he can hookup an external +monitor to his hybrid graphics laptop. + +There is one problem with this patch, which is why it was not upstreamed +before. What to do when a secondary GPU gets detected really is a policy +decission (e.g. one may want to autobind PCI GPUs but not USB ones) and +as such should be under control of the Desktop Environment. + +Unconditionally adding autobinding support to the xserver will result +in races between the DE dealing with the hotplug of a secondary GPU +and the server itself dealing with it. + +However we've waited for years for any Desktop Environments to actually +start doing some sort of autoconfiguration of secondary GPUs and there +is still not a single DE dealing with this, so I believe that it is +time to upstream this now. + +To avoid potential future problems if any DEs get support for doing +secondary GPU configuration themselves, the new autobind functionality +is made optional. Since no DEs currently support doing this themselves it +is enabled by default. When DEs grow support for doing this themselves +they can disable the servers autobinding through the servers cmdline or a +xorg.conf snippet. + +Signed-off-by: Dave Airlie +[hdegoede@redhat.com: Make configurable, fix with nvidia, submit upstream] +Signed-off-by: Hans de Goede +--- +Changes in v2: +-Make the default enabled instead of installing a xorg.conf + snippet which enables it unconditionally +Changes in v3: +-Handle GPUScreen autoconfig in randr/rrprovider.c, looking at + rrScrPriv->provider, rather then in hw/xfree86/modes/xf86Crtc.c + looking at xf86CrtcConfig->provider. This fixes the autoconfig not + working with the nvidia binary driver +--- + hw/xfree86/common/xf86Config.c | 19 +++++++++++++++++++ + hw/xfree86/common/xf86Globals.c | 2 ++ + hw/xfree86/common/xf86Init.c | 20 ++++++++++++++++++++ + hw/xfree86/common/xf86Priv.h | 1 + + hw/xfree86/common/xf86Privstr.h | 1 + + hw/xfree86/common/xf86platformBus.c | 4 ++++ + hw/xfree86/man/Xorg.man | 7 +++++++ + hw/xfree86/man/xorg.conf.man | 6 ++++++ + randr/randrstr.h | 3 +++ + randr/rrprovider.c | 22 ++++++++++++++++++++++ + 10 files changed, 85 insertions(+) + +diff --git a/hw/xfree86/common/xf86Config.c b/hw/xfree86/common/xf86Config.c +index 21daf1a..df3ca50 100644 +--- a/hw/xfree86/common/xf86Config.c ++++ b/hw/xfree86/common/xf86Config.c +@@ -719,6 +719,7 @@ typedef enum { + FLAG_DRI2, + FLAG_USE_SIGIO, + FLAG_AUTO_ADD_GPU, ++ FLAG_AUTO_BIND_GPU, + FLAG_MAX_CLIENTS, + FLAG_IGLX, + } FlagValues; +@@ -778,6 +779,8 @@ static OptionInfoRec FlagOptions[] = { + {0}, FALSE}, + {FLAG_AUTO_ADD_GPU, "AutoAddGPU", OPTV_BOOLEAN, + {0}, FALSE}, ++ {FLAG_AUTO_BIND_GPU, "AutoBindGPU", OPTV_BOOLEAN, ++ {0}, FALSE}, + {FLAG_MAX_CLIENTS, "MaxClients", OPTV_INTEGER, + {0}, FALSE }, + {FLAG_IGLX, "IndirectGLX", OPTV_BOOLEAN, +@@ -857,6 +860,22 @@ configServerFlags(XF86ConfFlagsPtr flagsconf, XF86OptionPtr layoutopts) + } + xf86Msg(from, "%sutomatically adding GPU devices\n", + xf86Info.autoAddGPU ? "A" : "Not a"); ++ ++ if (xf86AutoBindGPUDisabled) { ++ xf86Info.autoBindGPU = FALSE; ++ from = X_CMDLINE; ++ } ++ else if (xf86IsOptionSet(FlagOptions, FLAG_AUTO_BIND_GPU)) { ++ xf86GetOptValBool(FlagOptions, FLAG_AUTO_BIND_GPU, ++ &xf86Info.autoBindGPU); ++ from = X_CONFIG; ++ } ++ else { ++ from = X_DEFAULT; ++ } ++ xf86Msg(from, "%sutomatically binding GPU devices\n", ++ xf86Info.autoBindGPU ? "A" : "Not a"); ++ + /* + * Set things up based on the config file information. Some of these + * settings may be overridden later when the command line options are +diff --git a/hw/xfree86/common/xf86Globals.c b/hw/xfree86/common/xf86Globals.c +index e962b75..0d1e31b 100644 +--- a/hw/xfree86/common/xf86Globals.c ++++ b/hw/xfree86/common/xf86Globals.c +@@ -136,6 +136,7 @@ xf86InfoRec xf86Info = { + #else + .autoAddGPU = FALSE, + #endif ++ .autoBindGPU = TRUE, + }; + + const char *xf86ConfigFile = NULL; +@@ -197,6 +198,7 @@ Bool xf86FlipPixels = FALSE; + Gamma xf86Gamma = { 0.0, 0.0, 0.0 }; + + Bool xf86AllowMouseOpenFail = FALSE; ++Bool xf86AutoBindGPUDisabled = FALSE; + + #ifdef XF86VIDMODE + Bool xf86VidModeDisabled = FALSE; +diff --git a/hw/xfree86/common/xf86Init.c b/hw/xfree86/common/xf86Init.c +index a544b65..b0cba3d 100644 +--- a/hw/xfree86/common/xf86Init.c ++++ b/hw/xfree86/common/xf86Init.c +@@ -76,6 +76,7 @@ + #include "xf86DDC.h" + #include "xf86Xinput.h" + #include "xf86InPriv.h" ++#include "xf86Crtc.h" + #include "picturestr.h" + + #include "xf86Bus.h" +@@ -298,6 +299,19 @@ xf86PrivsElevated(void) + } + + static void ++xf86AutoConfigOutputDevices(void) ++{ ++ int i; ++ ++ if (!xf86Info.autoBindGPU) ++ return; ++ ++ for (i = 0; i < xf86NumGPUScreens; i++) ++ RRProviderAutoConfigGpuScreen(xf86ScrnToScreen(xf86GPUScreens[i]), ++ xf86ScrnToScreen(xf86Screens[0])); ++} ++ ++static void + InstallSignalHandlers(void) + { + /* +@@ -871,6 +885,8 @@ InitOutput(ScreenInfo * pScreenInfo, int argc, char **argv) + for (i = 0; i < xf86NumGPUScreens; i++) + AttachUnboundGPU(xf86Screens[0]->pScreen, xf86GPUScreens[i]->pScreen); + ++ xf86AutoConfigOutputDevices(); ++ + xf86VGAarbiterWrapFunctions(); + if (sigio_blocked) + input_unlock(); +@@ -1389,6 +1405,10 @@ ddxProcessArgument(int argc, char **argv, int i) + xf86Info.iglxFrom = X_CMDLINE; + return 0; + } ++ if (!strcmp(argv[i], "-noautoBindGPU")) { ++ xf86AutoBindGPUDisabled = TRUE; ++ return 1; ++ } + + /* OS-specific processing */ + return xf86ProcessArgument(argc, argv, i); +diff --git a/hw/xfree86/common/xf86Priv.h b/hw/xfree86/common/xf86Priv.h +index c1f8a18..9a3d0df 100644 +--- a/hw/xfree86/common/xf86Priv.h ++++ b/hw/xfree86/common/xf86Priv.h +@@ -46,6 +46,7 @@ + extern _X_EXPORT const char *xf86ConfigFile; + extern _X_EXPORT const char *xf86ConfigDir; + extern _X_EXPORT Bool xf86AllowMouseOpenFail; ++extern _X_EXPORT Bool xf86AutoBindGPUDisabled; + + #ifdef XF86VIDMODE + extern _X_EXPORT Bool xf86VidModeDisabled; +diff --git a/hw/xfree86/common/xf86Privstr.h b/hw/xfree86/common/xf86Privstr.h +index c29b3cc..4c5f54b 100644 +--- a/hw/xfree86/common/xf86Privstr.h ++++ b/hw/xfree86/common/xf86Privstr.h +@@ -102,6 +102,7 @@ typedef struct { + MessageType dri2From; + + Bool autoAddGPU; ++ Bool autoBindGPU; + } xf86InfoRec, *xf86InfoPtr; + + #ifdef DPMSExtension +diff --git a/hw/xfree86/common/xf86platformBus.c b/hw/xfree86/common/xf86platformBus.c +index 063e81c..42789ca 100644 +--- a/hw/xfree86/common/xf86platformBus.c ++++ b/hw/xfree86/common/xf86platformBus.c +@@ -48,6 +48,7 @@ + #include "Pci.h" + #include "xf86platformBus.h" + #include "xf86Config.h" ++#include "xf86Crtc.h" + + #include "randrstr.h" + int platformSlotClaimed; +@@ -579,6 +580,9 @@ xf86platformAddDevice(int index) + } + /* attach unbound to 0 protocol screen */ + AttachUnboundGPU(xf86Screens[0]->pScreen, xf86GPUScreens[i]->pScreen); ++ if (xf86Info.autoBindGPU) ++ RRProviderAutoConfigGpuScreen(xf86ScrnToScreen(xf86GPUScreens[i]), ++ xf86ScrnToScreen(xf86Screens[0])); + + RRResourcesChanged(xf86Screens[0]->pScreen); + RRTellChanged(xf86Screens[0]->pScreen); +diff --git a/hw/xfree86/man/Xorg.man b/hw/xfree86/man/Xorg.man +index def9bfc..8df6b7d 100644 +--- a/hw/xfree86/man/Xorg.man ++++ b/hw/xfree86/man/Xorg.man +@@ -283,6 +283,13 @@ is a comma separated list of directories to search for + server modules. This option is only available when the server is run + as root (i.e, with real-uid 0). + .TP 8 ++.B \-noautoBindGPU ++Disable automatically setting secondary GPUs up as output sinks and offload ++sources. This is equivalent to setting the ++.B AutoBindGPU ++xorg.conf(__filemansuffix__) file option. To ++.B false. ++.TP 8 + .B \-nosilk + Disable Silken Mouse support. + .TP 8 +diff --git a/hw/xfree86/man/xorg.conf.man b/hw/xfree86/man/xorg.conf.man +index 7d0c524..3e596e4 100644 +--- a/hw/xfree86/man/xorg.conf.man ++++ b/hw/xfree86/man/xorg.conf.man +@@ -673,6 +673,12 @@ Enabled by default. + If this option is disabled, then no GPU devices will be added from the udev + backend. Enabled by default. (May need to be disabled to setup Xinerama). + .TP 7 ++.BI "Option \*qAutoBindGPU\*q \*q" boolean \*q ++If enabled then secondary GPUs will be automatically set up as output-sinks and ++offload-sources. Making e.g. laptop outputs connected only to the secondary ++GPU directly available for use without needing to run ++"xrandr --setprovideroutputsource". Enabled by default. ++.TP 7 + .BI "Option \*qLog\*q \*q" string \*q + This option controls whether the log is flushed and/or synced to disk after + each message. +diff --git a/randr/randrstr.h b/randr/randrstr.h +index 706e9a7..66999d5 100644 +--- a/randr/randrstr.h ++++ b/randr/randrstr.h +@@ -976,6 +976,9 @@ RRProviderLookup(XID id, RRProviderPtr *provider_p); + extern _X_EXPORT void + RRDeliverProviderEvent(ClientPtr client, WindowPtr pWin, RRProviderPtr provider); + ++extern _X_EXPORT void ++RRProviderAutoConfigGpuScreen(ScreenPtr pScreen, ScreenPtr masterScreen); ++ + /* rrproviderproperty.c */ + + extern _X_EXPORT void +diff --git a/randr/rrprovider.c b/randr/rrprovider.c +index f9df67e..abc5685 100644 +--- a/randr/rrprovider.c ++++ b/randr/rrprovider.c +@@ -482,3 +482,25 @@ RRDeliverProviderEvent(ClientPtr client, WindowPtr pWin, RRProviderPtr provider) + + WriteEventsToClient(client, 1, (xEvent *) &pe); + } ++ ++void ++RRProviderAutoConfigGpuScreen(ScreenPtr pScreen, ScreenPtr masterScreen) ++{ ++ rrScrPrivPtr pScrPriv = rrGetScrPriv(pScreen); ++ rrScrPrivPtr masterPriv = rrGetScrPriv(masterScreen); ++ RRProviderPtr provider = pScrPriv->provider; ++ RRProviderPtr master_provider = masterPriv->provider; ++ ++ if (!provider || !master_provider) ++ return; ++ ++ if ((provider->capabilities & RR_Capability_SinkOutput) && ++ (master_provider->capabilities & RR_Capability_SourceOutput)) { ++ pScrPriv->rrProviderSetOutputSource(pScreen, provider, master_provider); ++ RRInitPrimeSyncProps(pScreen); ++ } ++ ++ if ((provider->capabilities & RR_Capability_SourceOffload) && ++ (master_provider->capabilities & RR_Capability_SinkOffload)) ++ pScrPriv->rrProviderSetOffloadSink(pScreen, provider, master_provider); ++} +-- +2.9.3 + diff --git a/SOURCES/xserver-sdk-abi-requires.git b/SOURCES/xserver-sdk-abi-requires.git new file mode 100755 index 0000000..c033061 --- /dev/null +++ b/SOURCES/xserver-sdk-abi-requires.git @@ -0,0 +1,14 @@ +#!/bin/sh +# +# The X server provides capabilities of the form: +# +# Provides: xserver-abi(ansic-0) = 4 +# +# for an ABI version of 0.4. The major number is encoded into the name so +# that major number changes force upgrades. If we didn't, then +# +# Requires: xserver-abi(ansic) >= 0.4 +# +# would also match 1.0, which is wrong since major numbers mean an ABI break. + +echo "xserver-abi($1-@MAJOR@) >= @MINOR@" diff --git a/SOURCES/xserver-sdk-abi-requires.release b/SOURCES/xserver-sdk-abi-requires.release new file mode 100755 index 0000000..30d77bf --- /dev/null +++ b/SOURCES/xserver-sdk-abi-requires.release @@ -0,0 +1,19 @@ +#!/bin/sh +# +# The X server provides capabilities of the form: +# +# Provides: xserver-abi(ansic-0) = 4 +# +# for an ABI version of 0.4. The major number is encoded into the name so +# that major number changes force upgrades. If we didn't, then +# +# Requires: xserver-abi(ansic) >= 0.4 +# +# would also match 1.0, which is wrong since major numbers mean an ABI break. + +ver=$(pkg-config --variable abi_$1 xorg-server) + +major=$(echo $ver | cut -f 1 -d .) +minor=$(echo $ver | cut -f 2 -d .) + +echo "xserver-abi($1-$major) >= $minor" diff --git a/SOURCES/xserver.pamd b/SOURCES/xserver.pamd new file mode 100644 index 0000000..bf79930 --- /dev/null +++ b/SOURCES/xserver.pamd @@ -0,0 +1,5 @@ +#%PAM-1.0 +auth sufficient pam_rootok.so +auth required pam_console.so +account required pam_permit.so +session optional pam_keyinit.so force revoke diff --git a/SOURCES/xvfb-run.sh b/SOURCES/xvfb-run.sh new file mode 100644 index 0000000..086c8b9 --- /dev/null +++ b/SOURCES/xvfb-run.sh @@ -0,0 +1,200 @@ +#!/bin/sh +# --- T2-COPYRIGHT-NOTE-BEGIN --- +# This copyright note is auto-generated by ./scripts/Create-CopyPatch. +# +# T2 SDE: package/.../xorg-server/xvfb-run.sh +# Copyright (C) 2005 The T2 SDE Project +# Copyright (C) XXXX - 2005 Debian +# +# More information can be found in the files COPYING and README. +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; version 2 of the License. A copy of the +# GNU General Public License can be found in the file COPYING. +# --- T2-COPYRIGHT-NOTE-END --- + +# $Id$ +# from: http://necrotic.deadbeast.net/xsf/XFree86/trunk/debian/local/xvfb-run + +# This script starts an instance of Xvfb, the "fake" X server, runs a command +# with that server available, and kills the X server when done. The return +# value of the command becomes the return value of this script. +# +# If anyone is using this to build a Debian package, make sure the package +# Build-Depends on xvfb, xbase-clients, and xfonts-base. + +set -e + +PROGNAME=xvfb-run +SERVERNUM=99 +AUTHFILE= +ERRORFILE=/dev/null +STARTWAIT=3 +XVFBARGS="-screen 0 640x480x8" +LISTENTCP="-nolisten tcp" +XAUTHPROTO=. + +# Query the terminal to establish a default number of columns to use for +# displaying messages to the user. This is used only as a fallback in the event +# the COLUMNS variable is not set. ($COLUMNS can react to SIGWINCH while the +# script is running, and this cannot, only being calculated once.) +DEFCOLUMNS=$(stty size 2>/dev/null | awk '{print $2}') || true +if ! expr "$DEFCOLUMNS" : "[[:digit:]]\+$" >/dev/null 2>&1; then + DEFCOLUMNS=80 +fi + +# Display a message, wrapping lines at the terminal width. +message () { + echo "$PROGNAME: $*" | fmt -t -w ${COLUMNS:-$DEFCOLUMNS} +} + +# Display an error message. +error () { + message "error: $*" >&2 +} + +# Display a usage message. +usage () { + if [ -n "$*" ]; then + message "usage error: $*" + fi + cat <&2 + exit 2 +fi + +if ! which xauth >/dev/null; then + error "xauth command not found" + exit 3 +fi + +# Set up the temp dir for the pid and X authorization file +XVFB_RUN_TMPDIR="$(mktemp --directory --tmpdir $PROGNAME.XXXXXX)" +# If the user did not specify an X authorization file to use, set up a temporary +# directory to house one. +if [ -z "$AUTHFILE" ]; then + AUTHFILE=$(mktemp -p "$XVFB_RUN_TMPDIR" Xauthority.XXXXXX) +fi + +# Start Xvfb. +MCOOKIE=$(mcookie) + +if [ -z "$AUTO_DISPLAY" ]; then + # Old style using a pre-computed SERVERNUM + XAUTHORITY=$AUTHFILE Xvfb ":$SERVERNUM" $XVFBARGS $LISTENTCP >>"$ERRORFILE" \ + 2>&1 & + XVFBPID=$! +else + # New style using Xvfb to provide a free display + PIDFILE=$(mktemp -p "$XVFB_RUN_TMPDIR" pid.XXXXXX) + SERVERNUM=$(XAUTHORITY=$AUTHFILE Xvfb -displayfd 9 $XVFBARGS $LISTENTCP \ + 9>&1 2>"$ERRORFILE" & echo $! > $PIDFILE) + XVFBPID=$(cat $PIDFILE) +fi +sleep "$STARTWAIT" + +XAUTHORITY=$AUTHFILE xauth source - << EOF >>"$ERRORFILE" 2>&1 +add :$SERVERNUM $XAUTHPROTO $MCOOKIE +EOF + +# Start the command and save its exit status. +set +e +DISPLAY=:$SERVERNUM XAUTHORITY=$AUTHFILE "$@" 2>&1 +RETVAL=$? +set -e + +# Kill Xvfb now that the command has exited. +kill $XVFBPID + +# Clean up. +XAUTHORITY=$AUTHFILE xauth remove ":$SERVERNUM" >"$ERRORFILE" 2>&1 +if [ -n "$XVFB_RUN_TMPDIR" ]; then + if ! rm -r "$XVFB_RUN_TMPDIR"; then + error "problem while cleaning up temporary directory" + exit 5 + fi +fi + +# Return the executed command's exit status. +exit $RETVAL + +# vim:set ai et sts=4 sw=4 tw=80: diff --git a/SPECS/xorg-x11-server.spec b/SPECS/xorg-x11-server.spec new file mode 100644 index 0000000..6495c44 --- /dev/null +++ b/SPECS/xorg-x11-server.spec @@ -0,0 +1,1279 @@ +# This package is an experiment in active integration of upstream SCM with +# Fedora packaging. It works something like this: +# +# The "pristine" source is actually a git repo (with no working checkout). +# The first step of %%prep is to check it out and switch to a "fedora" branch. +# If you need to add a patch to the server, just do it like a normal git +# operation, dump it with git-format-patch to a file in the standard naming +# format, and add a PatchN: line. If you want to push something upstream, +# check out the master branch, pull, cherry-pick, and push. + +#global gitdate 20131118 +%global stable_abi 1 + +%if !0%{?gitdate} || %{stable_abi} +# Released ABI versions. Have to keep these manually in sync with the +# source because rpm is a terrible language. +%global ansic_major 0 +%global ansic_minor 4 +%global videodrv_major 23 +%global videodrv_minor 0 +%global xinput_major 24 +%global xinput_minor 1 +%global extension_major 10 +%global extension_minor 0 +%endif + +%if 0%{?gitdate} +# For git snapshots, use date for major and a serial number for minor +%global minor_serial 0 +%global git_ansic_major %{gitdate} +%global git_ansic_minor %{minor_serial} +%global git_videodrv_major %{gitdate} +%global git_videodrv_minor %{minor_serial} +%global git_xinput_major %{gitdate} +%global git_xinput_minor %{minor_serial} +%global git_extension_major %{gitdate} +%global git_extension_minor %{minor_serial} +%endif + +%global pkgname xorg-server + +Summary: X.Org X11 X server +Name: xorg-x11-server +Version: 1.19.3 +Release: 11%{?gitdate:.%{gitdate}}%{?dist}.1 +URL: http://www.x.org +License: MIT +Group: User Interface/X + +#VCS: git:git://git.freedesktop.org/git/xorg/xserver +%if 0%{?gitdate} +# git snapshot. to recreate, run: +# ./make-git-snapshot.sh `cat commitid` +#Source0: xorg-server-%{gitdate}.tar.xz +Source0: http://www.x.org/pub/individual/xserver/%{pkgname}-%{version}.tar.bz2 +Source1: make-git-snapshot.sh +Source2: commitid +%else +Source0: http://www.x.org/pub/individual/xserver/%{pkgname}-%{version}.tar.bz2 +Source1: gitignore +%endif + +Source4: 10-quirks.conf + +Source10: xserver.pamd + +# "useful" xvfb-run script +Source20: http://svn.exactcode.de/t2/trunk/package/xorg/xorg-server/xvfb-run.sh + +# for requires generation in drivers +Source30: xserver-sdk-abi-requires.release +Source31: xserver-sdk-abi-requires.git + +# maintainer convenience script +Source40: driver-abi-rebuild.sh + +# Sync with RHEL6.6 +Patch01: 0001-dix-Fix-GrabPointer-to-not-wrongly-succeed-on-redire.patch +Patch02: 0001-Enable-PAM-support.patch +Patch07: 0001-xf86AddBusDeviceToConfigure-Store-device-in-DevToCon.patch +Patch09: 0001-xfree86-Allow-mixed-fbdev-and-pci-setups.patch + +# RHEL-specific mustard +Patch100: 0001-mustard-Don-t-probe-for-drivers-not-shipped-in-RHEL7.patch +Patch101: 0001-Always-install-vbe-and-int10-sdk-headers.patch +Patch102: 0001-mustard-Enable-indirect-GLX-by-default.patch +Patch103: 06_use-intel-only-on-pre-gen4.diff +Patch104: 0001-xfree86-use-modesetting-driver-by-default-on-GeForce.patch + +# Trivial things to never merge upstream ever: +# This really could be done prettier. +Patch5002: xserver-1.4.99-ssh-isnt-local.patch +Patch5004: xserver-autobind-hotplug.patch +Patch5005: 0001-link-with-z-now.patch + +# Bug 798994 - Exposure event not generated in Xinerama mode +Patch9231: 0001-xinerama-Implement-graphics-exposures-for-window-pix.patch + +# Bug 1166989 - Tcl/tk Canvas draw error +Patch9423: RFC-mi-reduce-missing-segments-on-large-ellipse.patch + +# Bug 1374198 - Xephyr crashes when launched over ssh X forwarding from Windows +Patch9430: 0001-xephyr-Check-for-host-XVideo-support-before-trying-t.patch + +Patch9504: 0001-rpath-hack.patch + +Patch9701: 0001-miarc-Style-cleanup-for-miWideArc.patch +Patch9702: 0002-miarc-Make-the-caller-free-the-arc-span-data.patch +Patch9703: 0003-miarc-Cache-arc-span-data-for-dashed-arcs.patch + +Patch9710: 0001-modesetting-software-cursor-hack.patch +Patch9711: 0001-handle-NullCursor-to-avoid-crash.patch +Patch9712: 0001-xfixes-Remove-the-CursorCurrent-array.patch +Patch9713: 0001-modesetting-Validate-the-atom-for-enum-properties.patch +Patch9714: 0001-dix-Remove-clients-from-input-and-output-ready-queue.patch +Patch9715: 0001-modesetting-Fix-PCI-initialization-on-non-zero-domai.patch +Patch9716: 0001-xfree86-Fix-off-by-one-in-X-configure.patch +Patch9717: 0001-xfree86-modes-Make-colormap-gamma-glue-code-work-wit.patch + +%global moduledir %{_libdir}/xorg/modules +%global drimoduledir %{_libdir}/dri +%global sdkdir %{_includedir}/xorg + +%ifarch s390 s390x +%global with_hw_servers 0 +%else +%global with_hw_servers 1 +%endif + +%if %{with_hw_servers} +%global enable_xorg --enable-xorg +%else +%global enable_xorg --disable-xorg +%endif + +%ifnarch %{ix86} x86_64 +%global no_int10 --disable-vbe --disable-int10-module +%endif + +%global kdrive --enable-kdrive --enable-xephyr --disable-xfake --disable-xfbdev +%global xservers --enable-xvfb --enable-xnest --enable-dmx %{kdrive} %{enable_xorg} + +BuildRequires: pam-devel +BuildRequires: systemtap-sdt-devel +BuildRequires: git-core +BuildRequires: automake autoconf libtool pkgconfig +BuildRequires: xorg-x11-util-macros >= 1.17 + +BuildRequires: xorg-x11-proto-devel >= 7.7-13 +BuildRequires: xorg-x11-font-utils >= 7.2-11 +BuildRequires: libepoxy-devel libxshmfence-devel +BuildRequires: xorg-x11-xtrans-devel >= 1.3.5 +BuildRequires: libXfont2-devel libXau-devel libxkbfile-devel libXres-devel +BuildRequires: libfontenc-devel libXtst-devel libXdmcp-devel +BuildRequires: libX11-devel libXext-devel +BuildRequires: libXinerama-devel libXi-devel + +# DMX config utils buildreqs. +BuildRequires: libXt-devel libdmx-devel libXmu-devel libXrender-devel +BuildRequires: libXi-devel libXpm-devel libXaw-devel libXfixes-devel + +BuildRequires: libXv-devel +BuildRequires: pixman-devel >= 0.30.0 +BuildRequires: libpciaccess-devel >= 0.13.1 openssl-devel byacc flex +BuildRequires: mesa-libGL-devel >= 9.2 mesa-libgbm-devel mesa-libEGL-devel +# XXX silly... +BuildRequires: libdrm-devel >= 2.4.0 kernel-headers + +BuildRequires: audit-libs-devel libselinux-devel >= 2.0.86-1 +BuildRequires: libudev-devel +%if !0%{?rhel} +# libunwind is Exclusive for the following arches +%ifarch aarch64 %{arm} hppa ia64 mips ppc ppc64 %{ix86} x86_64 +BuildRequires: libunwind-devel +%endif +%endif + +BuildRequires: pkgconfig(xcb-aux) pkgconfig(xcb-image) pkgconfig(xcb-icccm) +BuildRequires: pkgconfig(xcb-keysyms) pkgconfig(xcb-renderutil) + +# All server subpackages have a virtual provide for the name of the server +# they deliver. The Xorg one is versioned, the others are intentionally +# unversioned. + +%description +X.Org X11 X server + +%package common +Summary: Xorg server common files +Group: User Interface/X +Requires: pixman >= 0.30.0 +Requires: xkeyboard-config xkbcomp + +%description common +Common files shared among all X servers. + +%if %{with_hw_servers} +%package Xorg +Summary: Xorg X server +Group: User Interface/X +Provides: Xorg = %{version}-%{release} +Provides: Xserver +%if !0%{?gitdate} || %{stable_abi} +Provides: xserver-abi(ansic-%{ansic_major}) = %{ansic_minor} +Provides: xserver-abi(videodrv-%{videodrv_major}) = %{videodrv_minor} +Provides: xserver-abi(xinput-%{xinput_major}) = %{xinput_minor} +Provides: xserver-abi(extension-%{extension_major}) = %{extension_minor} +%endif +%if 0%{?gitdate} +Provides: xserver-abi(ansic-%{git_ansic_major}) = %{git_ansic_minor} +Provides: xserver-abi(videodrv-%{git_videodrv_major}) = %{git_videodrv_minor} +Provides: xserver-abi(xinput-%{git_xinput_major}) = %{git_xinput_minor} +Provides: xserver-abi(extension-%{git_extension_major}) = %{git_extension_minor} +%endif +Obsoletes: xorg-x11-glamor < %{version}-%{release} +Provides: xorg-x11-glamor = %{version}-%{release} +Obsoletes: xorg-x11-drv-modesetting < %{version}-%{release} +Provides: xorg-x11-drv-modesetting = %{version}-%{release} + +Requires: xorg-x11-server-common >= %{version}-%{release} +Requires: system-setup-keyboard + +%if 0%{?rhel} >= 7 +# 10-evdev.conf moved here in 7.4 +Conflicts: xorg-x11-drv-evdev < 2.10.5-1 +%endif + +%description Xorg +X.org X11 is an open source implementation of the X Window System. It +provides the basic low level functionality which full fledged +graphical user interfaces (GUIs) such as GNOME and KDE are designed +upon. +%endif + + +%package Xnest +Summary: A nested server. +Group: User Interface/X +Requires: xorg-x11-server-common >= %{version}-%{release} +Provides: Xnest + +%description Xnest +Xnest is an X server which has been implemented as an ordinary +X application. It runs in a window just like other X applications, +but it is an X server itself in which you can run other software. It +is a very useful tool for developers who wish to test their +applications without running them on their real X server. + +%package Xdmx +Summary: Distributed Multihead X Server and utilities +Group: User Interface/X +Requires: xorg-x11-server-common >= %{version}-%{release} +Provides: Xdmx + +%description Xdmx +Xdmx is proxy X server that provides multi-head support for multiple displays +attached to different machines (each of which is running a typical X server). +When Xinerama is used with Xdmx, the multiple displays on multiple machines +are presented to the user as a single unified screen. A simple application +for Xdmx would be to provide multi-head support using two desktop machines, +each of which has a single display device attached to it. A complex +application for Xdmx would be to unify a 4 by 4 grid of 1280x1024 displays +(each attached to one of 16 computers) into a unified 5120x4096 display. + +%package Xvfb +Summary: A X Windows System virtual framebuffer X server. +Group: User Interface/X +# xvfb-run is GPLv2, rest is MIT +License: MIT and GPLv2 +Requires: xorg-x11-server-common >= %{version}-%{release} +# required for xvfb-run +Requires: xorg-x11-xauth +Provides: Xvfb + +%description Xvfb +Xvfb (X Virtual Frame Buffer) is an X server that is able to run on +machines with no display hardware and no physical input devices. +Xvfb simulates a dumb framebuffer using virtual memory. Xvfb does +not open any devices, but behaves otherwise as an X display. Xvfb +is normally used for testing servers. + + +%package Xephyr +Summary: A nested server. +Group: User Interface/X +Requires: xorg-x11-server-common >= %{version}-%{release} +Provides: Xephyr + +%description Xephyr +Xephyr is an X server which has been implemented as an ordinary +X application. It runs in a window just like other X applications, +but it is an X server itself in which you can run other software. It +is a very useful tool for developers who wish to test their +applications without running them on their real X server. Unlike +Xnest, Xephyr renders to an X image rather than relaying the +X protocol, and therefore supports the newer X extensions like +Render and Composite. + + +%if %{with_hw_servers} +%package devel +Summary: SDK for X server driver module development +Group: User Interface/X +Requires: xorg-x11-util-macros +Requires: xorg-x11-proto-devel +Requires: pkgconfig pixman-devel libpciaccess-devel +Provides: xorg-x11-server-static +Obsoletes: xorg-x11-glamor-devel < %{version}-%{release} +Provides: xorg-x11-glamor-devel = %{version}-%{release} + + +%description devel +The SDK package provides the developmental files which are necessary for +developing X server driver modules, and for compiling driver modules +outside of the standard X11 source code tree. Developers writing video +drivers, input drivers, or other X modules should install this package. +%endif + +%package source +Summary: Xserver source code required to build VNC server (Xvnc) +Group: Development/Libraries +BuildArch: noarch + +%description source +Xserver source code needed to build VNC server (Xvnc) + +%prep +%autosetup -N -n %{pkgname}-%{?gitdate:%{gitdate}}%{!?gitdate:%{version}} +rm -rf .git +cp %{SOURCE1} .gitignore +# ick +%global __scm git +%{expand:%__scm_setup_git -q} +%autopatch + +%if %{with_hw_servers} && 0%{?stable_abi} +# check the ABI in the source against what we expect. +getmajor() { + grep -i ^#define.ABI.$1_VERSION hw/xfree86/common/xf86Module.h | + tr '(),' ' ' | awk '{ print $4 }' +} + +getminor() { + grep -i ^#define.ABI.$1_VERSION hw/xfree86/common/xf86Module.h | + tr '(),' ' ' | awk '{ print $5 }' +} + +test `getmajor ansic` == %{ansic_major} +test `getminor ansic` == %{ansic_minor} +test `getmajor videodrv` == %{videodrv_major} +test `getminor videodrv` == %{videodrv_minor} +test `getmajor xinput` == %{xinput_major} +test `getminor xinput` == %{xinput_minor} +test `getmajor extension` == %{extension_major} +test `getminor extension` == %{extension_minor} + +%endif + +%build + +%global default_font_path "catalogue:/etc/X11/fontpath.d,built-ins" + +%if %{with_hw_servers} +%global dri_flags --with-dri-driver-path=%{drimoduledir} --enable-dri2 --enable-dri3 --enable-glamor --enable-xshmfence +%else +%global dri_flags --disable-dri +%endif + +# ick +%if 0%{?rhel} +sed -i 's/WAYLAND_SCANNER_RULES.*//g' configure.ac +%endif + +# --with-pie ? +autoreconf -f -v --install || exit 1 +# export CFLAGS="${RPM_OPT_FLAGS}" +# XXX without dtrace + +%configure --enable-maintainer-mode %{xservers} \ + --enable-listen-tcp \ + --disable-static \ + --with-pic \ + %{?no_int10} --with-int10=x86emu \ + --with-default-font-path=%{default_font_path} \ + --with-module-dir=%{moduledir} \ + --with-builderstring="Build ID: %{name} %{version}-%{release}" \ + --with-os-name="$(hostname -s) $(uname -r)" \ + --with-xkb-output=%{_localstatedir}/lib/xkb \ + --with-fallback-input-driver=evdev \ + --without-dtrace \ + --disable-linux-acpi --disable-linux-apm \ + --enable-xselinux --enable-record --enable-present \ + --enable-config-udev \ + --disable-unit-tests \ + %{dri_flags} %{?bodhi_flags} \ + ${CONFIGURE} + +make V=1 %{?_smp_mflags} + +%install +rm -rf $RPM_BUILD_ROOT +make install DESTDIR=$RPM_BUILD_ROOT moduledir=%{moduledir} + +%if %{with_hw_servers} +rm -rf $RPM_BUILD_ROOT%{_libdir}/xorg/modules/multimedia/ +mkdir -p $RPM_BUILD_ROOT%{_libdir}/xorg/modules/{drivers,input} + +# yay pam +mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/pam.d +install -m 0644 %{SOURCE10} $RPM_BUILD_ROOT%{_sysconfdir}/pam.d/xserver +mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/security/console.apps +touch $RPM_BUILD_ROOT%{_sysconfdir}/security/console.apps/xserver + +mkdir -p $RPM_BUILD_ROOT%{_datadir}/X11/xorg.conf.d +install -m 644 %{SOURCE4} $RPM_BUILD_ROOT%{_datadir}/X11/xorg.conf.d + +# make sure the (empty) /etc/X11/xorg.conf.d is there, system-setup-keyboard +# relies on it more or less. +mkdir -p $RPM_BUILD_ROOT%{_sysconfdir}/X11/xorg.conf.d + +mkdir -p $RPM_BUILD_ROOT%{_bindir} + +%if %{stable_abi} +install -m 755 %{SOURCE30} $RPM_BUILD_ROOT%{_bindir}/xserver-sdk-abi-requires +%else +sed -e s/@MAJOR@/%{gitdate}/g -e s/@MINOR@/%{minor_serial}/g %{SOURCE31} > \ + $RPM_BUILD_ROOT%{_bindir}/xserver-sdk-abi-requires +chmod 755 $RPM_BUILD_ROOT%{_bindir}/xserver-sdk-abi-requires +%endif + +%endif + +# Make the source package +%global xserver_source_dir %{_datadir}/xorg-x11-server-source +%global inst_srcdir %{buildroot}/%{xserver_source_dir} +mkdir -p %{inst_srcdir}/{Xext,xkb,GL,hw/{xquartz/bundle,xfree86/common}} +mkdir -p %{inst_srcdir}/{hw/dmx/doc,man,doc,hw/dmx/doxygen} +cp {,%{inst_srcdir}/}hw/xquartz/bundle/cpprules.in +cp {,%{inst_srcdir}/}man/Xserver.man +cp {,%{inst_srcdir}/}doc/smartsched +cp {,%{inst_srcdir}/}hw/dmx/doxygen/doxygen.conf.in +cp {,%{inst_srcdir}/}xserver.ent.in +cp {,%{inst_srcdir}/}hw/xfree86/Xorg.sh.in +cp xkb/README.compiled %{inst_srcdir}/xkb +cp hw/xfree86/xorgconf.cpp %{inst_srcdir}/hw/xfree86 + +install -m 0755 %{SOURCE20} $RPM_BUILD_ROOT%{_bindir}/xvfb-run + +find . -type f | egrep '.*\.(c|h|am|ac|inc|m4|h.in|pc.in|man.pre|pl|txt)$' | +xargs tar cf - | (cd %{inst_srcdir} && tar xf -) +# SLEDGEHAMMER +find %{inst_srcdir}/hw/xfree86 -name \*.c -delete + +# Remove unwanted files/dirs +{ + find $RPM_BUILD_ROOT -type f -name '*.la' | xargs rm -f -- || : +%if !%{with_hw_servers} + rm -f $RPM_BUILD_ROOT%{_libdir}/pkgconfig/xorg-server.pc + rm -f $RPM_BUILD_ROOT%{_datadir}/aclocal/xorg-server.m4 + rm -rf $RPM_BUILD_ROOT%{_defaultdocdir}/xorg-server +%endif +# wtf +%ifnarch %{ix86} x86_64 + rm -f $RPM_BUILD_ROOT%{_libdir}/xorg/modules/lib{int10,vbe}.so +%endif +} + +%clean +rm -rf $RPM_BUILD_ROOT + + +%files common +%defattr(-,root,root,-) +%doc COPYING +%{_mandir}/man1/Xserver.1* +%{_libdir}/xorg/protocol.txt +%dir %{_localstatedir}/lib/xkb +%{_localstatedir}/lib/xkb/README.compiled + +%if 1 +%global Xorgperms %attr(4755, root, root) +%else +# disable until module loading is audited +%global Xorgperms %attr(0711,root,root) %caps(cap_sys_admin,cap_sys_rawio,cap_dac_override=pe) +%endif + +%if %{with_hw_servers} +%files Xorg +%defattr(-,root,root,-) +%config %attr(0644,root,root) %{_sysconfdir}/pam.d/xserver +%config(missingok) /etc/security/console.apps/xserver +%{_bindir}/X +%{Xorgperms} %{_bindir}/Xorg +%{_bindir}/cvt +%{_bindir}/gtf +%dir %{_libdir}/xorg +%dir %{_libdir}/xorg/modules +%dir %{_libdir}/xorg/modules/drivers +%{_libdir}/xorg/modules/drivers/modesetting_drv.so +%dir %{_libdir}/xorg/modules/extensions +%{_libdir}/xorg/modules/extensions/libglx.so +%if !0%{?rhel} +%{_libdir}/xorg/modules/extensions/libxwayland.so +%endif +%dir %{_libdir}/xorg/modules/input +%{_libdir}/xorg/modules/libfbdevhw.so +%{_libdir}/xorg/modules/libexa.so +%{_libdir}/xorg/modules/libfb.so +%{_libdir}/xorg/modules/libglamoregl.so +%{_libdir}/xorg/modules/libshadow.so +%{_libdir}/xorg/modules/libshadowfb.so +%{_libdir}/xorg/modules/libvgahw.so +%{_libdir}/xorg/modules/libwfb.so +%ifarch %{ix86} x86_64 +%{_libdir}/xorg/modules/libint10.so +%{_libdir}/xorg/modules/libvbe.so +%endif +%{_mandir}/man1/gtf.1* +%{_mandir}/man1/Xorg.1* +%{_mandir}/man1/cvt.1* +%{_mandir}/man4/fbdevhw.4* +%{_mandir}/man4/exa.4* +%{_mandir}/man4/modesetting.4* +%{_mandir}/man5/xorg.conf.5* +%{_mandir}/man5/xorg.conf.d.5* +%dir %{_sysconfdir}/X11/xorg.conf.d +%dir %{_datadir}/X11/xorg.conf.d +%{_datadir}/X11/xorg.conf.d/10-quirks.conf +%endif + +%files Xnest +%defattr(-,root,root,-) +%{_bindir}/Xnest +%{_mandir}/man1/Xnest.1* + +%files Xdmx +%defattr(-,root,root,-) +%{_bindir}/Xdmx +%{_bindir}/dmxaddinput +%{_bindir}/dmxaddscreen +%{_bindir}/dmxreconfig +%{_bindir}/dmxresize +%{_bindir}/dmxrminput +%{_bindir}/dmxrmscreen +%{_bindir}/dmxtodmx +%{_bindir}/dmxwininfo +%{_bindir}/vdltodmx +%{_bindir}/dmxinfo +%{_bindir}/xdmxconfig +%{_mandir}/man1/Xdmx.1* +%{_mandir}/man1/dmxtodmx.1* +%{_mandir}/man1/vdltodmx.1* +%{_mandir}/man1/xdmxconfig.1* + +%files Xvfb +%defattr(-,root,root,-) +%{_bindir}/Xvfb +%{_bindir}/xvfb-run +%{_mandir}/man1/Xvfb.1* + +%files Xephyr +%defattr(-,root,root,-) +%{_bindir}/Xephyr +%{_mandir}/man1/Xephyr.1* + +%if %{with_hw_servers} +%files devel +%doc COPYING +%defattr(-,root,root,-) +#{_docdir}/xorg-server +%{_bindir}/xserver-sdk-abi-requires +%{_libdir}/pkgconfig/xorg-server.pc +%dir %{_includedir}/xorg +%{sdkdir}/*.h +%{_datadir}/aclocal/xorg-server.m4 +%endif + +%files source +%defattr(-, root, root, -) +%{xserver_source_dir} + +%changelog +* Mon Dec 11 2017 Adam Jackson - 1.19.3-11.1 +- Fix a crash in RANDR gamma/colormap setup + +* Mon Jun 26 2017 Adam Jackson - 1.19.3-11 +- Fix off-by-one in X -configure + +* Mon Jun 26 2017 Adam Jackson - 1.19.3-10 +- Fix modesetting initialization on non-zero PCI domains + +* Mon Jun 19 2017 Adam Jackson - 1.19.3-9 +- Remove clients from input and output ready queues after closing + +* Mon Jun 19 2017 Adam Jackson - 1.19.3-8 +- Validate RANDR output property atoms + +* Mon Jun 12 2017 Adam Jackson - 1.19.3-7 +- Fix a crash in FixesGetCursor* + +* Fri Jun 09 2017 Dave Airlie - 1.19.3-6 +- Don't crash on NULL cursor in modesetting driver (#1458361) + +* Tue May 09 2017 Adam Jackson - 1.19.3-5 +- Fix software cursor fallback for the modesetting driver on server GPUs + +* Tue May 09 2017 Adam Jackson - 1.19.3-4 +- Fix performance problem in dashed arc drawing + +* Thu Apr 27 2017 Ben Skeggs - 1.19.3-3 +- Default to modesetting driver on NVIDIA GeForce 8 and newer + +* Fri Apr 07 2017 Adam Jackson - 1.19.3-2 +- Fix Xephyr on servers with no XVideo extension + +* Wed Mar 15 2017 Adam Jackson - 1.19.3-1 +- xserver 1.19.3 + +* Wed Mar 01 2017 Adam Jackson - 1.19.1-0.6 +- Default to modesetting driver on Intel gen4 and up + +* Mon Feb 20 2017 Adam Jackson - 1.19.1-0.5 +- Enable DRI3 +- Restore indirect GLX by default + +* Wed Feb 08 2017 Olivier Fourdan - 1.19.1-0.3 +- Reduce rounding errors in miComputeEllipseSpans() with large radius + Resolves: rhbz#1166989 + +* Tue Feb 07 2017 Adam Jackson - 1.19.1-0.2 +- Set default input driver to evdev + +* Wed Feb 01 2017 Adam Jackson - 1.19.1-0.1 +- xserver 1.19.1 + +* Mon Aug 8 2016 Hans de Goede - 1.17.2-22 +- Replace modesetting-Claim-PCI-devices-as-PCI-not-platform with a new patch + for the same issue, which also works properly with prime setups +- Resolves: rhbz#1353505 + +* Thu Aug 4 2016 Hans de Goede - 1.17.2-21 +- Add missing modesetting-Claim-PCI-devices-as-PCI-not-platform changes to + really allow prime and slave output support with the modesetting driver +- Resolves: rhbz#1353505 + +* Thu Aug 4 2016 Hans de Goede - 1.17.2-20 +- Add Prime and Reverse Prime support to the modesetting driver +- Resolves: rhbz#1353505 + +* Thu Jul 21 2016 Adam Jackson - 1.17.2-19 +- Fix Xephyr initialization against servers without XVideo extension + +* Thu Jul 14 2016 Adam Jackson - 1.17.2-18 +- Link GLX against Mesa's libGL explicitly +- Fix fallback driver sort order in X -configure + +* Tue Jun 28 2016 Peter Hutterer 1.17.2-17 +- Fix segfault after indicator update (#1083642) + +* Wed Jun 01 2016 Adam Jackson - 1.17.2-16 +- Enable IGLX by default and add xorg.conf option + +* Thu May 05 2016 Peter Hutterer 1.17.2-15 +- Force indicator update after layout change (#1083642) + +* Fri Apr 29 2016 Peter Hutterer 1.17.2-14 +- Fix SlowKeys beep behavior (#1271089) + +* Wed Apr 27 2016 Adam Jackson - 1.17.2-13 +- Fix memory leak in modesetting double-shadowfb code + +* Thu Apr 21 2016 Adam Jackson 1.17.2-12 +- Fix missing symbol export + +* Tue Mar 22 2016 Olivier Fourdan 1.17.2-11 +- Configurable number of clients (#1300957) + +* Thu Oct 08 2015 Adam Jackson 1.17.2-10 +- Make -devel Prov/Obs xorg-x11-glamor-devel + +* Thu Oct 01 2015 Adam Jackson 1.17.2-9 +- Fix X -configure with the modesetting driver + +* Thu Aug 20 2015 Adam Jackson 1.17.2-8 +- Add 32->24bpp downconversion and tile-based double buffering to the + shadow framebuffer support in modesetting + +* Tue Aug 11 2015 Adam Jackson 1.17.2-7 +- Fix initial cursor setup's fallback to software cursor + +* Mon Aug 10 2015 Adam Jackson 1.17.2-6 +- Fix glamor crash in software fallback on prime systems + +* Tue Aug 04 2015 Ray Strode 1.17.2-5 +- Unconditionally enable GLX_MESA_copy_sub_buffer + +* Wed Jul 29 2015 Adam Jackson 1.17.2-4 +- Fix GLX extension setup with swrast + +* Tue Jul 21 2015 Adam Jackson 1.17.2-3 +- xserver 1.17.2 + +* Tue Jun 02 2015 Dave Airlie 1.17.1-0.6 +- fix overlapping glamor composite operations + +* Thu May 28 2015 Adam Jackson 1.17.1-0.5 +- Restore RHEL7 listen-on-tcp defaults + +* Mon May 18 2015 Olivier Fourdan 1.17.1-0.4 +- Add a new command line option "--auto-display" to xvfb-run to take + advantage of the XServer's "-displayfd" option to get the display + number directly from Xfvb + +* Wed May 06 2015 Olivier Fourdan 1.17.1-0.3 +- Add missing hw/xfree86/Xorg.sh.in to xorg-x11-server-source package. + This is needed to build packages depending on xorg-x11-server-source + (e.g. tigervnc), otherwise the build will fail. + +* Wed Apr 15 2015 Adam Jackson 1.17.1-0.2 +- Sync with F22 + +* Wed Mar 25 2015 Adam Jackson 1.17.1-0.1 +- xserver 1.17.1 + +* Fri Feb 06 2015 Peter Hutterer 1.15.0-33 +- CVE fixes for CVE-2015-0255 + +* Wed Jan 21 2015 Adam Jackson 1.15.0-32 +- Fix fallback driver probe order +- Fix a crash in X -configure + +* Mon Jan 05 2015 Adam Jackson 1.15.0-31 +- Amend the CVE-2014-8092-3 patch to be legal C++, fixes tigervnc build + +* Mon Dec 08 2014 Dave Airlie 1.15.0-30 +- Fix a lot of CVEs all over the X server. + +* Mon Oct 06 2014 Dave Airlie 1.15.0-29 +- dri2 fixes backport - part of the fix for prime not working with SNA + +* Thu Sep 25 2014 Adam Jackson 1.15.0-28 +- Fix graphics-exposure generation on CopyArea from window to pixmap with + Xinerama active + +* Wed Sep 17 2014 Adam Jackson 1.15.0-27 +- Link Xorg as a PIE + +* Wed Sep 17 2014 Adam Jackson 1.15.0-26 +- In the PCI probe logic, don't try to load drivers RHEL7 doesn't ship. + +* Thu Sep 11 2014 Dave Airlie 1.15.0-25 +- backport ppc64le arch fix. + +* Wed Sep 10 2014 Adam Jackson 1.15.0-24 +- Fix PAM magic in %%install + +* Tue Sep 09 2014 Adam Jackson 1.15.0-23 +- Drop vestigial xwayland patch series +- Sync with RHEL6.6: + - Fix GrabPointer to not wrongly succeed on redirected windows + - Enable PAM + - Xephyr fixes for hardware cursor, 8bpp emulation, and initial size + - Xorg fixes for X -configure and mixed pci/fbdev setups + - Remove invalid bug checks + - Emit DeviceChanged after grab deactivation +- Rediff some things to match the above +- Inflate Release to be ahead of RHEL 6.6 + +* Thu Aug 07 2014 Peter Hutterer 1.15.0-8 +- Push the XKB locked state to the attached slaves to keep keyboard LEDs in + sync (#1047921) +- Discard events from disabled devices to prevent crash on VT-switch or + shutdown (#1095964) + +* Thu Feb 27 2014 Jérôme Glisse 1.15.0-7 +- Do not open tty on non seat0 (#1053063) + +* Tue Feb 25 2014 Adam Jackson 1.15.0-6 +- Fix dist tag +- Link Xorg with -z now + +* Sat Feb 22 2014 Dave Airlie 1.15.0-5 +- fix slave outputs being set as primary (#1067786) + +* Thu Feb 13 2014 Peter Hutterer 1.15.0-4 +- Fix button state check (#1061541) + +* Wed Feb 12 2014 Adam Jackson 1.15.0-3.1 +- Mass rebuild + +* Wed Feb 05 2014 Adam Jackson 1.15.0-3 +- Be sure to not link Xorg against libGL, just libglx. + +* Tue Jan 14 2014 Adam Jackson 1.15.0-2 +- exa-only-draw-valid-trapezoids.patch: Fix crash in exa. + +* Mon Jan 13 2014 Adam Jackson 1.15.0-1 +- xserver 1.15.0 + +* Tue Dec 17 2013 Adam Jackson 1.14.99.904-1 +- 1.15RC4 +- Re-disable int10 on arm + +* Mon Dec 2 2013 Peter Robinson 1.14.99.902-2 +- Add aarch64 to platforms that have libunwind + +* Wed Nov 20 2013 Adam Jackson 1.14.99.902-1 +- 1.15RC2 + +* Mon Nov 18 2013 Adam Jackson 1.14.99.901-6 +- Prefer fbdev to vesa, fixes fallback path on UEFI + +* Fri Nov 08 2013 Adam Jackson 1.14.99.901-5 +- Restore XkbCopyDeviceKeymap for (older) tigervnc + +* Fri Nov 08 2013 Adam Jackson 1.14.99.901-4 +- Explicitly enable DRI2 + +* Thu Nov 07 2013 Adam Jackson 1.14.99.901-3 +- Merge Xinerama+{Damage,Render,Composite} fix series + +* Thu Nov 07 2013 Adam Jackson 1.14.99.901-2 +- Fix build with --disable-present + +* Thu Nov 07 2013 Adam Jackson 1.14.99.901-1 +- 1.15RC1 + +* Mon Oct 28 2013 Adam Jackson 1.14.99.3-2 +- Don't build xwayland in RHEL + +* Fri Oct 25 2013 Adam Jackson 1.14.99.3-1 +- xserver 1.14.99.3 +- xwayland branch refresh +- Drop some F17-era Obsoletes +- Update BuildReqs to match reality + +* Wed Oct 23 2013 Peter Hutterer 1.14.3-6 +- Fix Xdmx cursor jumps (#1019821) + +* Tue Oct 08 2013 Adam Jackson 1.14.3-5 +- Snap wayland damage reports to the bounding box + +* Thu Oct 03 2013 Adam Jackson 1.14.3-4 +- Fix up fixing up the driver list after filtering out non-wayland + +* Wed Oct 02 2013 Adam Jackson 1.14.3-3 +- Only look at wayland-capable drivers when run with -wayland + +* Mon Sep 23 2013 Adam Jackson 1.14.3-2 +- xwayland support + +* Mon Sep 16 2013 Peter Hutterer 1.14.3-1 +- xserver 1.14.3 + +* Tue Jul 30 2013 Peter Hutterer 1.14.2-9 +- Fix active touch grabs, second touchpoint didn't get sent to client +- Fix version mismatch for XI 2.2+ clients (where a library supports > 2.2 + but another version than the originally requested one). + +* Tue Jul 30 2013 Dave Airlie 1.14.2-8 +- fixes for multi-monitor reverse optimus + +* Mon Jul 22 2013 Peter Hutterer 1.14.2-7 +- Fix erroneous valuator 1 coordinate when an absolute device in relative + mode doesn't send y coordinates. + +* Fri Jul 19 2013 Peter Hutterer 1.14.2-6 +- Add new version of the resolution-based scaling patch - scale y down + instead of x up. That gives almost the same behaviour as current + synaptics. Drop the synaptics quirk, this needs to be now removed from the + driver. + +* Mon Jul 15 2013 Peter Hutterer 1.14.2-5 +- Fix logspam when trying to free a non-existant grab. +- Update touch patch to upstream version (from fdo #66720) +- re-add xephyr resizable patch, got lost in rebase (#976995) + +* Fri Jul 12 2013 Dave Airlie 1.14.2-4 +- reapply dropped patch to fix regression (#981953) + +* Tue Jul 09 2013 Peter Hutterer 1.14.2-3 +- Fix crash on 32-bit with virtual box guest additions (#972095) + +* Tue Jul 09 2013 Peter Hutterer 1.14.2-2 +- Fix crash in gnome-shell when tapping a menu twice (fdo #66720) + +* Thu Jul 04 2013 Peter Hutterer 1.14.2-1 +- xorg-server 1.4.2 +- drop merged patches +- Add a quirk to set the synaptics resolution to 0 by default. The pre-scale + patch in the server clashes with synaptics inaccurate resolution numbers, + causing the touchpad movement to be stunted. + +* Thu Jun 06 2013 Peter Hutterer 1.14.1.901-2 +- Backport the touch grab race condition patches from fdo #56578 + +* 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 + +* Sun Jun 02 2013 Adam Jackson 1.14.1-3 +- Backport an arm/ppc crash fix from master (#965749) + +* Tue May 14 2013 Peter Hutterer 1.14.1-2 +- Add -resizeable option to Xephyr, enable by default (#962572) +- Fix crash on 24bpp host server (#518960) + +* Mon May 06 2013 Dave Airlie 1.14.1-1 +- upstream rebase +- reorganise the randr/gpu screen patches + backports + +* Wed Apr 17 2013 Peter Hutterer 1.14.0-6 +- CVE-2013-1940: Fix xf86FlushInput() to drain evdev events + (#950438, #952949) + +* Fri Apr 12 2013 Dave Airlie 1.14.0-5 +- reenable reverse optimus and some missing patch from F18 + +* Fri Apr 12 2013 Dave Airlie 1.14.0-4 +- fix bug with GPU hotplugging while VT switched +- reenable reverse optimus and some missing patch from F18 + +* Fri Mar 22 2013 Dan Horák 1.14.0-3 +- libunwind exists only on selected arches + +* Thu Mar 14 2013 Adam Jackson 1.14.0-2 +- Different RHEL customization + +* Thu Mar 07 2013 Peter Hutterer 1.14.0-1 +- xserver 1.14 + +* Wed Mar 06 2013 Peter Hutterer 1.13.99.902-2 +- Use libunwind for backtraces + +* Fri Feb 15 2013 Adam Jackson +- Drop -sdk Prov/Obs, changed to -devel in F9 +- Drop xorg-x11-X* Obsoletes, leftover from the modular transition in FC5 + +* Fri Feb 15 2013 Peter Hutterer 1.13.99.902-1 +- xserver 1.14RC2 from git + +* Thu Feb 14 2013 Peter Hutterer 1.13.99.901-5 +- Fix scrolling for Evoluent Vertical Mouse 3 (#612140#c20) + +* Fri Jan 25 2013 Peter Hutterer 1.13.99.901-4 +- Add quirk for Evoluent Vertical Mouse 3, button mapping is quirky + (#612140) + +* Wed Jan 23 2013 Adam Jackson 1.13.99.901-3 +- Bump XI minor for barriers + +* Wed Jan 09 2013 Adam Jackson 1.13.99.901-2 +- Pick up fixes from git + +* Wed Jan 09 2013 Adam Jackson 1.13.99.901-1 +- xserver 1.14RC1 + +* Tue Dec 18 2012 Peter Hutterer 1.13.1-1 +- server 1.13.1 + +* Fri Dec 14 2012 Adam Jackson 1.13.0-15 +- Cherry-pick a fix for selection for TouchBegin from multiple clients + +* Wed Dec 12 2012 Dave Airlie 1.13.0-14 +- add events for autoconfig of gpus devices, allow usb devices to notify gnome + +* Wed Dec 12 2012 Dave Airlie 1.13.0-13 +- fix hotplug issue with usb devices and large screens + +* Wed Dec 12 2012 Dave Airlie 1.13.0-11 +- Bump default EQ length to reduce the number of unhelpful abrt reports + +* Wed Nov 28 2012 Adam Jackson 1.13.0-10 +- Fix VT switch key handling + +* Wed Nov 28 2012 Peter Hutterer 1.13.0-9 +- Fix server crash when a XI 1.x device grab is activated on a disabled + synaptics touchpad is disabled + +* Tue Nov 27 2012 Jiri Kastner 1.13.0-8 +- Fix for non-PCI configuration-less setups + +* Wed Oct 31 2012 Peter Hutterer 1.13.0-7 +- Fix build issues on new kernels caused by removal of _INPUT_H + +* Tue Oct 30 2012 Peter Hutterer 1.13.0-6 +- Add touchscreen fixes (including pointer emulation) #871064 + +* Tue Sep 25 2012 Dave Airlie 1.13.0-6 +- update server autobind patch to fix crash reported on irc + +* Thu Sep 20 2012 Peter Hutterer 1.13.0-5 +- Set the transformation matrix to the unity matrix to avoid spurious cursor + jumps (#852841) + +* Fri Sep 14 2012 Dave Airlie 1.13.0-4 +- fix bug when hotplugging a monitor causes oops + +* Mon Sep 10 2012 Dave Airlie 1.13.0-3 +- fix race across GPU power down and server startup + +* Mon Sep 10 2012 Dave Airlie 1.13.0-2 +- fix compat output segfault on output less gpus. + +* Fri Sep 07 2012 Dave Airlie 1.13.0-1 +- rebase to upstream 1.13.0 release tarball + +* Fri Sep 07 2012 Dave Airlie 1.12.99.905-5 +- fix prime offload with DRI2 compositors + +* Mon Sep 03 2012 Dave Airlie 1.12.99.905-4 +- fix multi-gpu after VT switch + +* Mon Aug 27 2012 Dave Airlie 1.12.99.905-3 +- port multi-seat video fixes from upstream + +* Fri Aug 24 2012 Dave Airlie 1.12.99.905-2 +- reintroduce auto config but working this time +- fix two recycle/exit crashes + +* Wed Aug 22 2012 Dave Airlie 1.12.99.905-1 +- rebase to 1.12.99.905 snapshot + +* Fri Aug 17 2012 Dave Airlie 1.12.99.904-4 +- autobind was horribly broken on unplug - drop it like its hotplug. + +* Fri Aug 17 2012 Dave Airlie 1.12.99.904-3 +- add git fixes + autobind to gpu devices. + +* Wed Aug 15 2012 Adam Jackson 1.12.99.904-2 +- Always install int10 and vbe sdk headers + +* Wed Aug 08 2012 Dave Airlie 1.12.99.904-1 +- rebase to 1.12.99.904 snapshot + +* Fri Aug 03 2012 Adam Jackson 1.12.99.903-6 +- Make failure to iopl non-fatal + +* Mon Jul 30 2012 Adam Jackson 1.12.99.903-5 +- No need to --disable-xaa explicitly anymore. + +* Thu Jul 26 2012 Adam Jackson 1.12.99.903-4 +- Install xserver-sdk-abi-requires.release based on stable_abi not gitdate, + so drivers built against a server that Provides multiple ABI versions will + Require the stable version. + +* Thu Jul 26 2012 Adam Jackson 1.12.99.903-3 +- Make it possible to Provide: both stable and gitdate-style ABI versions. + +* Thu Jul 26 2012 Peter Hutterer 1.12.99.903-2 +- xserver-1.12-os-print-newline-after-printing-display-name.patch: drop, + 014ad46f1b353a95e2c4289443ee857cfbabb3ae + +* Thu Jul 26 2012 Dave Airlie 1.12.99.903-1 +- rebase to 1.12.99.903 snapshot + +* Wed Jul 25 2012 Dave Airlie 1.12.99.902-3 +- fix crash due to GLX being linked twice + +* Sun Jul 22 2012 Fedora Release Engineering - 1.12.99.902-2.20120717 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Wed Jul 18 2012 Dave Airlie 1.12.99.902-1 +- server 1.12.99.902 + +* Mon Jul 09 2012 Peter Hutterer 1.12.3-1 +- server 1.12.3 + +* Tue Jun 26 2012 Peter Hutterer 1.12.2-4 +- send keycode/event type down the wire when SlowKeys enable, otherwise + GNOME won't warn about it (#816764) + +* Thu Jun 21 2012 Peter Hutterer 1.12.2-3 +- print newline after printing $DISPLAY to -displayfd (#824594) + +* Fri Jun 15 2012 Dan Horák 1.12.2-2 +- fix build without xorg (aka s390x) + +* Wed May 30 2012 Peter Hutterer 1.12.2-1 +- xserver 1.12.2 + +* Fri May 25 2012 Dave Airlie 1.12.1-2 +- xserver-fix-pci-slot-claims.patch: backport slot claiming fix from master +- xserver-1.12-modesetting-fallback.patch: add modesetting to fallback list + +* Mon May 14 2012 Peter Hutterer +- Drop xserver-1.10.99.1-test.patch: + cd89482088f71ed517c2e88ed437e4752070c3f4 fixed it + +* Mon May 14 2012 Peter Hutterer 1.12.1-1 +- server 1.12.1 +- force autoreconf to avoid libtool errors +- update patches for new indentation style. + +* Mon May 14 2012 Peter Hutterer 1.12.0-6 +- Make timers signal-safe (#814869) + +* Sun May 13 2012 Dennis Gilmore 1.12.0-5 +- enable vbe on arm arches + +* Thu Apr 26 2012 Adam Jackson 1.12.0-4 +- Obsolete some old video drivers in F18+ + +* Wed Mar 21 2012 Adam Jackson 1.12.0-3 +- Tweak arches for RHEL + +* Wed Mar 14 2012 Adam Jackson 1.12.0-2 +- Install Xorg mode 4755, there's no security benefit to 4711. (#712432) + +* Mon Mar 05 2012 Peter Hutterer 1.12.0-1 +- xserver 1.12 +- xserver-1.12-dix-reset-last.scroll-when-resetting-the-valuator-45.patch: + drop, 6f2838818 + +* Thu Feb 16 2012 Adam Jackson 1.11.99.903-2.20120215 +- Don't pretend int10 is a thing on non-PC arches + +* Thu Feb 16 2012 Peter Hutterer 1.11.99.903-1.20120215 +- Server version is 1.11.99.903 now, use that. + +* Wed Feb 15 2012 Peter Hutterer 1.11.99.901-7.20120215 +- Today's git snapshot + +* Sun Feb 12 2012 Peter Hutterer 1.11.99.901-6.20120124 +- Fix installation of xserver-sdk-abi-requires script, if stable_abi is set + always install the relese one, not the git one + +* Sat Feb 11 2012 Peter Hutterer 1.11.99.901-5.20120124 +- ABI is considered stable now: + video 12.0, input 16.0, extension 6.0, font 0.6, ansic 0.4 + +* Sat Feb 11 2012 Peter Hutterer 1.11.99.901-4.20120124 +- xserver-1.12-dix-reset-last.scroll-when-resetting-the-valuator-45.patch: + reset last.scroll on the device whenever the slave device switched to + avoid jumps during scrolling (#788632). + +* Tue Jan 24 2012 Peter Hutterer 1.11.99.901-3.20120124 +- Today's git snapshot +- xserver-1.12-xaa-sdk-headers.patch: drop, a55214d11916b + +* Wed Jan 04 2012 Peter Hutterer 1.11.99.901-2.20120103 +- xserver-1.12-Xext-fix-selinux-build-failure.patch: fix build error + triggered by Red Hat-specific patch to libselinux + +* Tue Jan 03 2012 Peter Hutterer 1.11.99.901-1.20120103 +- Git snapshot 98cde254acb9b98337ddecf64c138d38c14ec2bf +- xserver-1.11.99-optionstr.patch: drop +- 0001-Xext-don-t-swap-CARD8-in-SProcSELinuxQueryVersion.patch: drop + +* Fri Dec 16 2011 Adam Jackson 1.11.99.1-11 +- Always install XAA SDK headers so drivers still build + +* Thu Dec 15 2011 Adam Jackson 1.11.99.1-10 +- --disable-xaa + +* Thu Dec 01 2011 Adam Jackson 1.11.99.1-9 +- xserver-1.8-disable-vboxvideo.patch: Drop, should be fixed now +- Drop vesamodes and extramodes, rhpxl is no more +- Stop building libxf86config, pyxf86config will be gone soon + +* Tue Nov 29 2011 Dave Airlie 1.11.99.1-8 +- put optionstr.h into devel package + +* Mon Nov 21 2011 Adam Jackson 1.11.99.1-7 +- Restore DRI1 until drivers are properly prepared for it + +* Thu Nov 17 2011 Adam Jackson 1.11.99.1-6 +- Disable DRI1 + +* Wed Nov 16 2011 Adam Jackson 1.11.99.1-5 +- Obsolete some dead input drivers. + +* Mon Nov 14 2011 Adam Jackson 1.11.99.1-3 +- Fix permissions on abi script when doing git snapshots + +* Wed Nov 09 2011 Peter Hutterer 1.11.99.1-1.20111109 +- Update to today's git snapshot +- xserver-1.6.1-nouveau.patch: drop, upstream +- xserver-1.10.99-config-add-udev-systemd-multi-seat-support.patch: drop, + upstream +- 0001-dix-block-signals-when-closing-all-devices.patch: drop, upstream + +* Wed Nov 09 2011 Adam Jackson +- Change the ABI magic for snapshots + +* Mon Oct 24 2011 Peter Hutterer 1.11.1-2 +- Block signals when removing all input devices #737031 + +* Thu Oct 13 2011 Adam Jackson +- Drop some Requires >= on things where we had newer versions in F14. + +* Mon Sep 26 2011 Adam Jackson 1.11.1-1 +- xserver 1.11.1 + +* Mon Sep 12 2011 Adam Tkac 1.11.0-2 +- ship more files in the -source subpkg + +* Tue Sep 06 2011 Adam Jackson 1.11.0-1 +- xserver 1.11.0 + +* Thu Aug 18 2011 Adam Jackson 1.10.99.902-1.20110818 +- xserver 1.11rc2 + +* Fri Jul 29 2011 Dave Airlie 1.10.99.1-10.2011051 +- xvfb-run requires xauth installed, fix requires (from jlaska on irc) + +* Wed Jul 27 2011 Peter Hutterer 1.10.99.1-9.20110511 +- Add support for multi-seat support from the config/udev backend. + +* Wed Jun 29 2011 Dan Horák 1.10.99.1-8.20110511 +- don't build tests when --disable-xorg is used like on s390(x) + +* Tue Jun 21 2011 Adam Jackson 1.10.99.1-7.20110511 +- BuildRequires: systemtap-sdt-devel, configure --with-dtrace + +* Wed May 11 2011 Adam Tkac 1.10.99.1-6.20110511 +- include hw/dmx/doc/doxygen.conf.in in the -source subpkg + +* Mon May 09 2011 1.10.99.1-5.20110511 +- Today's server from git +- xserver-1.10-fix-trapezoids.patch: drop, c6cb70be1ed7cf7 +- xserver-1.10-glx-pixmap-crash.patch: drop, 6a433b67ca15fd1 +- xserver-1.10-bg-none-revert.patch: drop, dc0cf7596782087 + +* Thu Apr 21 2011 Hans de Goede 1.10.99.1-4.20110418 +- Drop xserver-1.9.0-qxl-fallback.patch, since the latest qxl driver + supports both revision 1 and 2 qxl devices (#642153) + +* Wed Apr 20 2011 Soren Sandmann 1.10.99.1-3.20110418 +- xserver-1.10-fix-trapezoids.patch: this patch is necessary to prevent + trap corruption with pixman 0.21.8. + +* Tue Apr 19 2011 Peter Hutterer 1.10.99.1-2.20110418 +- rebase all patches +- xserver-1.10-vbe-malloc.patch: drop, d8caa782009abf4d +- "git rm" all unused patches + +* Mon Apr 18 2011 Peter Hutterer 1.10.99.1-1.20110418 +- Today's server from git + +* Wed Mar 30 2011 Adam Jackson 1.10.0-7 +- xserver-1.10-glx-pixmap-crash.patch, xserver-1.10-bg-none-revert.patch: + bugfixes from xserver-next + +* Tue Mar 22 2011 Adam Jackson 1.10.0-6 +- Fix thinko in pointer barrier patch + +* Tue Mar 22 2011 Adam Tkac 1.10.0-5 +- add more files into -source subpkg + +* Thu Mar 17 2011 Adam Jackson 1.10.0-4 +- xserver-1.10-pointer-barriers.patch: Backport CRTC confinement from master + and pointer barriers from the development tree for same. +- xserver-1.10-vbe-malloc.patch: Fix a buffer overrun in the VBE code. + +* Fri Mar 11 2011 Peter Hutterer 1.10.0-3 +- Add Xen virtual pointer quirk to 10-quirks.conf (#523914, #679699) + +* Wed Mar 09 2011 Adam Jackson 1.10.0-2 +- Merge from F16: + + * Wed Mar 09 2011 Adam Jackson 1.10.0-2 + - Disable filesystem caps in paranoia until module loading is audited + + * Fri Feb 25 2011 Peter Hutterer 1.9.99.902-1 + - xserver 1.10.0 + - server-1.9-99.901-xkb-repeat-issues.patch: drop, merged + - xserver-1.4.99-pic-libxf86config.patch: drop, see 60801ff8 + - xserver-1.6.99-default-modes.patch: drop, see dc498b4 + - xserver-1.7.1-multilib.patch: drop, see a16e282 + - ABI bumps: xinput to 12.2, extension to 5.0, video to 10.0