From 115cc5d8ada48d731f43de6ae92917fec82093f1 Mon Sep 17 00:00:00 2001 From: Adam Jackson Date: Mon, 9 Apr 2007 23:09:52 +0000 Subject: [PATCH] * Mon Apr 09 2007 Adam Jackson 1.2.99.905-2 - xserver-1.3.0-pci-bus-count.patch: Allocate the PCI bus array dynamically, so as not to run off the end of it. - xserver-1.3.0-mmap-failure-check.patch: Check for failure when mmap'ing bus memory. (#234073) - xserver-1.3.0-rom-search.patch: Look for the sysfs ROM file in the (flat) /sys/bus/pci/devices tree, instead of the (bus-topological) /sys/devices, so we don't fail to find ROMs merely because they're behind a bridge. - xserver-1.3.0-no-pseudocolor-composite.patch: Refuse to initialize Composite when Render is missing or when the root window is using a pseudocolor visual. (#217388) - xserver-1.3.0-xnest-exposures.patch: Fix Motif app redraw in Xnest. (#229350) --- xorg-x11-server.spec | 100 +++++++++---------- xserver-1.3.0-mmap-failure-check.patch | 41 ++++++++ xserver-1.3.0-no-pseudocolor-composite.patch | 30 ++++++ xserver-1.3.0-pci-bus-count.patch | 40 ++++++++ xserver-1.3.0-rom-search.patch | 13 +++ xserver-1.3.0-xnest-exposures.patch | 20 ++++ 6 files changed, 193 insertions(+), 51 deletions(-) create mode 100644 xserver-1.3.0-mmap-failure-check.patch create mode 100644 xserver-1.3.0-no-pseudocolor-composite.patch create mode 100644 xserver-1.3.0-pci-bus-count.patch create mode 100644 xserver-1.3.0-rom-search.patch create mode 100644 xserver-1.3.0-xnest-exposures.patch diff --git a/xorg-x11-server.spec b/xorg-x11-server.spec index 775dde6..1054223 100644 --- a/xorg-x11-server.spec +++ b/xorg-x11-server.spec @@ -9,7 +9,7 @@ Summary: X.Org X11 X server Name: xorg-x11-server Version: 1.2.99.905 -Release: 1%{?dist} +Release: 2%{?dist} URL: http://www.x.org License: MIT/X11 Group: User Interface/X @@ -28,7 +28,7 @@ Patch11: xorg-x11-server-1.1.1-vt-activate-is-a-terrible-api.patch Patch12: xorg-x11-server-1.1.1-graphics-expose.patch Patch15: xorg-x11-server-1.1.1-automake-1.10-fixes.patch Patch18: xorg-x11-server-1.1.1-glcore-visual-matching.patch -Patch19: xorg-x11-server-1.2.99-unbreak-domain.patch +Patch19: xserver-1.3.0-xnest-exposures.patch # OpenGL compositing manager feature/optimization patches. Patch100: xorg-x11-server-1.1.0-no-move-damage.patch @@ -36,6 +36,7 @@ Patch101: xorg-x11-server-1.1.0-dont-backfill-bg-none.patch Patch105: xorg-x11-server-1.2.0-enable-composite.patch Patch106: xorg-x11-server-1.1.1-no-composite-in-xnest.patch Patch107: xorg-x11-server-1.1.1-offscreen-pixmaps.patch +Patch108: xserver-1.3.0-no-pseudocolor-composite.patch # Red Hat specific tweaking, not intended for upstream # XXX move these to the end of the list @@ -55,6 +56,12 @@ Patch2003: xserver-1.2.0-vfprintf.patch Patch2004: xserver-1.2.0-honor-displaysize.patch Patch2005: xserver-1.2.99.901-xephyr-crash-at-exit.patch +# assorted PCI layer shenanigans. oh the pain. +Patch2500: xorg-x11-server-1.2.99-unbreak-domain.patch +Patch2501: xserver-1.3.0-pci-bus-count.patch +Patch2502: xserver-1.3.0-mmap-failure-check.patch +Patch2503: xserver-1.3.0-rom-search.patch + %define moduledir %{_libdir}/xorg/modules %define drimoduledir %{_libdir}/dri %define sdkdir %{_includedir}/xorg @@ -253,13 +260,14 @@ Xserver source code needed to build VNC server (Xvnc) %patch12 -p1 -b .graphics-expose %patch15 -p1 -b .automake-1.10 %patch18 -p1 -b .glcore-visual -%patch19 -p1 -b .unbreak-domains +%patch19 -p1 -b .xnest-expose %patch100 -p0 -b .no-move-damage %patch101 -p0 -b .dont-backfill-bg-none %patch105 -p1 -b .enable-composite %patch106 -p1 -b .no-xnest-composite %patch107 -p1 -b .offscreen-pixmaps +%patch108 -p1 -b .composite-paranoia %patch1001 -p1 -b .Red-Hat-extramodes %patch1002 -p1 -b .xephyr @@ -277,9 +285,13 @@ Xserver source code needed to build VNC server (Xvnc) %patch2004 -p1 -b .displaysize %patch2005 -p1 -b .xephyr-crash +%patch2500 -p1 -b .unbreak-domains +%patch2501 -p1 -b .pci-bus-count +%patch2502 -p1 -b .mmap-check +%patch2503 -p1 -b .rom-search + %build -# --disable-dependency-tracking ? # --with-rgb-path should be superfluous now ? # --with-pie ? aclocal ; automake -a ; autoconf @@ -323,14 +335,12 @@ mkdir -p $RPM_BUILD_ROOT%{_libdir}/xorg/modules/{drivers,input} # Install the vesamodes and extramodes files to let our install/config tools # be able to parse the same modelist as the X server uses (rhpxl). -{ - mkdir -p $RPM_BUILD_ROOT%{_datadir}/xorg - for each in vesamodes extramodes ; do - install -m 0644 %{SOURCE100} $RPM_BUILD_ROOT%{_datadir}/xorg/$each - cat hw/xfree86/common/$each >> $RPM_BUILD_ROOT%{_datadir}/xorg/$each - chmod 0444 $RPM_BUILD_ROOT%{_datadir}/xorg/$each - done -} +mkdir -p $RPM_BUILD_ROOT%{_datadir}/xorg +for each in vesamodes extramodes ; do + install -m 0644 %{SOURCE100} $RPM_BUILD_ROOT%{_datadir}/xorg/$each + cat hw/xfree86/common/$each >> $RPM_BUILD_ROOT%{_datadir}/xorg/$each + chmod 0444 $RPM_BUILD_ROOT%{_datadir}/xorg/$each +done %endif # Make the source package @@ -359,19 +369,18 @@ xargs tar cf - | (cd %{inst_srcdir} && tar xf -) rm -f $RPM_BUILD_ROOT%{_bindir}/out? rm -f $RPM_BUILD_ROOT%{_bindir}/pcitweak rm -f $RPM_BUILD_ROOT%{_mandir}/man1/pcitweak.1* - # Remove all libtool archives (*.la) find $RPM_BUILD_ROOT -type f -name '*.la' | xargs rm -f -- || : %ifarch s390 s390x # FIXME: The following files get installed on s390/s390x and we don't # want some of them on s390 at all, and others should be in a -common # subpackage, but it's not worth doing that for 3 files right now. -# error: Installed (but unpackaged) file(s) found: -# /randrstr.h -# /usr/lib/pkgconfig/xorg-server.pc -# /usr/share/aclocal/xorg-server.m4 -# /usr/share/man/man1/Xserver.1x.gz -# /var/lib/xkb/README.compiled + # error: Installed (but unpackaged) file(s) found: + # /randrstr.h + # /usr/lib/pkgconfig/xorg-server.pc + # /usr/share/aclocal/xorg-server.m4 + # /usr/share/man/man1/Xserver.1x.gz + # /var/lib/xkb/README.compiled rm -f $RPM_BUILD_ROOT/randrstr.h rm -rf $RPM_BUILD_ROOT%{_libdir}/pkgconfig @@ -386,15 +395,7 @@ rm -rf $RPM_BUILD_ROOT %if %{with_hw_servers} %pre Xorg { - # Install/Upgrade section pushd /etc/X11 - # Migrate any pre-existing XFree86 4.x config file to xorg.conf if it - # doesn't already exist, and rename any remaining XFree86 4.x config files - # to have .obsoleted file extensions, to help avoid end user confusion for - # people unaware of the config file name change between server - # implementations, and avoid bug reports. If this turns out to confuse - # users, I can modify it to add comments to the top of the obsoleted files - # to point users to xorg.conf for configfile in XF86Config XF86Config-4 ; do if [ -r $configfile ]; then if [ -r xorg.conf ]; then @@ -404,30 +405,14 @@ rm -rf $RPM_BUILD_ROOT fi fi done - # Massage pre-existing config files to work properly with X.org X11 - # - Remove xie and pex5 modules from the config files, as they are long - # since obsolete, and not provided since XFree86 4.2.0 - # - Remove Option "XkbRules" "xfree86" to help work around upgrade problems - # such as https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=120858 -# for configfile in xorg.conf ; do - configfile="xorg.conf" - OLD_MODULEPATH="/usr/X11R6/lib/modules" - if [ -r $configfile -a -w $configfile ]; then - # Remove module load lines from the config file for obsolete modules - perl -p -i -e 's/^.*Load.*"(pex5|xie|xtt).*\n$"//gi' $configfile - # Change the keyboard configuration from the deprecated "keyboard" - # driver, to the newer "kbd" driver. - perl -p -i -e 's/^\s*Driver(.*)"keyboard"/Driver\1"kbd"/gi' $configfile - # Remove any Options "XkbRules" lines that may be present - perl -p -i -e 's/^.*Option.*"XkbRules".*"(xfree86|xorg)".*\n$//gi' $configfile - # Remove RgbPath specifications from the config file as they are - # unnecessary, and break upgrades from monolithic to modular X. - # Fixes bugs (#173036, 173435, 173453, 173428) - perl -p -i -e 's#^\s*RgbPath.*$##gi' $configfile - # If ModulePath is specified in the config file, delete it. - perl -p -i -e 's#^\s*ModulePath.*$##gi' $configfile - fi -# done + configfile="xorg.conf" + if [ -r xorg.conf -a -w xorg.conf ]; then + perl -p -i -e 's/^.*Load.*"(pex5|xie|xtt).*\n$"//gi' xorg.conf + perl -p -i -e 's/^\s*Driver(.*)"keyboard"/Driver\1"kbd"/gi' xorg.conf + perl -p -i -e 's/^.*Option.*"XkbRules".*"(xfree86|xorg)".*\n$//gi' xorg.conf + perl -p -i -e 's#^\s*RgbPath.*$##gi' xorg.conf + perl -p -i -e 's#^\s*ModulePath.*$##gi' xorg.conf + fi popd } &> /dev/null || : %endif @@ -562,6 +547,19 @@ rm -rf $RPM_BUILD_ROOT %changelog +* Mon Apr 09 2007 Adam Jackson 1.2.99.905-2 +- xserver-1.3.0-pci-bus-count.patch: Allocate the PCI bus array dynamically, + so as not to run off the end of it. +- xserver-1.3.0-mmap-failure-check.patch: Check for failure when mmap'ing + bus memory. (#234073) +- xserver-1.3.0-rom-search.patch: Look for the sysfs ROM file in the (flat) + /sys/bus/pci/devices tree, instead of the (bus-topological) /sys/devices, + so we don't fail to find ROMs merely because they're behind a bridge. +- xserver-1.3.0-no-pseudocolor-composite.patch: Refuse to initialize + Composite when Render is missing or when the root window is using + a pseudocolor visual. (#217388) +- xserver-1.3.0-xnest-exposures.patch: Fix Motif app redraw in Xnest. (#229350) + * Fri Apr 06 2007 Adam Jackson 1.2.99.905-1 - xserver 1.3 RC5. diff --git a/xserver-1.3.0-mmap-failure-check.patch b/xserver-1.3.0-mmap-failure-check.patch new file mode 100644 index 0000000..e926ba3 --- /dev/null +++ b/xserver-1.3.0-mmap-failure-check.patch @@ -0,0 +1,41 @@ +--- ./hw/xfree86/os-support/bus/linuxPci.c.orig 2007-03-14 09:37:44.000000000 -0600 ++++ ./hw/xfree86/os-support/bus/linuxPci.c 2007-03-14 09:41:01.000000000 -0600 +@@ -634,28 +634,28 @@ + ADDRESS Base, unsigned long Size) + { + int domain = xf86GetPciDomain(Tag); +- int fd; ++ int fd = -1; + pointer addr; + + /* + * We use /proc/bus/pci on non-legacy addresses or if the Linux sysfs + * legacy_mem interface is unavailable. + */ +- if (Base > 1024*1024) +- return linuxMapPci(ScreenNum, Flags, Tag, Base, Size, ++ if (Base >= 1024*1024) ++ addr = linuxMapPci(ScreenNum, Flags, Tag, Base, Size, + PCIIOC_MMAP_IS_MEM); +- +- if ((fd = linuxOpenLegacy(Tag, "legacy_mem")) < 0) +- return linuxMapPci(ScreenNum, Flags, Tag, Base, Size, ++ else if ((fd = linuxOpenLegacy(Tag, "legacy_mem")) < 0) ++ addr = linuxMapPci(ScreenNum, Flags, Tag, Base, Size, + PCIIOC_MMAP_IS_MEM); ++ else ++ addr = mmap(NULL, Size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, Base); + +- addr = mmap(NULL, Size, PROT_READ|PROT_WRITE, MAP_SHARED, fd, Base); +- if (addr == MAP_FAILED) { +- close (fd); ++ if (fd >= 0) ++ close(fd); ++ if (addr == NULL || addr == MAP_FAILED) { + perror("mmap failure"); + FatalError("xf86MapDomainMem(): mmap() failure\n"); + } +- close(fd); + return addr; + } + diff --git a/xserver-1.3.0-no-pseudocolor-composite.patch b/xserver-1.3.0-no-pseudocolor-composite.patch new file mode 100644 index 0000000..21aa3da --- /dev/null +++ b/xserver-1.3.0-no-pseudocolor-composite.patch @@ -0,0 +1,30 @@ +diff --git a/composite/compext.c b/composite/compext.c +index 4c25cc7..af05b4a 100644 +--- a/composite/compext.c ++++ b/composite/compext.c +@@ -678,6 +678,25 @@ CompositeExtensionInit (void) + ExtensionEntry *extEntry; + int s; + ++ for (s = 0; s < screenInfo.numScreens; s++) { ++ ScreenPtr pScreen = screenInfo.screens[s]; ++ VisualPtr vis; ++ ++ /* Composite on 8bpp pseudocolor root windows appears to fail, so ++ * just disable it on anything pseudocolor for safety. ++ */ ++ for (vis = pScreen->visuals; vis->vid != pScreen->rootVisual; vis++) ++ ; ++ if ((vis->class | DynamicClass) == PseudoColor) ++ return; ++ ++ /* Ensure that Render is initialized, which is required for automatic ++ * compositing. ++ */ ++ if (GetPictureScreenIfSet(pScreen) == NULL) ++ return; ++ } ++ + CompositeClientWindowType = CreateNewResourceType (FreeCompositeClientWindow); + if (!CompositeClientWindowType) + return; diff --git a/xserver-1.3.0-pci-bus-count.patch b/xserver-1.3.0-pci-bus-count.patch new file mode 100644 index 0000000..13b5808 --- /dev/null +++ b/xserver-1.3.0-pci-bus-count.patch @@ -0,0 +1,40 @@ +--- xorg-server-1.1.1/hw/xfree86/os-support/bus/Pci.c.jx 2007-02-12 11:08:52.000000000 -0500 ++++ xorg-server-1.1.1/hw/xfree86/os-support/bus/Pci.c 2007-03-30 12:20:08.000000000 -0400 +@@ -231,14 +231,14 @@ + int pciMaxBusNum = MAX_PCI_BUSES; + static Bool inProbe = FALSE; + +-static pciConfigPtr pci_devp[MAX_PCI_DEVICES + 1] = {NULL, }; ++static pciConfigPtr *pci_devp = NULL; + + static int readPciBios( PCITAG Tag, CARD8* tmp, ADDRESS hostbase, + unsigned char * buf, int len, PciBiosType BiosType ); + + static int (*pciOSHandleBIOS)(PCITAG Tag, int basereg, unsigned char *buf, int len); + +-int xf86MaxPciDevs = MAX_PCI_DEVICES; ++int xf86MaxPciDevs = 0; + + /* + * Platform specific PCI function pointers. +@@ -271,6 +271,11 @@ + if (pciNumBuses <= 0) + ARCH_PCI_OS_INIT(); + #endif ++ if (xf86MaxPciDevs == 0) ++ xf86MaxPciDevs = MAX_PCI_DEVICES; /* XXX bogus */ ++ if (pci_devp) ++ xfree(pci_devp); ++ pci_devp = xnfcalloc(xf86MaxPciDevs + 1, sizeof(pciConfigPtr)); + } + + void pciSetOSBIOSPtr(int (*bios_fn)(PCITAG Tag, int basereg, unsigned char * buf, int len)) +@@ -913,7 +918,7 @@ + * result in an endless recursion if platform/OS specific PCI + * bus probing code calls this function from with in it. + */ +- if (done || pci_devp[0]) ++ if (done || pci_devp) + return pci_devp; + + done = TRUE; diff --git a/xserver-1.3.0-rom-search.patch b/xserver-1.3.0-rom-search.patch new file mode 100644 index 0000000..c18188e --- /dev/null +++ b/xserver-1.3.0-rom-search.patch @@ -0,0 +1,13 @@ +--- xorg-server-1.2.99.905/hw/xfree86/os-support/bus/linuxPci.c.jx 2007-04-09 16:15:43.000000000 -0400 ++++ xorg-server-1.2.99.905/hw/xfree86/os-support/bus/linuxPci.c 2007-04-09 17:37:28.000000000 -0400 +@@ -778,8 +778,8 @@ + bus = PCI_BUS_NO_DOMAIN(PCI_BUS_FROM_TAG(Tag)); + dev = PCI_DEV_FROM_TAG(Tag); + func = PCI_FUNC_FROM_TAG(Tag); +- sprintf(file, "/sys/devices/pci%04x:%02x/%04x:%02x:%02x.%1x/rom", +- dom, bus, dom, bus, dev, func); ++ sprintf(file, "/sys/bus/pci/devices/%04x:%02x:%02x.%1x/rom", ++ dom, bus, dev, func); + + /* + * If the caller wants the ROM and the sysfs rom interface exists, diff --git a/xserver-1.3.0-xnest-exposures.patch b/xserver-1.3.0-xnest-exposures.patch new file mode 100644 index 0000000..f32fba3 --- /dev/null +++ b/xserver-1.3.0-xnest-exposures.patch @@ -0,0 +1,20 @@ +--- xorg-server-1.2.99.905/hw/xnest/Events.c.jx 2007-01-31 19:55:51.000000000 -0500 ++++ xorg-server-1.2.99.905/hw/xnest/Events.c 2007-04-09 18:42:51.000000000 -0400 +@@ -85,7 +85,7 @@ + while (XCheckIfEvent(xnestDisplay, &X, xnestExposurePredicate, NULL)) { + pWin = xnestWindowPtr(X.xexpose.window); + +- if (pWin) { ++ if (pWin && X.xexpose.width && X.xexpose.height) { + Box.x1 = pWin->drawable.x + wBorderWidth(pWin) + X.xexpose.x; + Box.y1 = pWin->drawable.y + wBorderWidth(pWin) + X.xexpose.y; + Box.x2 = Box.x1 + X.xexpose.width; +@@ -93,7 +93,7 @@ + + REGION_INIT(pWin->drawable.pScreen, &Rgn, &Box, 1); + +- miWindowExposures(pWin, &Rgn, NullRegion); ++ miSendExposures(pWin, &Rgn, Box.x2, Box.y2); + } + } + }