diff -u --recursive --new-file v2.0.6/linux/Documentation/Changes linux/Documentation/Changes
--- v2.0.6/linux/Documentation/Changes	Mon Jul  8 16:09:50 1996
+++ linux/Documentation/Changes	Mon Jul 15 09:55:10 1996
@@ -22,14 +22,14 @@
 documento, consultad la traduccion de Alfredo Sanjuan en
 http://slug.ctv.es/~alfredo/Cambios.html.
 
-Last updated: July 6, 1996.
+Last updated: July 13, 1996.
 Current Author: Chris Ricker (gt1355b@prism.gatech.edu).
 
 Current Releases
 ****************
 
 - Kernel modules	 2.0.0
-- PPP daemon		 Stable: 2.2.0f
+- PPP daemon		 2.2.0f
 - Dynamic linker (ld.so) 1.7.14
 - GNU CC		 2.7.2
 - Binutils		 2.6.0.14
@@ -277,7 +277,7 @@
 so that only packets coming in/going out via that device (network
 interface) match with a rule.  This is especially useful to prevent
 spoofing.  You'll need to get
-ftp://ftp.xos.nl/pub/linux/ipfwadm/ipfwadm-2.1.tar.gz to use this.
+ftp://ftp.xos.nl/pub/linux/ipfwadm/ipfwadm-2.2.tar.gz to use this.
 
 IP Masquerading
 ===============
@@ -461,8 +461,9 @@
 
    Those of you running Slackware may experience weirdness with man
 pages due to changes in groff.  If your man pages display <AD> for -
-when present at the end of a line, try adding a -r to your LESS
-environmental variable.
+when present at the end of a line, try setting an appropriate value
+(many have reported success with "latin1", for example) for the
+environmental variable LESSCHARSET.
 
 How to know the version of the installed programs
 *************************************************
@@ -592,6 +593,12 @@
 upgrade to install.  Almost everything you need is available in
 ftp://ftp.redhat.com/pub/current/i386/updates/2.0-kernel/ and its
 mirrors.
+
+   For others, especially those of you running Slackware 3.0, David
+Bourgin has put together a Slackware-compatible package of everything
+necessary to quickly and easily upgrade to 2.0.x.  See
+ftp://ftp.wsc.com/pub/freeware/linux/update.linux/ for more information
+and the files.
 
 Please send info about any other packages that 2.0.x "broke" or about
 any new features of 2.0.x that require extra or new packages for use to
diff -u --recursive --new-file v2.0.6/linux/Documentation/Configure.help linux/Documentation/Configure.help
--- v2.0.6/linux/Documentation/Configure.help	Sat Jul  6 14:51:23 1996
+++ linux/Documentation/Configure.help	Mon Jul 15 09:55:20 1996
@@ -1442,10 +1442,12 @@
   This driver has been tested ok with linux/i386  and is currently untested
   under linux/Alpha. If you intend to use this driver under linux/Alpha, just 
   try it first with read-only or mounted read-only devices.
+  Memory mapped io are currently not supported under linux/Alpha.
 
 force normal IO
 CONFIG_SCSI_NCR53C8XX_IOMAPPED
-  This option allow to force the driver to use normal IO.
+  Under linux/Alpha only normal io are currently supported.
+  Under linux/i386, this option allow to force the driver to use normal IO.
   Memory mapped IO have less latency than normal IO.
   During initialisation phase, the driver first tries to use memory mapped io.
   If nothing seems wrong, it will use memory mapped io.
@@ -1840,7 +1842,7 @@
   interface. The driver supports the ser12 and par96 designs. To
   configure the driver, use the setbaycom utility available from
   http://www.ife.ee.ethz.ch/~sailer/ham/ham.html#lnxbay. For
-  informations on the modems, see http://www.baycom.de and
+  information on the modems, see http://www.baycom.de and
   drivers/char/README.baycom.  If you want to compile this as a module
   ( = code which can be inserted in and removed from the running
   kernel whenever you want), say M here and read
