diff --git a/xorg-x11-server.spec b/xorg-x11-server.spec index 04f5204..9d2458f 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.3.0.0 -Release: 15%{?dist} +Release: 16%{?dist} URL: http://www.x.org License: MIT/X11 Group: User Interface/X @@ -68,6 +68,7 @@ Patch2008: xserver-1.3.0-randrama-no-zero-screens.patch Patch2009: xserver-1.3.0-arm-iopl.patch Patch2010: xserver-1.3.0-idletime.patch Patch2011: xserver-1.3.0-edid-quirk-backports.patch +Patch2012: xserver-1.3.0-add-really-slow-bcopy.patch # assorted PCI layer shenanigans. oh the pain. Patch2500: xorg-x11-server-1.2.99-unbreak-domain.patch @@ -325,6 +326,7 @@ Xserver source code needed to build VNC server (Xvnc) %patch2009 -p1 -b .arm %patch2010 -p1 -b .idletime %patch2011 -p1 -b .edid-quirks +%patch2012 -p1 -b .slow-bcopy %patch2500 -p1 -b .unbreak-domains %patch2501 -p1 -b .pci-bus-count @@ -600,6 +602,9 @@ rm -rf $RPM_BUILD_ROOT %changelog +* Thu Aug 02 2007 Dave Airlie 1.3.0.0-16 +- xserver-1.3.0-add-really-slow-bcopy.patch: Speed server start on some cards + * Thu Jul 12 2007 Adam Jackson 1.3.0.0-15 - xserver-1.3.0-edid-quirk-backports.patch: Backport EDID quirks from master; fixes some Samsung monitors. (#232810) diff --git a/xserver-1.3.0-add-really-slow-bcopy.patch b/xserver-1.3.0-add-really-slow-bcopy.patch new file mode 100644 index 0000000..ba8c766 --- /dev/null +++ b/xserver-1.3.0-add-really-slow-bcopy.patch @@ -0,0 +1,73 @@ +diff --git a/hw/xfree86/loader/xf86sym.c b/hw/xfree86/loader/xf86sym.c +index d925bed..8a2768d 100644 +--- a/hw/xfree86/loader/xf86sym.c ++++ b/hw/xfree86/loader/xf86sym.c +@@ -259,6 +259,7 @@ _X_HIDDEN void *xfree86LookupTab[] = { + SYMFUNC(xf86UDelay) + SYMFUNC(xf86IODelay) + SYMFUNC(xf86SlowBcopy) ++ SYMFUNC(xf86SetReallySlowBcopy) + #ifdef __alpha__ + SYMFUNC(xf86SlowBCopyToBus) + SYMFUNC(xf86SlowBCopyFromBus) +diff --git a/hw/xfree86/os-support/misc/SlowBcopy.c b/hw/xfree86/os-support/misc/SlowBcopy.c +index 7694eaa..5cd7168 100644 +--- a/hw/xfree86/os-support/misc/SlowBcopy.c ++++ b/hw/xfree86/os-support/misc/SlowBcopy.c +@@ -22,21 +22,37 @@ + #include "xf86_OSlib.h" + #include "compiler.h" + +-/* The outb() isn't needed on my machine, but who knows ... -- ost */ ++static int really_slow_bcopy; ++ + _X_EXPORT void +-xf86SlowBcopy(unsigned char *src, unsigned char *dst, int len) ++xf86SetReallySlowBcopy(void) ++{ ++ really_slow_bcopy = 1; ++} ++ ++#if defined(__i386__) || defined(__x86_64__) ++static void xf86_really_slow_bcopy(unsigned char *src, unsigned char *dst, int len) + { + while(len--) + { + *dst++ = *src++; +-#if !defined(__sparc__) && \ +- !defined(__powerpc__) && \ +- !defined(__mips__) && \ +- !defined(__ia64__) && \ +- !defined(__arm__) + outb(0x80, 0x00); ++ } ++} + #endif ++ ++/* The outb() isn't needed on my machine, but who knows ... -- ost */ ++_X_EXPORT void ++xf86SlowBcopy(unsigned char *src, unsigned char *dst, int len) ++{ ++#if defined(__i386__) || defined(__x86_64__) ++ if (really_slow_bcopy) { ++ xf86_really_slow_bcopy(src, dst, len); ++ return; + } ++#endif ++ while(len--) ++ *dst++ = *src++; + } + + #ifdef __alpha__ +diff --git a/hw/xfree86/os-support/xf86_OSproc.h b/hw/xfree86/os-support/xf86_OSproc.h +index 1bbbf56..6f0391d 100644 +--- a/hw/xfree86/os-support/xf86_OSproc.h ++++ b/hw/xfree86/os-support/xf86_OSproc.h +@@ -159,6 +159,7 @@ extern void xf86BusToMem(unsigned char *, unsigned char *, int); + extern void xf86MemToBus(unsigned char *, unsigned char *, int); + extern void xf86IODelay(void); + extern void xf86UDelay(long usec); ++extern void xf86SetReallySlowBcopy(void); + extern void xf86SlowBcopy(unsigned char *, unsigned char *, int); + extern int xf86OpenSerial(pointer options); + extern int xf86SetSerial(int fd, pointer options);