diff -u --recursive --new-file v2.0.6/linux/Documentation/xterm-linux.xpm linux/Documentation/xterm-linux.xpm
--- v2.0.6/linux/Documentation/xterm-linux.xpm	Thu Jan  1 02:00:00 1970
+++ linux/Documentation/xterm-linux.xpm	Sun Jul 14 13:04:53 1996
@@ -0,0 +1,61 @@
+/* XPM */
+/*****************************************************************************/
+/**       This pixmap was made by Torsten Poulin - 1996 - torsten@diku.dk   **/
+/**       It was made by combining xterm-blank.xpm with                     **/
+/**       the wonderfully cute Linux penguin mascot by Larry Ewing.         **/
+/**       I had to change Larry's penguin a little to make it fit.          **/
+/**       xterm-blank.xpm contained the following comment:                  **/
+/**       This pixmap is kindly offered by Ion Cionca - 1992 -              **/
+/**       Swiss Federal Institute of Technology                             **/
+/**       Central Computing Service                                         **/
+/*****************************************************************************/
+static char * image_name [] = {
+/**/
+"64 38 8 1",
+/**/
+" 	s mask	c none",
+".	c gray70",
+"X	c gray85",
+"o	c gray50",
+"O	c yellow",
+"+	c darkolivegreen",
+"@	c white",
+"#	c black",
+"              ######                                            ",
+"             ########                                           ",
+"            ##########    ...........................           ",
+"            ###########  .XXXXXXXXXXXXXXXXXXXXXXXXXXX.          ",
+"            ########### .XXXXXXXXXXXXXXXXXXXXXXXXXXXXXoo        ",
+"            #@@@#@@@### .XX+++++++++++++++++++++++XXXXoo        ",
+"            #@#@#@#@### .XX++++++++++++++++++++++++XXXooo       ",
+"            #@#####@### .XX++@@+@++@+@@@@++@+++++++XXXooo       ",
+"            ###OOO######.XX++++++++++++++++++++++++XXXoooo      ",
+"            ##OOOOOO####.XX++@@@@+@@+@@@+++++++++++XXXoooo      ",
+"            #O#OOO#O####.XX++++++++++++++++++++++++XXXooooo     ",
+"            ##O###OO####.XX++@@@@@@@@@@+@@@@@++++++XXXooooo     ",
+"            ###OOOO@#####XX++++++++++++++++++++++++XXXooooo     ",
+"           ##@###@@@@####XX++@@@+@@@@+@@++@@@++++++XXXooooo     ",
+"           #@@@@@@@@@@####X++++++++++++++++++++++++XXXooooo     ",
+"          ##@@@@@@@@@@#####++@+++++++++++++++++++++XXXooooo     ",
+"         ###@@@@@@@@@@######+++++++++++++++++++++++XXXooooo     ",
+"        ####@@@@@@@@@@@#####+@@@@+@+@@@+@++++++++++XXXooooo     ",
+"        ###@@@@@@@@@@@@######++++++++++++++++++++++XXXooooo     ",
+"        ##@@@@@@@@@@@@@@#####@+@@@@++++++++++++++++XXXooooo     ",
+"       ###@@@@@@@@@@@@@@######++++++++++++++++++++XXXXoooo      ",
+"       ###@@@@@@@@@@@@@@######XXXXXXXXXXXXXXXXXXXXXXXXooo       ",
+"      ###@@@@@@@@@@@@@@@######XXXXXXXXXXXXXXXXXXXXXXXooo        ",
+"      ###@@@@@@@@@@@@@@@@#####ooooooooooooooooooooooo...oo      ",
+"      ###@@@@@@@@@@@@@@@######.........................ooo      ",
+"     #OO##@@@@@@@@@@@@@#######oooooooooooooooooooooooooooo      ",
+"     #OOO##@@@@@@@@@@@#OO####O#XXXXXXXXXXXXXXXXXXXXXXXoooo.. .. ",
+"  ###OOOOO##@@@@@@@@@@#OOO#OOO#XXXXXXXXXXXXXX#######XXoooo  .  .",
+" #OOOOOOOO###@@@@@@@@@#OOOOOOO#ooooooooooooooooooooXXXooo     . ",
+" #OOOOOOOOO###@@@@@@@@@#OOOOOOO##XXXXXXXXXXXXXXXXXooooo      .  ",
+"  #OOOOOOOOO#@@@@@@@@###OOOOOOOOO#XXXXXXXXXXXXXXXoo      oooooo ",
+"  #OOOOOOOOO#@@@@@@@####OOOOOOOO#@@@@@@@@@@@XXXXXoo   ooooo...o ",
+" #OOOOOOOOOOO###########OOOOOO##XXXXXXXXXXXXXXXXoo   ooXXXoo..o ",
+"  ##OOOOOOOOO###########OOOO##@@@@@@@@@@@@@XXXXoo    oXXXXX..o  ",
+"     ###OOOO###    oXX##OOO#XXXXXXXXXXXXXXXXXXoo     o.....oo   ",
+"         ####      oooo####oooooooooooooooooooo      ooooooo    ",
+"                                                                ",
+"                                                                "};
diff -u --recursive --new-file v2.0.6/linux/Makefile linux/Makefile
--- v2.0.6/linux/Makefile	Mon Jul 15 11:20:23 1996
+++ linux/Makefile	Mon Jul 15 11:47:24 1996
@@ -1,6 +1,6 @@
 VERSION = 2
 PATCHLEVEL = 0
-SUBLEVEL = 6
+SUBLEVEL = 7
 
 ARCH = i386
 
diff -u --recursive --new-file v2.0.6/linux/arch/alpha/config.in linux/arch/alpha/config.in
--- v2.0.6/linux/arch/alpha/config.in	Wed Jul 10 15:20:24 1996
+++ linux/arch/alpha/config.in	Mon Jul 15 09:47:41 1996
@@ -36,6 +36,7 @@
 choice 'Alpha system type' \
 	"Avanti		CONFIG_ALPHA_AVANTI		\
 	 Alpha-XL	CONFIG_ALPHA_XL			\
+	 Alpha-XLT	CONFIG_ALPHA_XLT		\
 	 Cabriolet	CONFIG_ALPHA_CABRIOLET		\
 	 EB66		CONFIG_ALPHA_EB66		\
 	 EB66+		CONFIG_ALPHA_EB66P		\
@@ -61,7 +62,7 @@
 	define_bool CONFIG_ALPHA_APECS y
 fi
 if [ "$CONFIG_ALPHA_EB164" = "y" -o "$CONFIG_ALPHA_PC164" = "y" \
-	-o "$CONFIG_ALPHA_ALCOR" = "y" ]
+	-o "$CONFIG_ALPHA_ALCOR" = "y" -o "$CONFIG_ALPHA_XLT" = "y" ]
 then
 	define_bool CONFIG_PCI y
 	define_bool CONFIG_ALPHA_EV5 y
diff -u --recursive --new-file v2.0.6/linux/arch/alpha/defconfig linux/arch/alpha/defconfig
--- v2.0.6/linux/arch/alpha/defconfig	Mon Jul  8 16:09:51 1996
+++ linux/arch/alpha/defconfig	Mon Jul 15 14:22:53 1996
@@ -20,6 +20,7 @@
 CONFIG_NATIVE=y
 # CONFIG_ALPHA_AVANTI is not set
 # CONFIG_ALPHA_XL is not set
+# CONFIG_ALPHA_XLT is not set
 # CONFIG_ALPHA_CABRIOLET is not set
 # CONFIG_ALPHA_EB66 is not set
 # CONFIG_ALPHA_EB66P is not set
diff -u --recursive --new-file v2.0.6/linux/arch/alpha/kernel/bios32.c linux/arch/alpha/kernel/bios32.c
--- v2.0.6/linux/arch/alpha/kernel/bios32.c	Sun Jun  9 13:28:41 1996
+++ linux/arch/alpha/kernel/bios32.c	Mon Jul 15 14:22:53 1996
@@ -892,6 +892,62 @@
 	common_fixup(7, 12, 5, irq_tab, 0);
 }
 
+/*
+ * Fixup configuration for ALPHA XLT (EV5/EV56)
+ *
+ * Summary @ GRU_INT_REQ:
+ * Bit      Meaning
+ * 0        Interrupt Line A from slot 2
+ * 1        Interrupt Line B from slot 2
+ * 2        Interrupt Line C from slot 2
+ * 3        Interrupt Line D from slot 2
+ * 4        Interrupt Line A from slot 1
+ * 5        Interrupt line B from slot 1
+ * 6        Interrupt Line C from slot 1
+ * 7        Interrupt Line D from slot 1
+ * 8        Interrupt Line A from slot 0
+ * 9        Interrupt Line B from slot 0
+ *10        Interrupt Line C from slot 0
+ *11        Interrupt Line D from slot 0
+ *12        NCR810 SCSI in slot 9
+ *13        DC-21040 (TULIP) in slot 6
+ *14-19     Reserved
+ *20-23     Jumpers (interrupt)
+ *24-27     Module revision
+ *28-30     Reserved
+ *31        EISA interrupt
+ *
+ * The device to slot mapping looks like:
+ *
+ * Slot     Device
+ *  6       TULIP
+ *  7       PCI on board slot 0
+ *  8       none
+ *  9       SCSI
+ * 10       PCI-ISA bridge
+ * 11       PCI on board slot 2
+ * 12       PCI on board slot 1
+ *   
+ *
+ * This two layered interrupt approach means that we allocate IRQ 16 and 
+ * above for PCI interrupts.  The IRQ relates to which bit the interrupt
+ * comes in on.  This makes interrupt processing much easier.
+ */
+static inline void xlt_fixup(void)
+{
+	char irq_tab[7][5] = {
+	  /*INT    INTA   INTB   INTC   INTD */
+	  {16+13, 16+13, 16+13, 16+13, 16+13},	/* IdSel 17,  TULIP  */
+	  { 16+8,  16+8,  16+9, 16+10, 16+11},	/* IdSel 18,  slot 0 */
+	  {   -1,    -1,    -1,    -1,    -1},	/* IdSel 19,  none   */
+	  {16+12, 16+12, 16+12, 16+12, 16+12},	/* IdSel 20,  SCSI   */
+	  {   -1,    -1,    -1,    -1,    -1},	/* IdSel 21,  SIO    */
+	  { 16+0,  16+0,  16+1,  16+2,  16+3},	/* IdSel 22,  slot 2 */
+	  { 16+4,  16+4,  16+5,  16+6,  16+7},	/* IdSel 23,  slot 1 */
+	};
+	common_fixup(6, 12, 5, irq_tab, 0);
+}
+
 
 /*
  * Fixup configuration for all boards that route the PCI interrupts
@@ -1077,6 +1133,8 @@
 	mikasa_fixup();
 #elif defined(CONFIG_ALPHA_ALCOR)
 	alcor_fixup();
+#elif defined(CONFIG_ALPHA_XLT)
+	xlt_fixup();
 #else
 #	error You must tell me what kind of platform you want.
 #endif
diff -u --recursive --new-file v2.0.6/linux/arch/alpha/kernel/irq.c linux/arch/alpha/kernel/irq.c
--- v2.0.6/linux/arch/alpha/kernel/irq.c	Wed Jul 10 15:20:24 1996
+++ linux/arch/alpha/kernel/irq.c	Mon Jul 15 09:47:41 1996
@@ -35,9 +35,9 @@
 /*
  * Shadow-copy of masked interrupts.
  *  The bits are used as follows:
- *	 0.. 7	first ISA PIC (irq level 0..7)
- *	 8..15	second ISA PIC (irq level 8..15)
- *   Systems with 32 PCI interrupt lines (e.g., Alcor):
+ *	 0.. 7	first (E)ISA PIC (irq level 0..7)
+ *	 8..15	second (E)ISA PIC (irq level 8..15)
+ *   Systems with PCI interrupt lines managed by GRU (e.g., Alcor, XLT):
  *	16..47	PCI interrupts 0..31 (int at GRU_INT_MASK)
  *   Mikasa:
  *	16..31	PCI interrupts 0..15 (short at I/O port 536)
@@ -60,8 +60,7 @@
 #if NR_IRQS == 48
 	      default:
 		/* note inverted sense of mask bits: */
-		*(unsigned int *)GRU_INT_MASK = ~(mask >> 16);
-		mb();
+		*(unsigned int *)GRU_INT_MASK = ~(mask >> 16); mb();
 		break;
 
 #elif NR_IRQS == 33
@@ -166,17 +165,12 @@
 		}
 		/* .. then the master */
 		outb(0xE0 | irq, 0x20);
+#if defined(CONFIG_ALPHA_ALCOR) || defined(CONFIG_ALPHA_XLT)
+		/* on ALCOR/XLT, need to dismiss interrupt via GRU */
+		*(int *)GRU_INT_CLEAR = 0x80000000; mb();
+		*(int *)GRU_INT_CLEAR = 0x00000000; mb();
+#endif /* ALCOR || XLT */
 	}
-#if 0
-	/* This is not needed since all interrupt are level-sensitive */
-#if defined(CONFIG_ALPHA_ALCOR)
-	/* on ALCOR, need to dismiss interrupt via GRU */
-	*(int *)GRU_INT_CLEAR = 0x80000000;
-	mb();
-	*(int *)GRU_INT_CLEAR = 0x00000000;
-	mb();
-#endif /* CONFIG_ALPHA_ALCOR */
-#endif
 }
 
 int request_irq(unsigned int irq, 
@@ -413,6 +407,42 @@
 #endif
 }
 
+#if defined(CONFIG_ALPHA_ALCOR) || defined(CONFIG_ALPHA_XLT)
+/* we have to conditionally compile this because of GRU_xxx symbols */
+static inline void alcor_and_xlt_device_interrupt(unsigned long vector,
+                                                  struct pt_regs * regs)
+{
+        unsigned long pld;
+        unsigned int i;
+        unsigned long flags;
+
+        save_flags(flags);
+        cli();
+
+        /* read the interrupt summary register of the GRU */
+        pld = (*(unsigned int *)GRU_INT_REQ) & GRU_INT_REQ_BITS;
+
+#if 0
+        printk("[0x%08lx/0x%04x]", pld, inb(0x20) | (inb(0xA0) << 8));
+#endif
+
+        /*
+         * Now for every possible bit set, work through them and call
+         * the appropriate interrupt handler.
+         */
+        while (pld) {
+                i = ffz(~pld);
+                pld &= pld - 1; /* clear least bit set */
+                if (i == 31) {
+                        isa_device_interrupt(vector, regs);
+                } else {
+                        device_interrupt(16 + i, 16 + i, regs);
+                }
+        }
+        restore_flags(flags);
+}
+#endif /* ALCOR || XLT */
+
 static inline void cabriolet_and_eb66p_device_interrupt(unsigned long vector,
 							struct pt_regs * regs)
 {
@@ -655,6 +685,8 @@
 #if defined(CONFIG_ALPHA_JENSEN) || defined(CONFIG_ALPHA_NONAME) || \
     defined(CONFIG_ALPHA_P2K) || defined(CONFIG_ALPHA_SRM)
 			srm_device_interrupt(vector, &regs);
+#elif NR_IRQS == 48
+			alcor_and_xlt_device_interrupt(vector, &regs);
 #elif NR_IRQS == 33
 			cabriolet_and_eb66p_device_interrupt(vector, &regs);
 #elif defined(CONFIG_ALPHA_MIKASA)
@@ -684,9 +716,8 @@
 	dma_outb(0, DMA1_CLR_MASK_REG);
 	dma_outb(0, DMA2_CLR_MASK_REG);
 #if NR_IRQS == 48
-	*(unsigned int *)GRU_INT_MASK = ~(irq_mask >> 16);	/* invert */
-	mb();
-	enable_irq(16 + 31);	/* enable EISA PIC cascade */
+	*(unsigned int *)GRU_INT_MASK = ~(irq_mask >> 16); mb();/* invert */
+	enable_irq(16 + 31);	/* enable (E)ISA PIC cascade */
 #elif NR_IRQS == 33
 	outl(irq_mask >> 16, 0x804);
 	enable_irq(16 +  4);	/* enable SIO cascade */
diff -u --recursive --new-file v2.0.6/linux/arch/alpha/kernel/lca.c linux/arch/alpha/kernel/lca.c
--- v2.0.6/linux/arch/alpha/kernel/lca.c	Sat Feb 17 09:19:37 1996
+++ linux/arch/alpha/kernel/lca.c	Mon Jul 15 09:47:41 1996
@@ -341,7 +341,7 @@
     printk("    %s %s error to %s occurred at address %x\n",
 	   (esr & ESR_CEE) ? "Correctable" : ((esr & ESR_UEE) ? "Uncorrectable" : "A"),
 	   (esr & ESR_WRE) ? "write" : "read",
-	   (esr & ESR_SOR) ? "b-cache" : "memory",
+	   (esr & ESR_SOR) ? "memory" : "b-cache",
 	   (unsigned) (ear & 0x1ffffff8));
     if (esr & ESR_CTE) {
 	printk("    A b-cache tag parity error was detected.\n");
diff -u --recursive --new-file v2.0.6/linux/arch/alpha/lib/csum_partial_copy.c linux/arch/alpha/lib/csum_partial_copy.c
--- v2.0.6/linux/arch/alpha/lib/csum_partial_copy.c	Mon Jul 15 11:20:23 1996
+++ linux/arch/alpha/lib/csum_partial_copy.c	Mon Jul 15 09:58:48 1996
@@ -8,10 +8,10 @@
  */
 
 #define ldq_u(x,y) \
-__asm__("ldq_u %0,%1":"=r" (x):"m" (*(unsigned long *)(y)))
+__asm__ __volatile__("ldq_u %0,%1":"=r" (x):"m" (*(unsigned long *)(y)))
 
 #define stq_u(x,y) \
-__asm__("stq_u %1,%0":"=m" (*(unsigned long *)(y)):"r" (x))
+__asm__ __volatile__("stq_u %1,%0":"=m" (*(unsigned long *)(y)):"r" (x))
 
 #define extql(x,y,z) \
 __asm__ __volatile__("extql %1,%2,%0":"=r" (z):"r" (x),"r" (y))
@@ -36,12 +36,11 @@
  */
 static inline unsigned long csum_partial_copy_aligned(
 	unsigned long *src, unsigned long *dst,
-	long len, unsigned long checksum)
+	long len, unsigned long checksum,
+	unsigned long word)
 {
-	unsigned long word, carry = 0;
+	unsigned long carry = 0;
 
-	len -= 8;
-	word = *src;
 	while (len >= 0) {
 		checksum += carry;
 		src++;
@@ -73,34 +72,33 @@
 static inline unsigned long csum_partial_copy_dest_aligned(
 	unsigned long *src, unsigned long *dst,
 	unsigned long soff,
-	long len, unsigned long checksum)
+	long len, unsigned long checksum,
+	unsigned long first)
 {
-	unsigned long first, word, carry = 0;
+	unsigned long word, carry = 0;
 
-	len -= 8;
-	first = src[0];
 	while (len >= 0) {
 		unsigned long second;
 
-		second = src[1];
+		ldq_u(second, src+1);
 		extql(first, soff, word);
 		len -= 8;
-		extqh(second, soff, first);
 		src++;
-		word |= first;
+		extqh(second, soff, first);
 		checksum += carry;
+		word |= first;
 		first = second;
 		checksum += word;
 		*dst = word;
-		carry = checksum < word;
 		dst++;
+		carry = checksum < word;
 	}
 	len += 8;
 	checksum += carry;
 	if (len) {
 		unsigned long tmp;
 		unsigned long second;
-		second = src[1];
+		ldq_u(second, src+1);
 		tmp = *dst;
 		extql(first, soff, word);
 		extqh(second, soff, first);
@@ -121,24 +119,22 @@
 static inline unsigned long csum_partial_copy_src_aligned(
 	unsigned long *src, unsigned long *dst,
 	unsigned long doff,
-	long len, unsigned long checksum)
+	long len, unsigned long checksum,
+	unsigned long word,
+	unsigned long partial_dest)
 {
-	unsigned long word, carry = 0;
-	unsigned long partial_dest;
+	unsigned long carry = 0;
 
-	partial_dest = *dst;
-	len -= 8;
 	mskql(partial_dest, doff, partial_dest);
-	word = *src;
 	while (len >= 0) {
 		unsigned long second_dest;
 
 		len -= 8;
+		insql(word, doff, second_dest);
 		checksum += carry;
+		stq_u(partial_dest | second_dest, dst);
 		src++;
 		checksum += word;
-		insql(word, doff, second_dest);
-		*dst = partial_dest | second_dest;
 		insqh(word, doff, partial_dest);
 		carry = checksum < word;
 		word = *src;
@@ -150,25 +146,27 @@
 		unsigned long second_dest;
 
 		mskql(word, len-doff, word);
-		len -= 8;
 		src++;
 		checksum += word;
 		insql(word, doff, second_dest);
-		*dst = partial_dest | second_dest;
-		insqh(word, doff, partial_dest);
+		stq_u(partial_dest | second_dest, dst);
 		carry = checksum < word;
-		word = *src;
-		dst++;
+		if (len) {
+			ldq_u(second_dest, dst+1);
+			insqh(word, doff, partial_dest);
+			mskqh(second_dest, len, second_dest);
+			stq_u(partial_dest | second_dest, dst+1);
+		}
 		checksum += carry;
 	} else if (len & 7) {
 		unsigned long second_dest;
-		second_dest = *dst;
+		ldq_u(second_dest, dst);
 		mskql(word, len-doff, word);
 		checksum += word;
 		mskqh(second_dest, len, second_dest);
 		carry = checksum < word;
 		insql(word, doff, word);
-		*dst = partial_dest | word | second_dest;
+		stq_u(partial_dest | word | second_dest, dst);
 		checksum += carry;
 	}
 	return checksum;
@@ -181,30 +179,27 @@
 static inline unsigned long csum_partial_copy_unaligned(
 	unsigned long * src, unsigned long * dst,
 	unsigned long soff, unsigned long doff,
-	long len, unsigned long checksum)
+	long len, unsigned long checksum,
+	unsigned long first, unsigned long partial_dest)
 {
-	unsigned long first, carry = 0;
-	unsigned long partial_dest;
+	unsigned long carry = 0;
 
-	partial_dest = dst[0];
-	len -= 8;
-	first = src[0];
 	mskql(partial_dest, doff, partial_dest);
 	while (len >= 0) {
 		unsigned long second, word;
 		unsigned long second_dest;
 
-		second = src[1];
+		ldq_u(second, src+1);
 		extql(first, soff, word);
-		len -= 8;
 		checksum += carry;
-		src++;
+		len -= 8;
 		extqh(second, soff, first);
+		src++;
 		word |= first;
 		first = second;
-		checksum += word;
 		insql(word, doff, second_dest);
-		*dst = partial_dest | second_dest;
+		checksum += word;
+		stq_u(partial_dest | second_dest, dst);
 		carry = checksum < word;
 		insqh(word, doff, partial_dest);
 		dst++;
@@ -214,35 +209,40 @@
 	if (len >= 0) {
 		unsigned long second, word;
 		unsigned long second_dest;
-
-		second = src[1];
+		
+		ldq_u(second, src+1);
 		extql(first, soff, word);
-		len -= 8;
-		src++;
 		extqh(second, soff, first);
 		word |= first;
+		src++;
 		first = second;
 		mskql(word, len-doff, word);
 		checksum += word;
 		insql(word, doff, second_dest);
-		*dst = partial_dest | second_dest;
 		carry = checksum < word;
-		insqh(word, doff, partial_dest);
-		dst++;
+		stq_u(partial_dest | second_dest, dst);
+		if (len) {
+			ldq_u(second_dest, dst+1);
+			insqh(word, doff, partial_dest);
+			mskqh(second_dest, len, second_dest);
+			stq_u(partial_dest | second_dest, dst+1);
+		}
+		checksum += carry;			
 	} else if (len & 7) {
 		unsigned long second, word;
 		unsigned long second_dest;
-		second = src[1];
+
+		ldq_u(second, src+1);
 		extql(first, soff, word);
 		extqh(second, soff, first);
 		word |= first;
-		second_dest = *dst;
+		ldq_u(second_dest, dst);
 		mskql(word, len-doff, word);
 		checksum += word;
 		mskqh(second_dest, len, second_dest);
 		carry = checksum < word;
 		insql(word, doff, word);
-		*dst = partial_dest | word | second_dest;
+		stq_u(partial_dest | word | second_dest, dst);
 		checksum += carry;
 	}
 	return checksum;
@@ -254,31 +254,35 @@
 	unsigned long soff = 7 & (unsigned long) src;
 	unsigned long doff = 7 & (unsigned long) dst;
 
-	src = (char *) (~7UL & (unsigned long) src);
-	dst = (char *) (~7UL & (unsigned long) dst);
 	if (len) {
-		if (!soff) {
-			if (!doff)
+		unsigned long first;
+		ldq_u(first, src);
+		if (!doff) {
+			if (!soff)
 				checksum = csum_partial_copy_aligned(
 					(unsigned long *) src,
 					(unsigned long *) dst,
-					len, checksum);
+					len-8, checksum, first);
 			else
-				checksum = csum_partial_copy_src_aligned(
+				checksum = csum_partial_copy_dest_aligned(
 					(unsigned long *) src,
 					(unsigned long *) dst,
-					doff, len, checksum);
+					soff, len-8, checksum, first);
 		} else {
-			if (!doff)
-				checksum = csum_partial_copy_dest_aligned(
+			unsigned long partial_dest;
+			ldq_u(partial_dest, dst);
+			if (!soff)
+				checksum = csum_partial_copy_src_aligned(
 					(unsigned long *) src,
 					(unsigned long *) dst,
-					soff, len, checksum);
+					doff, len-8, checksum,
+					first, partial_dest);
 			else
 				checksum = csum_partial_copy_unaligned(
 					(unsigned long *) src,
 					(unsigned long *) dst,
-					soff, doff, len, checksum);
+					soff, doff, len-8, checksum,
+					first, partial_dest);
 		}
 		/* 64 -> 33 bits */
 		checksum = (checksum & 0xffffffff) + (checksum >> 32);
diff -u --recursive --new-file v2.0.6/linux/arch/i386/boot/compressed/misc.c linux/arch/i386/boot/compressed/misc.c
--- v2.0.6/linux/arch/i386/boot/compressed/misc.c	Sat Mar  9 13:31:43 1996
+++ linux/arch/i386/boot/compressed/misc.c	Mon Jul 15 13:47:39 1996
@@ -350,7 +350,7 @@
 void setup_output_buffer_if_we_run_high(struct moveparams *mv)
 {
 	high_buffer_start = (uch *)(((ulg)&end) + HEAP_SIZE);
-	if (EXT_MEM_K < (4*1024)) error("Less than 4MB of memory.\n");
+	if (EXT_MEM_K < (3*1024)) error("Less than 4MB of memory.\n");
 	mv->low_buffer_start = output_data = (char *)LOW_BUFFER_START;
 	high_loaded = 1;
 	free_mem_end_ptr = (long)high_buffer_start;
diff -u --recursive --new-file v2.0.6/linux/arch/m68k/atari/atafb.c linux/arch/m68k/atari/atafb.c
--- v2.0.6/linux/arch/m68k/atari/atafb.c	Tue May 21 19:52:31 1996
+++ linux/arch/m68k/atari/atafb.c	Mon Jul 15 09:55:11 1996
@@ -109,7 +109,7 @@
 			short xoffset;
 			short hht, hbb, hbe, hdb, hde, hss;
 			short vft, vbb, vbe, vdb, vde, vss;
-			/* auxiliary informations */
+			/* auxiliary information */
 			short mono;
 			short ste_mode;
 			short bpp;
diff -u --recursive --new-file v2.0.6/linux/arch/mips/kernel/Makefile linux/arch/mips/kernel/Makefile
--- v2.0.6/linux/arch/mips/kernel/Makefile	Wed Dec 13 12:39:43 1995
+++ linux/arch/mips/kernel/Makefile	Mon Jul 15 09:55:11 1996
@@ -63,11 +63,11 @@
 endif
 
 ifdef CONFIG_CPU_R6000
-	exit 1			# no detailed informations about CPU yet.
+	exit 1			# no detailed information about CPU yet.
 endif
 
 ifdef CONFIG_CPU_R8000
-	exit 1			# no detailed informations about CPU yet.
+	exit 1			# no detailed information about CPU yet.
 endif
 
 ifdef CONFIG_CPU_R10000
diff -u --recursive --new-file v2.0.6/linux/drivers/block/loop.c linux/drivers/block/loop.c
--- v2.0.6/linux/drivers/block/loop.c	Wed Jul  3 22:05:07 1996
+++ linux/drivers/block/loop.c	Mon Jul 15 13:47:39 1996
@@ -48,6 +48,7 @@
 #define MAX_LOOP 8
 static struct loop_device loop_dev[MAX_LOOP];
 static int loop_sizes[MAX_LOOP];
+static int loop_blksizes[MAX_LOOP];
 
 /*
  * Transfer functions
@@ -170,6 +171,7 @@
 		else
 			size = MAX_DISK_SIZE;
 	}
+
 	loop_sizes[lo->lo_number] = size;
 }
 
@@ -202,7 +204,7 @@
 		offset = 0;
 	} else {
 		block = CURRENT->sector / (blksize >> 9);
-		offset = CURRENT->sector % (blksize >> 9);
+		offset = (CURRENT->sector % (blksize >> 9)) << 9;
 	}
 	block += lo->lo_offset / blksize;
 	offset += lo->lo_offset % blksize;
@@ -211,6 +213,7 @@
 		offset -= blksize;
 	}
 	len = CURRENT->current_nr_sectors << 9;
+
 	if (CURRENT->cmd == WRITE) {
 		if (lo->lo_flags & LO_FLAGS_READ_ONLY)
 			goto error_out;
@@ -552,7 +555,9 @@
 		loop_dev[i].lo_number = i;
 	}
 	memset(&loop_sizes, 0, sizeof(loop_sizes));
+	memset(&loop_blksizes, 0, sizeof(loop_blksizes));
 	blk_size[MAJOR_NR] = loop_sizes;
+	blksize_size[MAJOR_NR] = loop_blksizes;
 
 	return 0;
 }
diff -u --recursive --new-file v2.0.6/linux/drivers/cdrom/sbpcd.c linux/drivers/cdrom/sbpcd.c
--- v2.0.6/linux/drivers/cdrom/sbpcd.c	Sat Jul  6 14:51:23 1996
+++ linux/drivers/cdrom/sbpcd.c	Mon Jul 15 09:55:10 1996
@@ -4446,6 +4446,7 @@
 /*==========================================================================*/
 /*
  *  special end_request for sbpcd to solve CURRENT==NULL bug. (GTL)
+ *  GTL = Gonzalo Tornaria <tornaria@cmat.edu.uy>
  *
  *  This is a kluge so we don't need to modify end_request
  *  We put the req we take out after INIT_REQUEST in the requests list,
diff -u --recursive --new-file v2.0.6/linux/drivers/char/cp437.uni linux/drivers/char/cp437.uni
--- v2.0.6/linux/drivers/char/cp437.uni	Tue Jun 13 10:47:47 1995
+++ linux/drivers/char/cp437.uni	Mon Jul 15 09:57:04 1996
@@ -28,8 +28,8 @@
 0x0d	U+266a
 0x0e	U+266b
 0x0f	U+263c
-0x10	U+25ba
-0x11	U+25c4
+0x10	U+25b6 U+25ba
+0x11	U+25c0 U+25c4
 0x12	U+2195
 0x13	U+203c
 0x14	U+00b6
diff -u --recursive --new-file v2.0.6/linux/drivers/scsi/ChangeLog.ncr53c8xx linux/drivers/scsi/ChangeLog.ncr53c8xx
--- v2.0.6/linux/drivers/scsi/ChangeLog.ncr53c8xx	Sat Jul  6 14:51:24 1996
+++ linux/drivers/scsi/ChangeLog.ncr53c8xx	Mon Jul 15 09:55:20 1996
@@ -1,4 +1,21 @@
-Mon Jul 03  23:00 1996 Gerard Roudier (groudier@club-internet.fr)
+Sun Jul 14  15:00 1996 Gerard Roudier (groudier@club-internet.fr)
+	* ncr53c8xx.c, Configure.help
+	Memory mapped io donnot work under linux/Alpha for the driver.
+	For the moment it is better to not support this feature for this 
+	architecture.
+
+Tue Jul 09  20:00 1996 Gerard Roudier (groudier@club-internet.fr)
+	* ncr53c8xx.c
+	Garbage printed out with the following command (fixed):
+	- cat <some proc scsi device> /proc/scsi/ncr53c8xx/0
+
+Sun Jul 07  20:00 1996 Gerard Roudier (groudier@club-internet.fr)
+	* ncr53c8xx.c
+	Tagged command queueing cannot be disabled at run time.
+	I probably never try that because I felt the risk.
+	Shortest patch sent to Linus. I have to plan something better.
+
+Wed Jul 03  23:00 1996 Gerard Roudier (groudier@club-internet.fr)
 	Release 1.12a
 	Tested linux releases: 1.2.13, 2.0.0, 2.0.1
 
@@ -271,7 +288,7 @@
 	I receive a mail from Jason Duerstock.
 	A new bug in ncrBsd2Linux which is probably outside the driver code
 	and inside Linux kernel code.
-	The kernel memory is quite corrupted and we cannot get any informations
+	The kernel memory is quite corrupted and we cannot get any information
 	by looking into the messages about the crash. However Linus see a bug in
 	ncrBsd2Linux because it is a "non standard" driver.
 	I think too that ncrBsd2Linux is not a standard driver of Linux kernel,
diff -u --recursive --new-file v2.0.6/linux/drivers/scsi/ncr53c8xx.c linux/drivers/scsi/ncr53c8xx.c
--- v2.0.6/linux/drivers/scsi/ncr53c8xx.c	Mon Jul 15 11:20:23 1996
+++ linux/drivers/scsi/ncr53c8xx.c	Mon Jul 15 09:55:20 1996
@@ -243,7 +243,7 @@
 
 #define NCR_SNOOP_TIMEOUT (1000000)
 
-#ifdef SCSI_NCR_IOMAPPED
+#if defined(SCSI_NCR_IOMAPPED) || defined(__alpha__)
 #define NCR_IOMAPPED
 #endif
 
@@ -6546,9 +6546,14 @@
 		np->script->start1[0] =  SCR_INT;
 
 		/*
+		**	For the moment tagged transfers cannot be disabled.
+		*/
+#if 0
+		/*
 		**	Try to disable tagged transfers.
 		*/
 		ncr_setmaxtags (np, &np->target[target], 0);
+#endif
 
 		/*
 		** @QUEUE@
diff -u --recursive --new-file v2.0.6/linux/drivers/sound/Readme.aedsp16 linux/drivers/sound/Readme.aedsp16
--- v2.0.6/linux/drivers/sound/Readme.aedsp16	Sun Mar 24 22:49:46 1996
+++ linux/drivers/sound/Readme.aedsp16	Mon Jul 15 09:55:11 1996
@@ -1,6 +1,6 @@
-Informations about Audio Excel DSP 16 can be found in the source
+Information about Audio Excel DSP 16 can be found in the source
 file aedsp16.c
 Please, read the head of the source before using it. It contain useful
-informations.
+information.
 
     Riccardo
diff -u --recursive --new-file v2.0.6/linux/drivers/sound/aedsp16.c linux/drivers/sound/aedsp16.c
--- v2.0.6/linux/drivers/sound/aedsp16.c	Sat Jul  6 14:51:25 1996
+++ linux/drivers/sound/aedsp16.c	Mon Jul 15 09:55:11 1996
@@ -349,7 +349,7 @@
 };
 
 /*
- * Buffers to store audio card informations
+ * Buffers to store audio card information
  */
 static char     AudioExcelName[CARDNAMELEN + 1];
 static char     AudioExcelVersion[CARDVERLEN + 1];
diff -u --recursive --new-file v2.0.6/linux/include/asm-alpha/cia.h linux/include/asm-alpha/cia.h
--- v2.0.6/linux/include/asm-alpha/cia.h	Wed Jun  5 10:41:29 1996
+++ linux/include/asm-alpha/cia.h	Mon Jul 15 11:34:11 1996
@@ -1,6 +1,7 @@
 #ifndef __ALPHA_CIA__H__
 #define __ALPHA_CIA__H__
 
+#include <linux/config.h>
 #include <linux/types.h>
 
 /*
@@ -169,6 +170,14 @@
 #define GRU_SCR				(IDENT_ADDR + 0x8780000300UL)
 #define GRU_LED				(IDENT_ADDR + 0x8780000800UL)
 #define GRU_RESET			(IDENT_ADDR + 0x8780000900UL)
+
+#if defined(CONFIG_ALPHA_ALCOR)
+#define GRU_INT_REQ_BITS		0x800fffffUL
+#elif defined(CONFIG_ALPHA_XLT)
+#define GRU_INT_REQ_BITS		0x80003fffUL
+#else
+#define GRU_INT_REQ_BITS		0xffffffffUL
+#endif
 
 /*
  * Bit definitions for I/O Controller status register 0:
diff -u --recursive --new-file v2.0.6/linux/include/asm-alpha/irq.h linux/include/asm-alpha/irq.h
--- v2.0.6/linux/include/asm-alpha/irq.h	Wed Jun  5 10:41:29 1996
+++ linux/include/asm-alpha/irq.h	Mon Jul 15 09:47:42 1996
@@ -14,7 +14,7 @@
 # define NR_IRQS	33
 #elif defined(CONFIG_ALPHA_EB66) || defined(CONFIG_ALPHA_EB64P) || defined(CONFIG_ALPHA_MIKASA)
 # define NR_IRQS	32
-#elif defined(CONFIG_ALPHA_ALCOR)
+#elif defined(CONFIG_ALPHA_ALCOR) || defined(CONFIG_ALPHA_XLT)
 # define NR_IRQS	48
 #else
 # define NR_IRQS	16
diff -u --recursive --new-file v2.0.6/linux/include/linux/pci.h linux/include/linux/pci.h
--- v2.0.6/linux/include/linux/pci.h	Mon Jul 15 11:20:24 1996
+++ linux/include/linux/pci.h	Mon Jul 15 09:55:11 1996
@@ -22,7 +22,7 @@
 
 
 /*	PROCEDURE TO REPORT NEW PCI DEVICES
- * We are trying to collect informations on new PCI devices, using
+ * We are trying to collect information on new PCI devices, using
  * the standard PCI identification procedure. If some warning is
  * displayed at boot time, please report 
  *	- /proc/pci
diff -u --recursive --new-file v2.0.6/linux/kernel/sys.c linux/kernel/sys.c
--- v2.0.6/linux/kernel/sys.c	Wed Jul  3 22:05:23 1996
+++ linux/kernel/sys.c	Mon Jul 15 08:13:53 1996
@@ -636,8 +636,11 @@
 {
 	struct task_struct * p;
 
+	if (current->leader)
+		return -EPERM;
+
 	for_each_task(p) {
-		if (p->pgrp == current->pid)
+		if (p != current && p->pgrp == current->pid)
 		        return -EPERM;
 	}
 
diff -u --recursive --new-file v2.0.6/linux/net/socket.c linux/net/socket.c
--- v2.0.6/linux/net/socket.c	Sat Jul  6 12:07:14 1996
+++ linux/net/socket.c	Mon Jul 15 11:31:51 1996
@@ -944,17 +944,22 @@
 	err=verify_area(VERIFY_READ,buff,len);
 	if(err)
 	  	return err;
-  	
-	if((err=move_addr_to_kernel(addr,addr_len,address))<0)
-	  	return err;
-	  	
+
 	iov.iov_base=buff;
 	iov.iov_len=len;
-	msg.msg_name=address;
-	msg.msg_namelen=addr_len;
+	msg.msg_name = NULL;
+	msg.msg_namelen = 0;
 	msg.msg_iov=&iov;
 	msg.msg_iovlen=1;
 	msg.msg_control=NULL;
+	if (addr && addr_len) {
+		err=move_addr_to_kernel(addr,addr_len,address);
+		if (err < 0)
+			return err;
+		msg.msg_name=address;
+		msg.msg_namelen=addr_len;
+	}
+	  	
 	return(sock->ops->sendmsg(sock, &msg, len, (file->f_flags & O_NONBLOCK),
 		flags));
 }
