## Automatically generated incremental diff
## From:   linux-2.0.31-pre7
## To:     linux-2.0.31-pre8
## Robot:  $Id: make-incremental-diff,v 1.11 2002/02/20 02:59:33 hpa Exp $

diff -urN linux-2.0.31-pre7/Documentation/Changes linux-2.0.31-pre8/Documentation/Changes
--- linux-2.0.31-pre7/Documentation/Changes	2003-08-15 15:04:06.000000000 -0700
+++ linux-2.0.31-pre8/Documentation/Changes	2003-08-15 15:04:07.000000000 -0700
@@ -142,7 +142,7 @@
 rlogin.  Libc-5.3.12 fixes this, so if you're going to run an
 experimental libc, be sure to upgrade to 5.3.12.  Libc-5.4.33 is
 currently available as well, but it may have problems, so caveat
-emptor.  It fixes lots of problems, but make break even more programs
+emptor.  It fixes lots of problems, but may break even more programs
 than 5.3.12.
 
    If you're getting an error message that is something to the effect of
diff -urN linux-2.0.31-pre7/Documentation/memory-tuning.txt linux-2.0.31-pre8/Documentation/memory-tuning.txt
--- linux-2.0.31-pre7/Documentation/memory-tuning.txt	2003-08-15 15:04:06.000000000 -0700
+++ linux-2.0.31-pre8/Documentation/memory-tuning.txt	2003-08-15 15:04:07.000000000 -0700
@@ -12,7 +12,7 @@
 
 You can adjust these with a command such as:
 
-# echo 128 256 512 > /proc/sys/vm/freepages
+# echo "128 256 512" > /proc/sys/vm/freepages
 
 Free memory never goes down below min_free_pages except for atomic
 allocation.  Background swapping is started if the number of free
@@ -38,7 +38,7 @@
 
 I've found that
 
-# echo 128 256 1024 > /proc/sys/vm/freepages
+# echo "128 256 1024" > /proc/sys/vm/freepages
 
 gives good performance for a 32 Meg system used as a small server and
 personal workstation.
diff -urN linux-2.0.31-pre7/drivers/char/pcwd.c linux-2.0.31-pre8/drivers/char/pcwd.c
--- linux-2.0.31-pre7/drivers/char/pcwd.c	1996-08-29 09:15:14.000000000 -0700
+++ linux-2.0.31-pre8/drivers/char/pcwd.c	2003-08-15 15:04:07.000000000 -0700
@@ -15,6 +15,9 @@
  *		check_region command due to Alan's suggestion.
  * 960821	Made changes to compile in newer 2.0.x kernels.  Added
  *		"cold reboot sense" entry.
+ * 970819	Fixed use of is_open flag so pcwd_write does not always return
+ *		-EIO; this prevented tickling. Enabled board on open and
+ *		disabled on close.
  */
 
 #include <linux/module.h>
@@ -46,7 +49,11 @@
 #define WD_TIMERRESET_PORT2     0x370	/* Reset port - second choice */
 #define WD_CTLSTAT_PORT1        0x271	/* Control port - first choice */
 #define WD_CTLSTAT_PORT2        0x371	/* Control port - second choice */
-#define	WD_PORT_EXTENT		2	/* Takes up two addresses */
+#define WD_CTLSTAT2_PORT1       0x272   /* Control port#2 - first choice */
+#define WD_CTLSTAT2_PORT2       0x372   /* Control port#2 - second choice */
+#define WD_DISABLE_PORT1        0x273   /* Disable port - first choice  */
+#define WD_DISABLE_PORT2        0x373   /* Disable port - second choice  */
+#define	WD_PORT_EXTENT		4	/* Takes up four addresses */
 
 #define WD_WDRST                0x01	/* Previously reset state */
 #define WD_T110                 0x02	/* Temperature overheat sense */
@@ -54,7 +61,9 @@
 #define WD_RLY2                 0x08	/* External relay triggered */
 #define WD_SRLY2                0x80	/* Software external relay triggered */
 
+
 static int current_ctlport, current_readport;
+static int current_ctlport2, current_disport;
 static int is_open, is_eof;
 
 int pcwd_checkcard(void)
@@ -193,7 +202,7 @@
 
 	outb_p(wdrst_stat, current_ctlport);
 
-	return(1);
+	return(len);
 }
 
 static int pcwd_ioctl(struct inode *inode, struct file *file,
@@ -235,10 +244,22 @@
 static int pcwd_open(struct inode *ino, struct file *filep)
 {
 #ifdef	DEBUG
-	printk("pcwd: open request\n");
+	int before, after;
+
+	before = inb_p (current_ctlport2);
+#endif
+	if (is_open)
+		return -EIO;
+
+	/*  Enable the port  */
+	outb_p (0, current_disport);
+#ifdef	DEBUG
+	after = inb_p (current_ctlport2);
+	printk ("pcwd: open: control status #2 (b,a): %x, %x\n", before,after);
 #endif
 
 	MOD_INC_USE_COUNT;
+	is_open = 1;
 	is_eof = 0;
 	return(0);
 }
@@ -249,6 +270,10 @@
 	printk("pcwd: close request\n");
 #endif
 
+	is_open = 0;
+	/*  Disable the board  */
+	outb_p (0xa5, current_disport);
+	outb_p (0xa5, current_disport);
 	MOD_DEC_USE_COUNT;
 }
 
@@ -290,6 +315,8 @@
 
 	current_ctlport = WD_TIMERRESET_PORT1;
 	current_readport = WD_CTLSTAT_PORT1;
+	current_ctlport2 = WD_CTLSTAT2_PORT1;
+	current_disport = WD_DISABLE_PORT1;
 
 	if (!pcwd_checkcard()) {
 #ifdef	DEBUG
@@ -298,6 +325,8 @@
 
 		current_ctlport = WD_TIMERRESET_PORT2;
 		current_readport = WD_CTLSTAT_PORT2;
+		current_ctlport2 = WD_CTLSTAT2_PORT2;
+		current_disport = WD_DISABLE_PORT2;
 
 		if (!pcwd_checkcard()) {
 			printk("pcwd: No card detected, or wrong port assigned.\n");
@@ -327,8 +356,11 @@
 #ifdef	MODULE
 void cleanup_module(void)
 {
+	/*  Disable the board  */
+	outb_p (0xa5, current_disport);
+	outb_p (0xa5, current_disport);
 	misc_deregister(&pcwd_miscdev);
-	release_region(current_ctlport, 2);
+	release_region(current_ctlport, WD_PORT_EXTENT);
 #ifdef	DEBUG
 	printk("pcwd: Cleanup successful.\n");
 #endif
diff -urN linux-2.0.31-pre7/drivers/isdn/avmb1/b1capi.c linux-2.0.31-pre8/drivers/isdn/avmb1/b1capi.c
--- linux-2.0.31-pre7/drivers/isdn/avmb1/b1capi.c	2003-08-15 15:04:06.000000000 -0700
+++ linux-2.0.31-pre8/drivers/isdn/avmb1/b1capi.c	2003-08-15 15:04:07.000000000 -0700
@@ -1,11 +1,15 @@
 /*
- * $Id: b1capi.c,v 1.4 1997/05/27 15:17:45 fritz Exp $
+ * $Id: b1capi.c,v 1.4.2.1 1997/07/12 08:18:59 calle Exp $
  * 
  * CAPI 2.0 Module for AVM B1-card.
  * 
  * (c) Copyright 1997 by Carsten Paeth (calle@calle.in-berlin.de)
  * 
  * $Log: b1capi.c,v $
+ * Revision 1.4.2.1  1997/07/12 08:18:59  calle
+ * Correct bug in CARD_NR macro, so now more than one card will work.
+ * Allow card reset, even if card is in running state.
+ *
  * Revision 1.4  1997/05/27 15:17:45  fritz
  * Added changes for recent 2.1.x kernels:
  *   changed return type of isdn_close
@@ -48,7 +52,7 @@
 #include "capicmd.h"
 #include "capiutil.h"
 
-static char *revision = "$Revision: 1.4 $";
+static char *revision = "$Revision: 1.4.2.1 $";
 
 /* ------------------------------------------------------------- */
 
@@ -109,7 +113,7 @@
 
 #define VALID_CARD(c)	   ((c) > 0 && (c) <= ncards)
 #define CARD(c)		   (&cards[(c)-1])
-#define CARDNR(cp)	   ((cards-(cp))+1)
+#define CARDNR(cp)	   (((cp)-cards)+1)
 
 static avmb1_appl applications[CAPI_MAXAPPL];
 static avmb1_card cards[CAPI_MAXCONTR];
@@ -285,6 +289,8 @@
 	return 0;
 }
 
+
+
 /* -------- Receiver ------------------------------------------ */
 
 
@@ -365,6 +371,7 @@
 {
 	struct capi_interface_user *p;
 
+        printk(KERN_NOTICE "b1capi: notify up contr %d\n", contr);
 	for (p = capi_users; p; p = p->next) {
 		if (p->callback)
 			(*p->callback) (KCI_CONTRUP, contr,
@@ -376,6 +383,7 @@
 static void notify_down(__u16 contr)
 {
 	struct capi_interface_user *p;
+        printk(KERN_NOTICE "b1capi: notify down contr %d\n", contr);
 	for (p = capi_users; p; p = p->next) {
 		if (p->callback)
 			(*p->callback) (KCI_CONTRDOWN, contr, 0);
@@ -422,6 +430,32 @@
 
         set_bit(CARDNR(card), &notify_up_set);
         queue_task(&tq_state_notify, &tq_scheduler);
+        printk(KERN_NOTICE "b1capi: card %d ready.\n", CARDNR(card));
+}
+
+static void avmb1_card_down(avmb1_card * card)
+{
+	__u16 appl;
+
+        card->cardstate = CARD_DETECTED;
+
+	for (appl = 1; appl <= CAPI_MAXAPPL; appl++) {
+		avmb1_ncci **pp, **nextpp;
+		for (pp = &APPL(appl)->nccilist; *pp; pp = nextpp) {
+			if (NCCI2CTRL((*pp)->ncci) == card->cnr) {
+				avmb1_ncci *np = *pp;
+				*pp = np->next;
+				printk(KERN_INFO "b1capi: appl %d ncci 0x%x forced down!\n", appl, np->ncci);
+				kfree(np);
+				nextpp = pp;
+			} else {
+				nextpp = &(*pp)->next;
+			}
+		}
+	}
+	set_bit(CARDNR(card), &notify_down_set);
+	queue_task(&tq_state_notify, &tq_scheduler);
+	printk(KERN_NOTICE "b1capi: card %d down.\n", CARDNR(card));
 }
 
 /* ------------------------------------------------------------- */
@@ -537,8 +571,9 @@
 	while ((skb = skb_dequeue(&APPL(applid)->recv_queue)) != 0)
 		kfree_skb(skb, FREE_READ);
 	for (i = 0; i < ncards; i++) {
-		if (cards[i].cardstate != CARD_RUNNING)
+		if (cards[i].cardstate != CARD_RUNNING) {
 			continue;
+		}
 		APPL(applid)->releasing++;
 		B1_send_release(cards[i].port, applid);
 	}
@@ -775,12 +810,13 @@
 		card = CARD(rdef.contr);
 
 		if (card->cardstate == CARD_RUNNING)
-			return -EBUSY;
+			avmb1_card_down(card);
+
+		card->cardstate = CARD_DETECTED;
 
 		B1_reset(card->port);
 		B1_reset(card->port);
 
-		card->cardstate = CARD_DETECTED;
 		return 0;
 	}
 	return -EINVAL;
diff -urN linux-2.0.31-pre7/drivers/isdn/avmb1/b1lli.c linux-2.0.31-pre8/drivers/isdn/avmb1/b1lli.c
--- linux-2.0.31-pre7/drivers/isdn/avmb1/b1lli.c	2003-08-15 15:04:06.000000000 -0700
+++ linux-2.0.31-pre8/drivers/isdn/avmb1/b1lli.c	2003-08-15 15:04:07.000000000 -0700
@@ -1,11 +1,14 @@
 /*
- * $Id: b1lli.c,v 1.1 1997/03/04 21:50:28 calle Exp $
+ * $Id: b1lli.c,v 1.1.2.1 1997/07/13 12:16:46 calle Exp $
  * 
  * ISDN lowlevel-module for AVM B1-card.
  * 
  * (c) Copyright 1997 by Carsten Paeth (calle@calle.in-berlin.de)
  * 
  * $Log: b1lli.c,v $
+ * Revision 1.1.2.1  1997/07/13 12:16:46  calle
+ * bug fix for more than one controller in connect_req.
+ *
  * Revision 1.1  1997/03/04 21:50:28  calle
  * Frirst version in isdn4linux
  *
@@ -428,7 +431,9 @@
 				       CAPIMSG_APPID(skb->data),
 				       capi_cmd2str(cmd, subcmd), len);
 			} else {
-				printk(KERN_DEBUG "b1lli: Put %s\n", capi_message2str(skb->data));
+				printk(KERN_DEBUG "b1lli: Put [0x%lx] %s\n",
+						(unsigned long) contr,
+						capi_message2str(skb->data));
 			}
 
 		}
@@ -447,7 +452,7 @@
 				       CAPIMSG_APPID(skb->data),
 				       capi_cmd2str(cmd, subcmd), len);
 			} else {
-				printk(KERN_DEBUG "b1lli: Put %s\n", capi_message2str(skb->data));
+				printk(KERN_DEBUG "b1lli: Put [0x%lx] %s\n", (unsigned long)contr, capi_message2str(skb->data));
 			}
 		}
 		save_flags(flags);
@@ -499,7 +504,7 @@
 				       capi_cmd2str(cmd, subcmd),
 				       MsgLen, DataB3Len);
 			} else {
-				printk(KERN_DEBUG "b1lli: Got %s\n", capi_message2str(card->msgbuf));
+				printk(KERN_DEBUG "b1lli: Got [0x%lx] %s\n", (unsigned long)contr, capi_message2str(card->msgbuf));
 			}
 		}
 		if (!(skb = dev_alloc_skb(DataB3Len + MsgLen))) {
@@ -528,7 +533,9 @@
 				       capi_cmd2str(cmd, subcmd),
 				       MsgLen);
 			} else {
-				printk(KERN_DEBUG "b1lli: Got %s\n", capi_message2str(card->msgbuf));
+				printk(KERN_DEBUG "b1lli: Got [0x%lx] %s\n",
+						(unsigned long) contr,
+						capi_message2str(card->msgbuf));
 			}
 
 		}
diff -urN linux-2.0.31-pre7/drivers/isdn/avmb1/capidrv.c linux-2.0.31-pre8/drivers/isdn/avmb1/capidrv.c
--- linux-2.0.31-pre7/drivers/isdn/avmb1/capidrv.c	2003-08-15 15:04:06.000000000 -0700
+++ linux-2.0.31-pre8/drivers/isdn/avmb1/capidrv.c	2003-08-15 15:04:07.000000000 -0700
@@ -1,11 +1,14 @@
 /*
- * $Id: capidrv.c,v 1.3 1997/05/18 09:24:15 calle Exp $
+ * $Id: capidrv.c,v 1.3.2.1 1997/07/13 12:16:48 calle Exp $
  *
  * ISDN4Linux Driver, using capi20 interface (kernelcapi)
  *
  * Copyright 1997 by Carsten Paeth (calle@calle.in-berlin.de)
  *
  * $Log: capidrv.c,v $
+ * Revision 1.3.2.1  1997/07/13 12:16:48  calle
+ * bug fix for more than one controller in connect_req.
+ *
  * Revision 1.3  1997/05/18 09:24:15  calle
  * added verbose disconnect reason reporting to avmb1.
  * some fixes in capi20 interface.
@@ -48,7 +51,7 @@
 #include "capicmd.h"
 #include "capidrv.h"
 
-static char *revision = "$Revision: 1.3 $";
+static char *revision = "$Revision: 1.3.2.1 $";
 int debugmode = 0;
 
 #ifdef HAS_NEW_SYMTAB
@@ -1270,7 +1273,7 @@
 			capi_fill_CONNECT_REQ(&cmdcmsg,
 					      global.appid,
 					      card->msgid++,
-					      1,	/* adr */
+					      card->contrnr,	/* adr */
 					  si2cip(bchan->si1, bchan->si2),	/* cipvalue */
 					      called,	/* CalledPartyNumber */
 					      calling,	/* CallingPartyNumber */
diff -urN linux-2.0.31-pre7/drivers/pci/pci.c linux-2.0.31-pre8/drivers/pci/pci.c
--- linux-2.0.31-pre7/drivers/pci/pci.c	2003-08-15 15:04:06.000000000 -0700
+++ linux-2.0.31-pre8/drivers/pci/pci.c	2003-08-15 15:04:07.000000000 -0700
@@ -42,6 +42,9 @@
  */
 struct pci_dev_info dev_info[] = {
 	DEVICE( COMPAQ,		COMPAQ_1280,	"QVision 1280/p"),
+	DEVICE( COMPAQ,		COMPAQ_NETELL100,"Netelligent 10/100"),
+	DEVICE( COMPAQ,		COMPAQ_NETELL10,"Netelligent 10"),
+	DEVICE( COMPAQ,		COMPAQ_NETFLEX3,"NetFlex 3"),
 	DEVICE( COMPAQ,		COMPAQ_THUNDER,	"ThunderLAN"),
 	DEVICE( NCR,		NCR_53C810,	"53c810"),
 	DEVICE( NCR,		NCR_53C820,	"53c820"),
@@ -57,10 +60,12 @@
 	DEVICE( ATI,		ATI_210888CX,   "210888CX"),
 	DEVICE( ATI,		ATI_215GT,	"Mach64 GT (Rage II)"),
 	DEVICE( ATI,		ATI_210888GX,   "210888GX"),
+	DEVICE( ATI,		ATI_264VT,	"Mach64 VT"),
 	DEVICE( VLSI,		VLSI_82C592,	"82C592-FC1"),
 	DEVICE( VLSI,		VLSI_82C593,	"82C593-FC1"),
 	DEVICE( VLSI,		VLSI_82C594,	"82C594-AFC2"),
 	DEVICE( VLSI,		VLSI_82C597,	"82C597-AFC2"),
+	DEVICE( VLSI,		VLSI_VAS96011,	"VAS96011 PowerPC"),
 	DEVICE( ADL,		ADL_2301,	"2301"),
 	DEVICE( NS,		NS_87410,	"87410"),
 	DEVICE( TSENG,		TSENG_W32P_2,	"ET4000W32P"),
@@ -85,10 +90,15 @@
 	DEVICE( CIRRUS,		CIRRUS_5434_8,	"GD 5434"),
 	DEVICE( CIRRUS,		CIRRUS_5436,	"GD 5436"),
 	DEVICE( CIRRUS,		CIRRUS_5446,	"GD 5446"),
+	DEVICE( CIRRUS,		CIRRUS_5480,	"GD 5480"),
+	DEVICE( CIRRUS,		CIRRUS_5464,	"GD 5464"),
+	DEVICE( CIRRUS,		CIRRUS_5465,	"GD 5465"),
 	DEVICE( CIRRUS,		CIRRUS_6729,	"CL 6729"),
+	DEVICE( CIRRUS,		CIRRUS_6832,	"PD 6832"),
 	DEVICE( CIRRUS,		CIRRUS_7542,	"CL 7542"),
 	DEVICE( CIRRUS,		CIRRUS_7543,	"CL 7543"),
 	DEVICE( CIRRUS,		CIRRUS_7541,	"CL 7541"),
+	DEVICE( IBM,		IBM_FIRE_CORAL,	"Fire Coral"),
 	DEVICE( IBM,		IBM_82G2675,	"82G2675"),
 	DEVICE( IBM,		IBM_82351,	"82351"),
 	DEVICE( WD,		WD_7197,	"WD 7197"),
@@ -101,6 +111,7 @@
 	DEVICE( MATROX,		MATROX_MGA_2,	"Atlas PX2085"),
 	DEVICE( MATROX,		MATROX_MIL,	"Millennium"),
 	DEVICE( MATROX,		MATROX_MYS,	"Mystique"),
+	DEVICE( MATROX,		MATROX_MIL_2,	"Millennium II"),
 	DEVICE( MATROX,		MATROX_MGA_IMP,	"MGA Impression"),
 	DEVICE( CT,		CT_65545,	"65545"),
 	DEVICE( CT,		CT_65548,	"65548"),
@@ -115,6 +126,7 @@
 	DEVICE( SI,		SI_501,		"85C501"),
 	DEVICE( SI,		SI_496,		"85C496"),
 	DEVICE( SI,		SI_601,		"85C601"),
+	DEVICE( SI,		SI_5107,	"5107"),
 	DEVICE( SI,		SI_5511,		"85C5511"),
 	DEVICE( SI,		SI_5513,		"85C5513"),
 	DEVICE( SI,		SI_5571,	"5571"),
@@ -134,6 +146,8 @@
 	DEVICE( BUSLOGIC,	BUSLOGIC_MULTIMASTER_NC, "MultiMaster NC"),
 	DEVICE( BUSLOGIC,	BUSLOGIC_MULTIMASTER,    "MultiMaster"),
 	DEVICE( BUSLOGIC,	BUSLOGIC_FLASHPOINT,     "FlashPoint"),
+	DEVICE( TI,		TI_PCI1130,	"PCI1130"),
+	DEVICE( TI,		TI_PCI1131,	"PCI1131"),
 	DEVICE( OAK,		OAK_OTI107,	"OTI107"),
 	DEVICE( WINBOND2,	WINBOND2_89C940,"NE2000-PCI"),
 	DEVICE( MOTOROLA,	MOTOROLA_MPC105,"MPC105 Eagle"),
@@ -152,13 +166,24 @@
 	DEVICE( UMC,		UMC_UM8886N,	"UM8886N"),
 	DEVICE( UMC,		UMC_UM8891N,	"UM8891N"),
 	DEVICE( X,		X_AGX016,	"ITT AGX016"),
+	DEVICE( APPLE,		APPLE_BANDIT,	"Bandit"),
+	DEVICE( APPLE,		APPLE_GC,	"Grand Central"),
+	DEVICE( APPLE,		APPLE_HYDRA,	"Hydra"),
 	DEVICE( NEXGEN,		NEXGEN_82C501,	"82C501"),
 	DEVICE( QLOGIC,		QLOGIC_ISP1020,	"ISP1020"),
 	DEVICE( QLOGIC,		QLOGIC_ISP1022,	"ISP1022"),
 	DEVICE( LEADTEK,	LEADTEK_805,	"S3 805"),
 	DEVICE( CONTAQ,		CONTAQ_82C599,	"82C599"),
+	DEVICE( OLICOM,		OLICOM_OC3136,	"OC-3136/3137"),
+	DEVICE( OLICOM,		OLICOM_OC2315,	"OC-2315"),
+	DEVICE( OLICOM,		OLICOM_OC2325,	"OC-2325"),
+	DEVICE( OLICOM,		OLICOM_OC2183,	"OC-2183/2185"),
+	DEVICE( OLICOM,		OLICOM_OC2326,	"OC-2326"),
+	DEVICE( OLICOM,		OLICOM_OC6151,	"OC-6151/6152"),
 	DEVICE( CMD,		CMD_640,	"640 (buggy)"),
+	DEVICE( CMD,		CMD_643,	"643"),
 	DEVICE( CMD,		CMD_646,	"646"),
+	DEVICE( CMD,		CMD_670,	"670"),
 	DEVICE( VISION,		VISION_QD8500,	"QD-8500"),
 	DEVICE( VISION,		VISION_QD8580,	"QD-8580"),
 	DEVICE( BROOKTREE,	BROOKTREE_848,	"Bt848"),
@@ -167,6 +192,7 @@
 	DEVICE( WINBOND,	WINBOND_83769,	"W83769F"),
 	DEVICE( WINBOND,	WINBOND_82C105,	"SL82C105"),
 	DEVICE( WINBOND,	WINBOND_83C553,	"W83C553"),
+	DEVICE( DATABOOK,      	DATABOOK_87144,	"DB87144"),
 	DEVICE( 3COM,		3COM_3C590,	"3C590 10bT"),
 	DEVICE( 3COM,		3COM_3C595TX,	"3C595 100bTX"),
 	DEVICE( 3COM,		3COM_3C595T4,	"3C595 100bT4"),
@@ -183,6 +209,7 @@
 	DEVICE( AL,		AL_M1513,	"M1513"),
 	DEVICE( AL,		AL_M4803,	"M4803"),
 	DEVICE( NEOMAGIC,       NEOMAGIC_MAGICGRAPH_NM2070,     "Magicgraph NM2070"),
+	DEVICE( NEOMAGIC,	NEOMAGIC_MAGICGRAPH_128V, "MagicGraph 128V"),
 	DEVICE( ASP,		ASP_ABP940,	"ABP940"),
 	DEVICE( ASP,		ASP_ABP940U,	"ABP940U"),
 	DEVICE( CERN,		CERN_SPSB_PMC,	"STAR/RD24 SCI-PCI (PMC)"),
@@ -195,6 +222,8 @@
 	DEVICE( INTERG,		INTERG_1680,	"IGA-1680"),
 	DEVICE( INTERG,         INTERG_1682,    "IGA-1682"),
 	DEVICE( REALTEK,	REALTEK_8029,	"8029"),
+	DEVICE( REALTEK,	REALTEK_8129,	"8129"),
+	DEVICE( TRUEVISION,	TRUEVISION_T1000,"TARGA 1000"),
 	DEVICE( INIT,		INIT_320P,	"320 P"),
 	DEVICE( VIA,		VIA_82C505,	"VT 82C505"),
 	DEVICE( VIA,		VIA_82C561,	"VT 82C561"),
@@ -203,6 +232,7 @@
 	DEVICE( VIA,		VIA_82C585,	"VT 82C585VP Apollo VP-1"),
 	DEVICE( VIA,		VIA_82C586_0,	"VT 82C586 Apollo VP-1"),
 	DEVICE( VIA,		VIA_82C416,	"VT 82C416MV"),
+	DEVICE( VIA,		VIA_82C926,	"VT 82C926 Amazon"),
 	DEVICE( VORTEX,		VORTEX_GDT60x0,	"GDT 60x0"),
 	DEVICE( VORTEX,		VORTEX_GDT6000B,"GDT 6000b"),
 	DEVICE( VORTEX,		VORTEX_GDT6x10,	"GDT 6110/6510"),
@@ -219,22 +249,28 @@
 	DEVICE( VORTEX,		VORTEX_GDT6555,	"GDT 6555"),
 	DEVICE( EF,		EF_ATM_FPGA,		"155P-MF1 (FPGA)"),
 	DEVICE( EF,		EF_ATM_ASIC,	"155P-MF1 (ASIC)"),
-	DEVICE( IMAGINGTECH,	IMAGINGTECH_ICPCI, "MVC IC-PCI"),
 	DEVICE( FORE,		FORE_PCA200PC, "PCA-200PC"),
 	DEVICE( FORE,		FORE_PCA200E,	 "PCA-200E"),
 	DEVICE( IMAGINGTECH,	IMAGINGTECH_ICPCI, "MVC IC-PCI"),
+	DEVICE( PHILIPS,	PHILIPS_SAA7146,"SAA7146"),
 	DEVICE( PLX,		PLX_9060,	"PCI9060 i960 bridge"),
 	DEVICE( ALLIANCE,	ALLIANCE_PROMOTIO, "Promotion-6410"),
 	DEVICE( ALLIANCE,	ALLIANCE_PROVIDEO, "Provideo"),
 	DEVICE( VMIC,		VMIC_VME,	"VMIVME-7587"),
  	DEVICE( DIGI,		DIGI_RIGHTSWITCH, "RightSwitch SE-6"),
 	DEVICE( MUTECH,		MUTECH_MV1000,	"MV-1000"),
+	DEVICE( RENDITION,	RENDITION_VERITE,"Verite 1000"),
 	DEVICE( TOSHIBA,	TOSHIBA_601,	"Laptop"),
+	DEVICE( RICOH,		RICOH_RL5C466,	"RL5C466"),
 	DEVICE( ZEITNET,	ZEITNET_1221,	"1221"),
 	DEVICE( ZEITNET,	ZEITNET_1225,	"1225"),
-	DEVICE( OMEGA,		OMEGA_PCMCIA,	"PCMCIA"),
+	DEVICE( OMEGA,		OMEGA_82C092G,	"82C092G"),
+	DEVICE( NP,		NP_PCI_FDDI,	"NP-PCI"),       
 	DEVICE( SPECIALIX,	SPECIALIX_XIO,	"XIO/SIO host"),
 	DEVICE( SPECIALIX,	SPECIALIX_RIO,	"RIO host"),
+	DEVICE( IKON,		IKON_10115,	"10115 Greensheet"),
+	DEVICE( IKON,		IKON_10117,	"10117 Greensheet"),
+	DEVICE( ZORAN,		ZORAN_36057,	"ZR36057"),
 	DEVICE( ZORAN,		ZORAN_36120,	"ZR36120"),
 	DEVICE( COMPEX,		COMPEX_ENET100VG4, "Readylink ENET100-VG4"),
 	DEVICE( COMPEX,		COMPEX_RL2000,	"ReadyLink 2000"),
@@ -247,7 +283,7 @@
 	DEVICE( CYCLADES,	CYCLOM_Z_Lo,	"Cyclom-Z below 1Mbyte"),
 	DEVICE( CYCLADES,	CYCLOM_Z_Hi,	"Cyclom-Z above 1Mbyte"),
 	DEVICE( 3DFX,		3DFX_VOODOO,	"Voodoo"),
-	DEVICE( SIGMA_DESIGNS,	SD_REALMAGIC64GX, "REALmagic64/GX (SD 6425)"),
+	DEVICE( SIGMADES,	SIGMADES_6425,	"REALmagic64/GX"),
 	DEVICE( OPTIBASE,	OPTIBASE_FORGE,	"MPEG Forge"),
 	DEVICE( OPTIBASE,	OPTIBASE_FUSION,"MPEG Fusion"),
 	DEVICE( OPTIBASE,	OPTIBASE_VPLEX,	"VideoPlex"),
@@ -256,9 +292,12 @@
 	DEVICE( SYMPHONY,	SYMPHONY_101,	"82C101"),
 	DEVICE( TEKRAM,		TEKRAM_DC290,	"DC-290"),
 	DEVICE( 3DLABS,		3DLABS_300SX,	"GLINT 300SX"),
- 	DEVICE( 3DLABS,		3DLABS_DELTA,	"GLINT Delta"),
- 	DEVICE( 3DLABS,		3DLABS_PERMEDIA,"PERMEDIA"),
+	DEVICE( 3DLABS,		3DLABS_500TX,	"GLINT 500TX"),
+	DEVICE( 3DLABS,		3DLABS_DELTA,	"GLINT Delta"),
+	DEVICE( 3DLABS,		3DLABS_PERMEDIA,"PERMEDIA"),
+	DEVICE( AVANCE,		AVANCE_ALG2064,	"ALG2064i"),
 	DEVICE( AVANCE,		AVANCE_2302,	"ALG-2302"),
+	DEVICE( NETVIN,		NETVIN_NV5000SC,"NV5000"),
 	DEVICE( S3,		S3_PLATO_PXS,	"PLATO/PX (system)"),
 	DEVICE( S3,		S3_ViRGE,	"ViRGE"),
 	DEVICE( S3,		S3_TRIO,	"Trio32/Trio64"),
@@ -289,8 +328,8 @@
 	DEVICE( INTEL,		INTEL_82437,	"82437"),
 	DEVICE( INTEL,		INTEL_82371_0,	"82371 Triton PIIX"),
 	DEVICE( INTEL,		INTEL_82371_1,	"82371 Triton PIIX"),
-	DEVICE( INTEL,		INTEL_82371MX,	"82371MX Mobile PCI I/O IDE Xcelerator (MPIIX)"),
-	DEVICE( INTEL,		INTEL_82430MX,	"82430MX Mobile PCIset"),
+	DEVICE( INTEL,		INTEL_82371MX,	"430MX - 82371MX MPIIX"),
+	DEVICE( INTEL,		INTEL_82437MX,	"430MX - 82437MX MTSC"),
 	DEVICE( INTEL,		INTEL_82441,	"82441FX Natoma"),
 	DEVICE( INTEL,		INTEL_82439,	"82439HX Triton II"),
 	DEVICE(	INTEL,		INTEL_82371SB_0,"82371SB Natoma/Triton II PIIX3"),
@@ -299,11 +338,11 @@
 	DEVICE( INTEL,		INTEL_82437VX,	"82437VX Triton II"),
 	DEVICE( INTEL,		INTEL_82439TX,	"82439TX"),
 	DEVICE( INTEL,		INTEL_82371AB_0,"82371AB PIIX4"),
-	DEVICE( INTEL,		INTEL_82371AB,  "82371AB PIIX4"),
+	DEVICE( INTEL,		INTEL_82371AB,	"82371AB 430TX PIIX4"),
 	DEVICE( INTEL,		INTEL_82371AB_2,"82371AB PIIX4"),
 	DEVICE( INTEL,		INTEL_82371AB_3,"82371AB PIIX4 Power Management"),
 	DEVICE( INTEL,		INTEL_P6,	"Orion P6"),
-	DEVICE( INTEL,		INTEL_82450GX,	"82450GX Orion"),
+ 	DEVICE( INTEL,		INTEL_82450GX,	"82450GX Orion P6"),
 	DEVICE(	KTI,		KTI_ET32P2,	"ET32P2"),
 	DEVICE( ADAPTEC,	ADAPTEC_7850,	"AIC-7850"),
 	DEVICE( ADAPTEC,	ADAPTEC_7855,	"AIC-7855"),
@@ -541,13 +580,15 @@
 	      case PCI_VENDOR_ID_HP:		return "Hewlett Packard";
 	      case PCI_VENDOR_ID_PCTECH:	return "PCTECH";
 	      case PCI_VENDOR_ID_DPT:		return "DPT";
-	      case PCI_VENDOR_ID_OPTI:		return "OPTI";
+	      case PCI_VENDOR_ID_OPTI:		return "OPTi";
 	      case PCI_VENDOR_ID_SGS:		return "SGS Thomson";
 	      case PCI_VENDOR_ID_BUSLOGIC:	return "BusLogic";
+	      case PCI_VENDOR_ID_TI:		return "Texas Instruments";
 	      case PCI_VENDOR_ID_OAK: 		return "OAK";
 	      case PCI_VENDOR_ID_WINBOND2:	return "Winbond";
 	      case PCI_VENDOR_ID_MOTOROLA:	return "Motorola";
 	      case PCI_VENDOR_ID_PROMISE:	return "Promise Technology";
+	      case PCI_VENDOR_ID_APPLE:		return "Apple";
 	      case PCI_VENDOR_ID_N9:		return "Number Nine";
 	      case PCI_VENDOR_ID_UMC:		return "UMC";
 	      case PCI_VENDOR_ID_X:		return "X TECHNOLOGY";
@@ -563,8 +604,11 @@
 	      case PCI_VENDOR_ID_SIERRA:	return "Sierra";
 	      case PCI_VENDOR_ID_ACC:		return "ACC MICROELECTRONICS";
 	      case PCI_VENDOR_ID_WINBOND:	return "Winbond";
+	      case PCI_VENDOR_ID_DATABOOK:	return "Databook";
 	      case PCI_VENDOR_ID_3COM:		return "3Com";
+	      case PCI_VENDOR_ID_SMC:		return "SMC";
 	      case PCI_VENDOR_ID_AL:		return "Acer Labs";
+	      case PCI_VENDOR_ID_MITSUBISHI:	return "Mitsubishi";
 	      case PCI_VENDOR_ID_NEOMAGIC:	return "Neomagic";
 	      case PCI_VENDOR_ID_ASP:		return "Advanced System Products";
 	      case PCI_VENDOR_ID_CERN:		return "CERN";
@@ -574,37 +618,45 @@
 	      case PCI_VENDOR_ID_AMCC:		return "AMCC";
 	      case PCI_VENDOR_ID_INTERG:	return "Intergraphics";
 	      case PCI_VENDOR_ID_REALTEK:	return "Realtek";
+	      case PCI_VENDOR_ID_TRUEVISION:	return "Truevision";
 	      case PCI_VENDOR_ID_INIT:		return "Initio Corp";
 	      case PCI_VENDOR_ID_VIA:		return "VIA Technologies";
 	      case PCI_VENDOR_ID_VORTEX:	return "VORTEX";
 	      case PCI_VENDOR_ID_EF:		return "Efficient Networks";
 	      case PCI_VENDOR_ID_FORE:		return "Fore Systems";
 	      case PCI_VENDOR_ID_IMAGINGTECH:	return "Imaging Technology";
+	      case PCI_VENDOR_ID_PHILIPS:	return "Philips";
 	      case PCI_VENDOR_ID_PLX:		return "PLX";
 	      case PCI_VENDOR_ID_ALLIANCE:	return "Alliance";
 	      case PCI_VENDOR_ID_VMIC:		return "VMIC";
 	      case PCI_VENDOR_ID_DIGI:		return "Digi Intl.";
 	      case PCI_VENDOR_ID_MUTECH:	return "Mutech";
+	      case PCI_VENDOR_ID_RENDITION:	return "Rendition";
 	      case PCI_VENDOR_ID_TOSHIBA:	return "Toshiba";
+	      case PCI_VENDOR_ID_RICOH:		return "Ricoh";
 	      case PCI_VENDOR_ID_ZEITNET:	return "ZeitNet";
+	      case PCI_VENDOR_ID_OMEGA:		return "Omega Micro";
+	      case PCI_VENDOR_ID_NP:		return "Network Peripherals";
 	      case PCI_VENDOR_ID_SPECIALIX:	return "Specialix";
+	      case PCI_VENDOR_ID_IKON:		return "Ikon";
+	      case PCI_VENDOR_ID_ZORAN:		return "Zoran";
 	      case PCI_VENDOR_ID_COMPEX:	return "Compex";
 	      case PCI_VENDOR_ID_RP:		return "Comtrol";
 	      case PCI_VENDOR_ID_CYCLADES:	return "Cyclades";
-	      case PCI_VENDOR_ID_3DFX:		return "3DFX";
-	      case PCI_VENDOR_ID_SIGMA_DESIGNS:	return "Sigma Designs";
- 	      case PCI_VENDOR_ID_OPTIBASE:	return "Optibase Inc.";
+	      case PCI_VENDOR_ID_3DFX:		return "3Dfx";
+	      case PCI_VENDOR_ID_SIGMADES:	return "Sigma Designs";
+	      case PCI_VENDOR_ID_OPTIBASE:	return "Optibase";
 	      case PCI_VENDOR_ID_SYMPHONY:	return "Symphony";
 	      case PCI_VENDOR_ID_TEKRAM:	return "Tekram";
 	      case PCI_VENDOR_ID_3DLABS:	return "3Dlabs";
 	      case PCI_VENDOR_ID_AVANCE:	return "Avance";
+	      case PCI_VENDOR_ID_NETVIN:	return "NetVin";
 	      case PCI_VENDOR_ID_S3:		return "S3 Inc.";
 	      case PCI_VENDOR_ID_INTEL:		return "Intel";
+	      case PCI_VENDOR_ID_KTI:		return "KTI";
 	      case PCI_VENDOR_ID_ADAPTEC:	return "Adaptec";
 	      case PCI_VENDOR_ID_ATRONICS:	return "Atronics";
-#if 0
-	      case PCI_VENDOR_ID_HER:		return "Hercules";
-#endif
+	      case PCI_VENDOR_ID_ARK:		return "ARK Logic";
 	      default:				return "Unknown vendor";
 	}
 }
diff -urN linux-2.0.31-pre7/drivers/scsi/ncr53c8xx.c linux-2.0.31-pre8/drivers/scsi/ncr53c8xx.c
--- linux-2.0.31-pre7/drivers/scsi/ncr53c8xx.c	2003-08-15 15:04:06.000000000 -0700
+++ linux-2.0.31-pre8/drivers/scsi/ncr53c8xx.c	2003-08-15 15:04:07.000000000 -0700
@@ -64,7 +64,7 @@
 */
 
 /*
-**	26 July 1997, version 2.4
+**	21 August 1997, version 2.4a
 **
 **	Supported SCSI-II features:
 **	    Synchronous negotiation
@@ -8801,7 +8801,7 @@
 		else if	(!strncmp(cur, "safe:", 5) && val)
 			memcpy(&driver_setup, &driver_safe_setup, sizeof(driver_setup));
 		else
-			printf("ncr53c8xx_setup: unexpected boot option '%.*s' ignored\n", pc-cur+1, cur);
+			printf("ncr53c8xx_setup: unexpected boot option '%.*s' ignored\n", (int)(pc-cur+1), cur);
 
 		if ((cur = strchr(cur, ',')) != NULL)
 			++cur;
@@ -9293,7 +9293,7 @@
 	*/
 #ifdef NCR_IOMAPPED
 	request_region(io_port, 128, "ncr53c8xx");
-	device->slot.port = ioport;
+	device->slot.port = io_port;
 #else
 	device->slot.reg = (struct ncr_reg *) remap_pci_mem((ulong) base, 128);
 	if (!device->slot.reg)
diff -urN linux-2.0.31-pre7/drivers/scsi/ncr53c8xx.h linux-2.0.31-pre8/drivers/scsi/ncr53c8xx.h
--- linux-2.0.31-pre7/drivers/scsi/ncr53c8xx.h	2003-08-15 15:04:06.000000000 -0700
+++ linux-2.0.31-pre8/drivers/scsi/ncr53c8xx.h	2003-08-15 15:04:07.000000000 -0700
@@ -45,7 +45,7 @@
 /*
 **	Name and revision of the driver
 */
-#define SCSI_NCR_DRIVER_NAME		"ncr53c8xx - revision 2.4"
+#define SCSI_NCR_DRIVER_NAME		"ncr53c8xx - revision 2.4a"
 
 /*
 **	Check supported Linux versions
@@ -416,7 +416,7 @@
  FE_WIDE|FE_CACHE_SET|FE_BOF|FE_DFS|FE_LDSTR|FE_PFEN|FE_RAM}		\
  ,									\
  {PCI_DEVICE_ID_NCR_53C860, 0xff, "860",  4,  8, 5,			\
- FE_WIDE|FE_ULTRA|FE_CLK80|FE_CACHE_SET|FE_BOF|FE_LDSTR|FE_PFEN|FE_RAM}	\
+ FE_ULTRA|FE_CLK80|FE_CACHE_SET|FE_BOF|FE_LDSTR|FE_PFEN}		\
  ,									\
  {PCI_DEVICE_ID_NCR_53C875, 0x01, "875",  7, 16, 5,			\
  FE_WIDE|FE_ULTRA|FE_CLK80|FE_CACHE_SET|FE_BOF|FE_DFS|FE_LDSTR|FE_PFEN|FE_RAM}\
diff -urN linux-2.0.31-pre7/drivers/scsi/scsi_ioctl.c linux-2.0.31-pre8/drivers/scsi/scsi_ioctl.c
--- linux-2.0.31-pre7/drivers/scsi/scsi_ioctl.c	2003-08-15 15:04:06.000000000 -0700
+++ linux-2.0.31-pre8/drivers/scsi/scsi_ioctl.c	2003-08-15 15:04:07.000000000 -0700
@@ -9,6 +9,7 @@
 #include <asm/io.h>
 #include <asm/segment.h>
 #include <asm/system.h>
+#include <asm/page.h>
 
 #include <linux/errno.h>
 #include <linux/kernel.h>
@@ -28,7 +29,7 @@
 #define MOVE_MEDIUM_TIMEOUT (5 * 60 * HZ)
 #define READ_ELEMENT_STATUS_TIMEOUT (5 * 60 * HZ)
 
-#define MAX_BUF 4096
+#define MAX_BUF PAGE_SIZE
 
 #define max(a,b) (((a) > (b)) ? (a) : (b))
 
@@ -78,12 +79,9 @@
  * 
  * *(char *) ((int *) arg)[2] the actual command byte.   
  * 
- * Note that no more than MAX_BUF data bytes will be transfered.  Since
- * SCSI block device size is 512 bytes, I figured 1K was good.
- * but (WDE) changed it to 8192 to handle large bad track buffers.
- * ERY: I changed this to a dynamic allocation using scsi_malloc - we were
- * getting a kernel stack overflow which was crashing the system when we
- * were using 8192 bytes.
+ * Note that if more than MAX_BUF bytes are requested to be transfered,
+ * the ioctl will fail with error EINVAL.  MAX_BUF can be increased in
+ * the future by increasing the size that scsi_malloc will accept.
  * 
  * This size *does not* include the initial lengths that were passed.
  * 
@@ -205,8 +203,8 @@
      * If the user needs to transfer more data than this, they
      * should use scsi_generics instead.
      */
-    if( inlen > MAX_BUF ) inlen = MAX_BUF;
-    if( outlen > MAX_BUF ) outlen = MAX_BUF;
+    if( inlen > MAX_BUF )  return -EINVAL;
+    if( outlen > MAX_BUF )  return -EINVAL;
 
     cmd_in = (char *) ( ((int *)buffer) + 2);
     opcode = get_user(cmd_in); 
diff -urN linux-2.0.31-pre7/drivers/scsi/sr_ioctl.c linux-2.0.31-pre8/drivers/scsi/sr_ioctl.c
--- linux-2.0.31-pre7/drivers/scsi/sr_ioctl.c	1996-05-18 12:19:19.000000000 -0700
+++ linux-2.0.31-pre8/drivers/scsi/sr_ioctl.c	2003-08-15 15:04:07.000000000 -0700
@@ -66,7 +66,9 @@
 	    printk("CDROM not ready.  Make sure there is a disc in the drive.\n");
 	    break;
 	case ILLEGAL_REQUEST:
-	    printk("CDROM (ioctl) reports ILLEGAL REQUEST.\n");
+	  /* CDROMCLOSETRAY should not print an error for caddy drives. */
+	    if (!(sr_cmd[0] == START_STOP && sr_cmd[4] == 0x03))
+	      printk("CDROM (ioctl) reports ILLEGAL REQUEST.\n");
 	    break;
 	default:
 	    printk("SCSI CD error: host %d id %d lun %d return code = %03x\n", 
diff -urN linux-2.0.31-pre7/drivers/sound/.blurb linux-2.0.31-pre8/drivers/sound/.blurb
--- linux-2.0.31-pre7/drivers/sound/.blurb	1996-06-30 01:43:44.000000000 -0700
+++ linux-2.0.31-pre8/drivers/sound/.blurb	2003-08-15 15:04:07.000000000 -0700
@@ -1,9 +1,8 @@
 *********************************************************
 * Readme.cards (this directory) contains some card	*
 * specific instructions.				*
-* See http://www.4front-tech.com/usslite for most up    *
+* See http://www.4front-tech.com/ossfree for most up    *
 * to date info.                                         *
-* (European mirror http://personal.eunet.fi/pp/voxware) *
 *							*
 * DON'T USE PROGRAMS FROM SND_UTIL PACKAGE EARLIER THAN *
 * snd-util-3.5 WITH THIS SOUND DRIVER VERSION.          *
diff -urN linux-2.0.31-pre7/drivers/sound/Readme linux-2.0.31-pre8/drivers/sound/Readme
--- linux-2.0.31-pre7/drivers/sound/Readme	1996-07-06 01:31:43.000000000 -0700
+++ linux-2.0.31-pre8/drivers/sound/Readme	2003-08-15 15:04:07.000000000 -0700
@@ -2,8 +2,7 @@
 ------------------------------------
 
 Most up to date information about this driver is available from 
-http://www.4front-tech.com/usslite or http://personal.eunet.fi/pp/voxware
-(European mirror).
+http://www.4front-tech.com/ossfree.
 
 
 
@@ -24,7 +23,7 @@
 
 Packages "snd-util-3.5.tar.gz" and "snd-data-0.1.tar.Z"
 contain useful utilities to be used with this driver.
-See http://www.4front-tech.com/usslite/getting.html for
+See http://www.4front-tech.com/ossfree/getting.html for
 download instructions.
 
 If you are looking for the installation instructions, please
@@ -35,7 +34,7 @@
 
 See Readme.cards.
 
-Please check http://www.4front-tech.com/usslite if you don't find
+Please check http://www.4front-tech.com/ossfree if you don't find
 your soundcard there.
 
 Contributors
@@ -113,7 +112,7 @@
 =========================
 
 Read the sound HOWTO (sunsite.unc.edu:/pub/Linux/docs/...?).
-Also look at the home page (http://www.4front-tech.com/usslite). It may
+Also look at the home page (http://www.4front-tech.com/ossfree). It may
 contain info about some recent bug fixes.
 
 It's likely that you have some problems when trying to use the sound driver
@@ -167,8 +166,8 @@
 Hannu
 
 Hannu Savolainen
-hannu@voxware.pp.fi, hannu@4front-tech.com	
-(Please check http://www.4front-tech.com/usslite before mailing me).
+hannu@4front-tech.com	
+(Please check http://www.4front-tech.com/ossfree before mailing me).
 
 Snail mail:	Hannu Savolainen
 		Hiekkalaiturintie 3 A 8
diff -urN linux-2.0.31-pre7/drivers/sound/Readme.cards linux-2.0.31-pre8/drivers/sound/Readme.cards
--- linux-2.0.31-pre7/drivers/sound/Readme.cards	1996-09-20 07:00:35.000000000 -0700
+++ linux-2.0.31-pre8/drivers/sound/Readme.cards	2003-08-15 15:04:07.000000000 -0700
@@ -3,7 +3,7 @@
 
 IMPORTANT!	This document covers only cards that were "known" when
 		this driver version was released. Please look at
-		http://www.4front-tech.com/usslite for info about
+		http://www.4front-tech.com/ossfree for info about
 		cards introduced recently.
 
 		The following covers mainly the "old" configuration
@@ -25,18 +25,18 @@
 There are many soundcards which don't work with this driver
 version (v3.5). Support for some of them is expected to be
 available during/after summer 1996 (in version 3.6). Please check
-http://www.4front-tech.com/usslite for latest news. Please don't
+http://www.4front-tech.com/ossfree for latest news. Please don't
 mail me and ask about these cards. The unsupported cards are:
 
 	- All PnP soundcards (SB PnP, GUS PnP, Soundscape PnP etc.)
 		Schedule for availability of PnP soundcard support in
-		USS/Lite depends on progress made by kernel PnP team
+		OSS/Free depends on progress made by kernel PnP team
 		(probably in Linux 2.1.xx versions). With Linux 2.0.x
 		versions there are two ways to get PnP soundcards to work:
 	 	- Use isapnptools, DOS, Win95 or PnP aware BIOS to wake up the
 		card before starting the sound driver. See "Configuring PnP 
 		soundcards" below for some hints.
-		- Support for SB PnP and GUS PnP is present in USS/Linux (the
+		- Support for SB PnP and GUS PnP is present in OSS/Linux (the
 		commercial version of this driver).
 	- Mwave soundcards and motherboards
 		(Version 3.6 or 3.7. Depends on how fast I get
@@ -49,7 +49,7 @@
 	- Compaq Deskpro
 		(Version 3.5.4-beta6 (already released))
 	- Sound Galaxy Washington/Waverider
-		(Audio features already in USS/Linux (USS/Lite soon). 
+		(Audio features already in OSS/Linux (OSS/Free soon). 
 		Can't promise the waverider synth since
 		availability of chip specs is uncertain).
 	- Yamaha OPL4 (on cards having _RAM_ for samples)
@@ -77,7 +77,7 @@
 PnP soundcards (as well as most other PnP ISA cards) are not supported
 by version 3.5 of this driver (Linux 1.3.xx and Linux 2.0.x). Proper
 support for them should be released during spring 96 
-(see http://www.4front-tech.com/usslite for latest info).
+(see http://www.4front-tech.com/ossfree for latest info).
 
 There is a method to get most of the PnP cards to work. The basic method
 is the following:
@@ -719,7 +719,7 @@
 !!!!!	    purposes. It WAS required to change /dev/dsp (a symlink) to !!!!
 !!!!!	    point to /dev/dsp1.						!!!!
 !!!!!                                                                   !!!!
-!!!!!	    This is not required with USS versions 3.5-beta6 and later	!!!!
+!!!!!	    This is not required with OSS versions 3.5-beta6 and later	!!!!
 !!!!!	    since there is now just one audio device file. Please 	!!!!
 !!!!!	    change /dev/dsp to point back to /dev/dsp0 if you are	!!!!
 !!!!!	    upgrading from an earlier driver version using		!!!!
@@ -999,7 +999,7 @@
 Writing a driver for a new card is not possible if there are no 
 programming information available about the card. If you don't
 find your new card from this file, look from the home page 
-(http://www.4front-tech.com/usslite). Then please contact
+(http://www.4front-tech.com/ossfree). Then please contact
 manufacturer of the card and ask if they have (or are willing to)
 released technical details of the card. Do this before contacting me. I
 can only answer 'no' if there are no programming information available.
@@ -1020,7 +1020,7 @@
 There are some common audio chipsets that are not supported yet. For example
 Sierra Aria and IBM Mwave. It's possible that these architectures
 get some support in future but I can't make any promises. Just look
-at the home page (http://www.4front-tech.com/usslite/new_cards.html)
+at the home page (http://www.4front-tech.com/ossfree/new_cards.html)
 for latest info.
 
 Information about unsupported soundcards and chipsets is welcome as well
@@ -1029,12 +1029,11 @@
 If you have any corrections and/or comments, please contact me.
 
 Hannu Savolainen
-hannu@voxware.pp.fi
+hannu@4front-tech.com
 
-Personal home page:	   http://personal.eunet.fi/pp/voxware/hannu.html
-www home page of USS/Lite: http://www.4front-tech.com/usslite
-  European/Finnish mirror: http://personal.eunet.fi/pp/voxware
+Personal home page:	   http://www.4front-tech.com/hannu.html
+www home page of OSS/Free: http://www.4front-tech.com/ossfree
 
 www home page of commercial
-Open Sound System drivers: http://www.4front-tech.com/uss.html
+Open Sound System drivers: http://www.4front-tech.com/oss.html
 
diff -urN linux-2.0.31-pre7/drivers/sound/Readme.linux linux-2.0.31-pre8/drivers/sound/Readme.linux
--- linux-2.0.31-pre7/drivers/sound/Readme.linux	1996-07-06 01:31:43.000000000 -0700
+++ linux-2.0.31-pre8/drivers/sound/Readme.linux	2003-08-15 15:04:07.000000000 -0700
@@ -67,13 +67,18 @@
 check for possible boot (insmod) time error messages in /var/adm/messages.
 
 - Other messages or problems
-Please check http://www.4front-tech.com/usslite for more info.
+Please check http://www.4front-tech.com/ossfree for more info.
 
 Hannu Savolainen
-hannu@voxware.pp.fi
+hannu@4front-tech.com
 
 ----------------- cut here ------------------------------
 #!/bin/sh
+echo Error: Read the notice in the beginning of this script before executing.
+exit -1
+Notice! Remove this notice and the above two lines before trying to execute.
+        Trying to run this script is normally useless. The device files are
+        almost certainly already set up correctly. 
 # *****************************************
 # * NOTICE!
 # *
diff -urN linux-2.0.31-pre7/drivers/sound/Readme.v30 linux-2.0.31-pre8/drivers/sound/Readme.v30
--- linux-2.0.31-pre7/drivers/sound/Readme.v30	1996-07-06 01:31:43.000000000 -0700
+++ linux-2.0.31-pre8/drivers/sound/Readme.v30	2003-08-15 15:04:07.000000000 -0700
@@ -137,4 +137,4 @@
 Don't hesitate to contact me in case you have questions or comments.
 
 Hannu Savolainen
-hannu@voxware.pp.fi
+hannu@4front-tech.com
diff -urN linux-2.0.31-pre7/drivers/sound/sequencer.c linux-2.0.31-pre8/drivers/sound/sequencer.c
--- linux-2.0.31-pre7/drivers/sound/sequencer.c	2003-08-15 15:04:06.000000000 -0700
+++ linux-2.0.31-pre8/drivers/sound/sequencer.c	2003-08-15 15:04:07.000000000 -0700
@@ -1592,7 +1592,7 @@
 	return -(EIO);
 
       midi_dev = get_user ((int *) arg);
-      if (midi_dev >= max_mididev)
+      if (midi_dev < 0 || midi_dev >= max_mididev)
 	return -(ENXIO);
 
       if (!midi_opened[midi_dev])
diff -urN linux-2.0.31-pre7/fs/buffer.c linux-2.0.31-pre8/fs/buffer.c
--- linux-2.0.31-pre7/fs/buffer.c	2003-08-15 15:04:06.000000000 -0700
+++ linux-2.0.31-pre8/fs/buffer.c	2003-08-15 15:04:07.000000000 -0700
@@ -543,14 +543,11 @@
 static inline int can_reclaim(struct buffer_head *bh, int size)
 {
 	if (bh->b_count || 
-	    buffer_protected(bh) || buffer_locked(bh))
+	    buffer_protected(bh) ||
+	    buffer_locked(bh) ||
+	    mem_map[MAP_NR((unsigned long) bh->b_data)].count != 1 ||
+	    buffer_dirty(bh))
 		return 0;
-			 
-	if (mem_map[MAP_NR((unsigned long) bh->b_data)].count != 1 ||
-	    buffer_dirty(bh)) {
-		/* WSH: don't attempt to refile here! */
-		return 0;
-	}
 
 	if (bh->b_size != size)
 		return 0;
@@ -559,13 +556,15 @@
 }
 
 /* find a candidate buffer to be reclaimed */
-static struct buffer_head *find_candidate(struct buffer_head *list,int *list_len,int size)
+static struct buffer_head *find_candidate(struct buffer_head *bh,
+					  int *list_len, int size)
 {
-	struct buffer_head *bh;
+	int behind = 0;
+
+	if (!bh)
+		goto no_candidate;
 	
-	for (bh = list; 
-	     bh && (*list_len) > 0; 
-	     bh = bh->b_next_free, (*list_len)--) {
+	for (; (*list_len) > 0; bh = bh->b_next_free, (*list_len)--) {
 		if (size != bh->b_size) {
 			/* this provides a mechanism for freeing blocks
 			   of other sizes, this is necessary now that we
@@ -575,21 +574,18 @@
 				break;
 			continue;
 		}
-
-		if (buffer_locked(bh) && 
-		    (bh->b_list == BUF_LOCKED || bh->b_list == BUF_LOCKED1)) {
-			/* Buffers are written in the order they are placed 
-			   on the locked list. If we encounter a locked
-			   buffer here, this means that the rest of them
-			   are also locked */
-			(*list_len) = 0;
-			return NULL;
+		else if (buffer_locked(bh) && 
+			 (bh->b_list == BUF_LOCKED || bh->b_list == BUF_LOCKED1)) {
+			if (behind++ > 10) {
+				(*list_len) = 0;
+				goto no_candidate;
+			}
 		}
-
-		if (can_reclaim(bh,size))
-		    return bh;
+		else if (can_reclaim(bh,size))
+			return bh;
 	}
 
+no_candidate:
 	return NULL;
 }
 
@@ -662,6 +658,12 @@
 		}
 		goto repeat;
 	}
+
+	/* Dirty buffers should not overtake, wakeup_bdflush(1) calls
+	   bdflush and sleeps, therefore kswapd does his important work. */
+	if ((nr_buffers_type[BUF_DIRTY] > nr_buffers * bdf_prm.b_un.nfract/100) ||
+	    (nr_free_pages < min_free_pages))
+		wakeup_bdflush(1);
 	
 	/* Too bad, that was not enough. Try a little harder to grow some. */
 	
@@ -672,18 +674,7 @@
 		};
 	}
 
-#if 0
-	/*
-	 * In order to protect our reserved pages, 
-	 * return now if we got any buffers.
-	 */
-	if (free_list[BUFSIZE_INDEX(size)])
-		return;
-
 	/* and repeat until we find something good */
-	if (!grow_buffers(GFP_ATOMIC, size))
-		wakeup_bdflush(1);
-#endif
 	wakeup_bdflush(1);
 
 	/* decrease needed even if there is no success */
@@ -1717,7 +1708,7 @@
 		 * dirty buffers, then make the next write to a
 		 * loop device to be a blocking write.
 		 * This lets us block--which we _must_ do! */
-		if (ndirty == 0 && nr_buffers_type[BUF_DIRTY] > 0) {
+		if (ndirty == 0 && nr_buffers_type[BUF_DIRTY] > 0 && wrta_cmd != WRITE) {
 			wrta_cmd = WRITE;
 			continue;
 		}
@@ -1725,7 +1716,7 @@
 		
 		/* If there are still a lot of dirty buffers around, skip the sleep
 		   and flush some more */
-		if(nr_buffers_type[BUF_DIRTY] <= nr_buffers * bdf_prm.b_un.nfract/100) {
+		if(ndirty == 0 || nr_buffers_type[BUF_DIRTY] <= nr_buffers * bdf_prm.b_un.nfract/100) {
 			wake_up(&bdflush_done);
 			current->signal = 0;
 			interruptible_sleep_on(&bdflush_wait);
diff -urN linux-2.0.31-pre7/fs/locks.c linux-2.0.31-pre8/fs/locks.c
--- linux-2.0.31-pre7/fs/locks.c	2003-08-15 15:04:06.000000000 -0700
+++ linux-2.0.31-pre8/fs/locks.c	2003-08-15 15:04:07.000000000 -0700
@@ -128,6 +128,8 @@
 			   unsigned int wait);
 static int posix_locks_deadlock(struct task_struct *my_task,
 				struct task_struct *blocked_task);
+static void posix_remove_locks(struct file_lock **before, struct task_struct *task);
+static void flock_remove_locks(struct file_lock **before, struct file *filp);
 
 static struct file_lock *locks_alloc_lock(struct file_lock *fl);
 static void locks_insert_lock(struct file_lock **pos, struct file_lock *fl);
@@ -281,7 +283,7 @@
 
 	for (fl = filp->f_inode->i_flock; fl != NULL; fl = fl->fl_next) {
 		if (!(fl->fl_flags & FL_POSIX))
-			continue;
+			break;
 		if (posix_locks_conflict(&file_lock, fl)) {
 			flock.l_pid = fl->fl_owner->pid;
 			flock.l_start = fl->fl_start;
@@ -301,6 +303,8 @@
 
 /* Apply the lock described by l to an open file descriptor.
  * This implements both the F_SETLK and F_SETLKW commands of fcntl().
+ * It also emulates flock() in a pretty broken way for older C
+ * libraries.
  */
 int fcntl_setlk(unsigned int fd, unsigned int cmd, struct flock *l)
 {
@@ -354,9 +358,21 @@
 		break;
 	case F_SHLCK:
 	case F_EXLCK:
+#if 1
+/* warn a bit for now, but don't overdo it */
+{
+	static int count = 0;
+	if (!count) {
+		count=1;
 		printk(KERN_WARNING
-		       "fcntl_setlk(): process %d (%s) requested broken flock() emulation\n",
+		       "fcntl_setlk() called by process %d (%s) with broken flock() emulation\n",
 		       current->pid, current->comm);
+	}
+}
+#endif
+		if (!(filp->f_mode & 3))
+			return (-EBADF);
+		break;
 	default:
 		return (-EINVAL);
 	}
@@ -369,18 +385,27 @@
 void locks_remove_locks(struct task_struct *task, struct file *filp)
 {
 	struct file_lock *fl;
-	struct file_lock **before;
 
 	/* For POSIX locks we free all locks on this file for the given task.
 	 * For FLOCK we only free locks on this *open* file if it is the last
 	 * close on that file.
 	 */
-	before = &filp->f_inode->i_flock;
+	if ((fl = filp->f_inode->i_flock) != NULL) {
+		if (fl->fl_flags & FL_POSIX)
+			posix_remove_locks(&filp->f_inode->i_flock, task);
+		else
+			flock_remove_locks(&filp->f_inode->i_flock, filp);
+	}
+
+	return;
+}
+
+static void posix_remove_locks(struct file_lock **before, struct task_struct *task)
+{
+	struct file_lock *fl;
 
 	while ((fl = *before) != NULL) {
-		if (((fl->fl_flags & FL_POSIX) && (fl->fl_owner == task)) ||
-		    ((fl->fl_flags & FL_FLOCK) && (fl->fl_file == filp) &&
-		     (filp->f_count == 1)))
+		if (fl->fl_owner == task)
 			locks_delete_lock(before, 0);
 		else
 			before = &fl->fl_next;
@@ -389,6 +414,20 @@
 	return;
 }
 
+static void flock_remove_locks(struct file_lock **before, struct file *filp)
+{
+	struct file_lock *fl;
+
+ 	while ((fl = *before) != NULL) {
+		if ((fl->fl_file == filp) && (filp->f_count == 1))
+ 			locks_delete_lock(before, 0);
+ 		else
+ 			before = &fl->fl_next;
+	}
+
+	return;
+}
+
 int locks_verify_locked(struct inode *inode)
 {
 	/* Candidates for mandatory locking have the setgid bit set
@@ -417,13 +456,16 @@
 {
 	struct file_lock *fl;
 
+	/* If there are no FL_POSIX locks then go ahead. */
+	if (!(fl = inode->i_flock) || !(fl->fl_flags & FL_POSIX))
+		return (0);
+
 	/* Search the lock list for this inode for any POSIX locks.
 	 */
-	for (fl = inode->i_flock; fl != NULL; fl = fl->fl_next) {
-		if (!(fl->fl_flags & FL_POSIX))
-			continue;
+	while (fl != NULL) {
 		if (fl->fl_owner != current)
 			return (-EAGAIN);
+		fl = fl->fl_next;
 	}
 	return (0);
 }
@@ -445,12 +487,14 @@
 	tfl.fl_end = offset + count - 1;
 
 repeat:
+	/* If there are no FL_POSIX locks then go ahead. */
+	if (!(fl = inode->i_flock) || !(fl->fl_flags & FL_POSIX))
+		return (0);
+
 	/* Search the lock list for this inode for locks that conflict with
 	 * the proposed read/write.
 	 */
-	for (fl = inode->i_flock; fl != NULL; fl = fl->fl_next) {
-		if (!(fl->fl_flags & FL_POSIX))
-			continue;
+	while (fl != NULL) {
 		/* Block for writes against a "read" lock,
 		 * and both reads and writes against a "write" lock.
 		 */
@@ -475,6 +519,7 @@
 				break;
 			goto repeat;
 		}
+		fl = fl->fl_next;
 	}
 	return (0);
 }
@@ -497,6 +542,14 @@
 	case F_UNLCK:
 		fl->fl_type = l->l_type;
 		break;
+	case F_SHLCK :
+		fl->fl_type = F_RDLCK;
+		fl->fl_flags |= FL_BROKEN;
+		break;
+	case F_EXLCK :
+		fl->fl_type = F_WRLCK;
+		fl->fl_flags |= FL_BROKEN;
+		break;
 	default:
 		return (0);
 	}
@@ -569,8 +622,7 @@
 	/* POSIX locks owned by the same process do not conflict with
 	 * each other.
 	 */
-	if (!(sys_fl->fl_flags & FL_POSIX) ||
-	    (caller_fl->fl_owner == sys_fl->fl_owner))
+	if (caller_fl->fl_owner == sys_fl->fl_owner)
 		return (0);
 
 	return (locks_conflict(caller_fl, sys_fl));
@@ -584,8 +636,7 @@
 	/* FLOCK locks referring to the same filp do not conflict with
 	 * each other.
 	 */
-	if (!(sys_fl->fl_flags & FL_FLOCK) ||
-	    (caller_fl->fl_file == sys_fl->fl_file))
+	if (caller_fl->fl_file == sys_fl->fl_file)
 		return (0);
 
 	return (locks_conflict(caller_fl, sys_fl));
@@ -662,7 +713,11 @@
 	int change = 0;
 
 	before = &filp->f_inode->i_flock;
-	while (((fl = *before) != NULL) && (fl->fl_flags & FL_FLOCK)) {
+
+	if ((fl = *before) && (fl->fl_flags & FL_POSIX))
+		return (-EBUSY);
+
+	while ((fl = *before) != NULL) {
 		if (caller->fl_file == fl->fl_file) {
 			if (caller->fl_type == fl->fl_type)
 				return (0);
@@ -681,10 +736,16 @@
 	if ((new_fl = locks_alloc_lock(caller)) == NULL)
 		return (-ENOLCK);
 repeat:
-	for (fl = filp->f_inode->i_flock; (fl != NULL) && (fl->fl_flags & FL_FLOCK);
-	     fl = fl->fl_next) {
-		if (!flock_locks_conflict(new_fl, fl))
+	if ((fl = filp->f_inode->i_flock) && (fl->fl_flags & FL_POSIX)) {
+		locks_free_lock(new_fl);
+		return (-EBUSY);
+	}
+
+	while (fl != NULL) {
+		if (!flock_locks_conflict(new_fl, fl)) {
+			fl = fl->fl_next;
 			continue;
+		}
 		if (!wait) {
 			locks_free_lock(new_fl);
 			return (-EAGAIN);
@@ -738,11 +799,14 @@
 
 	if (caller->fl_type != F_UNLCK) {
   repeat:
-		for (fl = filp->f_inode->i_flock; fl != NULL; fl = fl->fl_next) {
-			if (!(fl->fl_flags & FL_POSIX))
-				continue;
-			if (!posix_locks_conflict(caller, fl))
+		if ((fl = filp->f_inode->i_flock) && (fl->fl_flags & FL_FLOCK))
+			return (-EBUSY);
+
+		while (fl != NULL) {
+			if (!posix_locks_conflict(caller, fl)) {
+				fl = fl->fl_next;
 				continue;
+			}
 			if (!wait)
 				return (-EAGAIN);
 			if (current->signal & ~current->blocked)
@@ -763,10 +827,12 @@
 	
 	before = &filp->f_inode->i_flock;
 
+	if ((*before != NULL) && ((*before)->fl_flags & FL_FLOCK))
+		return (-EBUSY);
+
 	/* First skip locks owned by other processes.
 	 */
-	while ((fl = *before) && (!(fl->fl_flags & FL_POSIX) ||
-				  (caller->fl_owner != fl->fl_owner))) {
+	while ((fl = *before) && (caller->fl_owner != fl->fl_owner)) {
 		before = &fl->fl_next;
 	}
 
@@ -964,6 +1030,7 @@
 	p += sprintf(p, "%d:%s ", id, pfx);
 	if (fl->fl_flags & FL_POSIX) {
 		p += sprintf(p, "%6s %s ",
+			     (fl->fl_flags & FL_BROKEN) ? "BROKEN" :
 			     (fl->fl_flags & FL_ACCESS) ? "ACCESS" : "POSIX ",
 			     (IS_MANDLOCK(inode) &&
 			      (inode->i_mode & (S_IXGRP | S_ISGID)) == S_ISGID) ?
diff -urN linux-2.0.31-pre7/fs/super.c linux-2.0.31-pre8/fs/super.c
--- linux-2.0.31-pre7/fs/super.c	2003-08-15 15:04:06.000000000 -0700
+++ linux-2.0.31-pre8/fs/super.c	2003-08-15 15:04:07.000000000 -0700
@@ -764,8 +764,7 @@
 		if (retval)
 			return retval;
 	}
-	sb->s_flags = (sb->s_flags & ~MS_RMT_MASK) |
-		(flags & MS_RMT_MASK);
+	sb->s_flags = (sb->s_flags & ~MS_RMT_MASK) | (flags & MS_RMT_MASK);
 	vfsmnt = lookup_vfsmnt(sb->s_dev);
 	if (vfsmnt)
 		vfsmnt->mnt_flags = sb->s_flags;
diff -urN linux-2.0.31-pre7/include/linux/fs.h linux-2.0.31-pre8/include/linux/fs.h
--- linux-2.0.31-pre7/include/linux/fs.h	2003-08-15 15:04:06.000000000 -0700
+++ linux-2.0.31-pre8/include/linux/fs.h	2003-08-15 15:04:07.000000000 -0700
@@ -79,7 +79,7 @@
 /*
  * Flags that can be altered by MS_REMOUNT
  */
-#define MS_RMT_MASK (MS_RDONLY|MS_MANDLOCK)
+#define MS_RMT_MASK (MS_RDONLY|MS_MANDLOCK|MS_NOATIME)
 
 /*
  * Magic mount flag number. Has to be or-ed to the flag values.
diff -urN linux-2.0.31-pre7/include/linux/isdn.h linux-2.0.31-pre8/include/linux/isdn.h
--- linux-2.0.31-pre7/include/linux/isdn.h	2003-08-15 15:04:06.000000000 -0700
+++ linux-2.0.31-pre8/include/linux/isdn.h	2003-08-15 15:04:07.000000000 -0700
@@ -1,4 +1,4 @@
-/* $Id: isdn.h,v 1.30 1997/06/17 13:07:23 hipp Exp $
+/* $Id: isdn.h,v 1.32 1997/08/21 09:49:46 fritz Exp $
  *
  * Main header for the Linux ISDN subsystem (linklevel).
  *
@@ -21,6 +21,12 @@
  * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 
  *
  * $Log: isdn.h,v $
+ * Revision 1.32  1997/08/21 09:49:46  fritz
+ * Increased NET_DV
+ *
+ * Revision 1.31  1997/06/22 11:57:07  fritz
+ * Added ability to adjust slave triggerlevel.
+ *
  * Revision 1.30  1997/06/17 13:07:23  hipp
  * compression changes , MP changes
  *
@@ -222,7 +228,7 @@
   int  outgoing;
 } isdn_net_ioctl_phone;
 
-#define NET_DV 0x03 /* Data version for net_cfg     */
+#define NET_DV 0x04 /* Data version for net_cfg     */
 #define TTY_DV 0x04 /* Data version for iprofd etc. */
 
 typedef struct {
@@ -239,7 +245,6 @@
   int  exclusive;    /* Channel, if bound exclusive           */
   int  dialmax;      /* Dial Retry-Counter                    */
   int  slavedelay;   /* Delay until slave starts up           */
-  int  triggercps;   /* BogoCPS needed for triggering slave   */
   int  cbdelay;      /* Delay before Callback                 */
   int  chargehup;    /* Flag: Charge-Hangup                   */
   int  ihup;         /* Flag: Hangup-Timeout on incoming line */
@@ -248,6 +253,7 @@
   int  cbhup;        /* Flag: Reject Call before Callback     */
   int  pppbind;      /* ippp device for bindings              */
   int  chargeint;    /* Use fixed charge interval length      */
+  int  triggercps;   /* BogoCPS needed for triggering slave   */
 } isdn_net_ioctl_cfg;
 
 #ifdef __KERNEL__
diff -urN linux-2.0.31-pre7/include/linux/mm.h linux-2.0.31-pre8/include/linux/mm.h
--- linux-2.0.31-pre7/include/linux/mm.h	1997-03-28 16:08:17.000000000 -0800
+++ linux-2.0.31-pre8/include/linux/mm.h	2003-08-15 15:04:07.000000000 -0700
@@ -295,7 +295,7 @@
 
 /* filemap.c */
 extern unsigned long page_unuse(unsigned long);
-extern int shrink_mmap(int, int);
+extern int shrink_mmap(int, int, int);
 extern void truncate_inode_pages(struct inode *, unsigned long);
 
 #define GFP_BUFFER	0x00
diff -urN linux-2.0.31-pre7/include/linux/pci.h linux-2.0.31-pre8/include/linux/pci.h
--- linux-2.0.31-pre7/include/linux/pci.h	2003-08-15 15:04:06.000000000 -0700
+++ linux-2.0.31-pre8/include/linux/pci.h	2003-08-15 15:04:07.000000000 -0700
@@ -221,6 +221,9 @@
  */
 #define PCI_VENDOR_ID_COMPAQ		0x0e11
 #define PCI_DEVICE_ID_COMPAQ_1280	0x3033
+#define PCI_DEVICE_ID_COMPAQ_NETELL100	0xae32
+#define PCI_DEVICE_ID_COMPAQ_NETELL10	0xae34
+#define PCI_DEVICE_ID_COMPAQ_NETFLEX3	0xae35
 #define PCI_DEVICE_ID_COMPAQ_THUNDER	0xf130
 
 #define PCI_VENDOR_ID_NCR		0x1000
@@ -240,12 +243,14 @@
 #define PCI_DEVICE_ID_ATI_210888CX	0x4358
 #define PCI_DEVICE_ID_ATI_215GT		0x4754
 #define PCI_DEVICE_ID_ATI_210888GX	0x4758
+#define PCI_DEVICE_ID_ATI_264VT		0x5654
 
 #define PCI_VENDOR_ID_VLSI		0x1004
 #define PCI_DEVICE_ID_VLSI_82C592	0x0005
 #define PCI_DEVICE_ID_VLSI_82C593	0x0006
 #define PCI_DEVICE_ID_VLSI_82C594	0x0007
 #define PCI_DEVICE_ID_VLSI_82C597	0x0009
+#define PCI_DEVICE_ID_VLSI_VAS96011	0x0702
 
 #define PCI_VENDOR_ID_ADL		0x1005
 #define PCI_DEVICE_ID_ADL_2301		0x2301
@@ -282,12 +287,17 @@
 #define PCI_DEVICE_ID_CIRRUS_5434_8	0x00a8
 #define PCI_DEVICE_ID_CIRRUS_5436	0x00ac
 #define PCI_DEVICE_ID_CIRRUS_5446	0x00b8
+#define PCI_DEVICE_ID_CIRRUS_5480	0x00bc
+#define PCI_DEVICE_ID_CIRRUS_5464	0x00d4
+#define PCI_DEVICE_ID_CIRRUS_5465	0x00d6
 #define PCI_DEVICE_ID_CIRRUS_6729	0x1100
+#define PCI_DEVICE_ID_CIRRUS_6832	0x1110
 #define PCI_DEVICE_ID_CIRRUS_7542	0x1200
 #define PCI_DEVICE_ID_CIRRUS_7543	0x1202
 #define PCI_DEVICE_ID_CIRRUS_7541	0x1204
 
 #define PCI_VENDOR_ID_IBM		0x1014
+#define PCI_DEVICE_ID_IBM_FIRE_CORAL	0x000a
 #define PCI_DEVICE_ID_IBM_82G2675	0x001d
 #define PCI_DEVICE_ID_IBM_82351		0x0022
 
@@ -310,6 +320,7 @@
 #define PCI_DEVICE_ID_MATROX_MGA_2	0x0518
 #define PCI_DEVICE_ID_MATROX_MIL	0x0519
 #define PCI_DEVICE_ID_MATROX_MYS	0x051A
+#define PCI_DEVICE_ID_MATROX_MIL_2	0x051b
 #define PCI_DEVICE_ID_MATROX_MGA_IMP	0x0d10
 
 #define PCI_VENDOR_ID_CT		0x102c
@@ -332,6 +343,7 @@
 #define PCI_DEVICE_ID_SI_501		0x0406
 #define PCI_DEVICE_ID_SI_496		0x0496
 #define PCI_DEVICE_ID_SI_601		0x0601
+#define PCI_DEVICE_ID_SI_5107		0x5107
 #define PCI_DEVICE_ID_SI_5511		0x5511
 #define PCI_DEVICE_ID_SI_5513		0x5513
 #define PCI_DEVICE_ID_SI_5571		0x5571
@@ -364,6 +376,10 @@
 #define PCI_DEVICE_ID_BUSLOGIC_MULTIMASTER    0x1040
 #define PCI_DEVICE_ID_BUSLOGIC_FLASHPOINT     0x8130
 
+#define PCI_VENDOR_ID_TI		0x104c
+#define PCI_DEVICE_ID_TI_PCI1130	0xac12
+#define PCI_DEVICE_ID_TI_PCI1131	0xac15
+
 #define PCI_VENDOR_ID_OAK		0x104e
 #define PCI_DEVICE_ID_OAK_OTI107	0x0107
 
@@ -397,6 +413,11 @@
 #define PCI_VENDOR_ID_X			0x1061
 #define PCI_DEVICE_ID_X_AGX016		0x0001
 
+#define PCI_VENDOR_ID_APPLE		0x106b
+#define PCI_DEVICE_ID_APPLE_BANDIT	0x0001
+#define PCI_DEVICE_ID_APPLE_GC		0x0002
+#define PCI_DEVICE_ID_APPLE_HYDRA	0x000e
+
 #define PCI_VENDOR_ID_NEXGEN		0x1074
 #define PCI_DEVICE_ID_NEXGEN_82C501	0x4e78
 
@@ -413,10 +434,18 @@
 #define PCI_VENDOR_ID_FOREX		0x1083
 
 #define PCI_VENDOR_ID_OLICOM		0x108d
+#define PCI_DEVICE_ID_OLICOM_OC3136	0x0001
+#define PCI_DEVICE_ID_OLICOM_OC2315	0x0011
+#define PCI_DEVICE_ID_OLICOM_OC2325	0x0012
+#define PCI_DEVICE_ID_OLICOM_OC2183	0x0013
+#define PCI_DEVICE_ID_OLICOM_OC2326	0x0014
+#define PCI_DEVICE_ID_OLICOM_OC6151	0x0021
 
 #define PCI_VENDOR_ID_CMD		0x1095
 #define PCI_DEVICE_ID_CMD_640		0x0640
+#define PCI_DEVICE_ID_CMD_643		0x0643
 #define PCI_DEVICE_ID_CMD_646		0x0646
+#define PCI_DEVICE_ID_CMD_670		0x0670
 
 #define PCI_VENDOR_ID_VISION		0x1098
 #define PCI_DEVICE_ID_VISION_QD8500	0x0001
@@ -436,6 +465,9 @@
 #define PCI_DEVICE_ID_WINBOND_82C105	0x0105
 #define PCI_DEVICE_ID_WINBOND_83C553	0x0565
 
+#define PCI_VENDOR_ID_DATABOOK		0x10b3
+#define PCI_DEVICE_ID_DATABOOK_87144	0xb106
+
 #define PCI_VENDOR_ID_3COM		0x10b7
 #define PCI_DEVICE_ID_3COM_3C590	0x5900
 #define PCI_DEVICE_ID_3COM_3C595TX	0x5950
@@ -445,6 +477,8 @@
 #define PCI_DEVICE_ID_3COM_3C900COMBO	0x9001
 #define PCI_DEVICE_ID_3COM_3C905TX	0x9050
 
+#define PCI_VENDOR_ID_SMC		0x10b8
+
 #define PCI_VENDOR_ID_AL		0x10b9
 #define PCI_DEVICE_ID_AL_M1445		0x1445
 #define PCI_DEVICE_ID_AL_M1449		0x1449
@@ -455,8 +489,11 @@
 #define PCI_DEVICE_ID_AL_M1513		0x1513
 #define PCI_DEVICE_ID_AL_M4803		0x5215
 
+#define PCI_VENDOR_ID_MITSUBISHI	0x10ba
+
 #define PCI_VENDOR_ID_NEOMAGIC          0x10c8
 #define PCI_DEVICE_ID_NEOMAGIC_MAGICGRAPH_NM2070 0x0001
+#define PCI_DEVICE_ID_NEOMAGIC_MAGICGRAPH_128V 0x0002
 
 #define PCI_VENDOR_ID_ASP		0x10cd
 #define PCI_DEVICE_ID_ASP_ABP940	0x1200
@@ -485,6 +522,10 @@
 
 #define PCI_VENDOR_ID_REALTEK		0x10ec
 #define PCI_DEVICE_ID_REALTEK_8029	0x8029
+#define PCI_DEVICE_ID_REALTEK_8129	0x8129
+
+#define PCI_VENDOR_ID_TRUEVISION	0x10fa
+#define PCI_DEVICE_ID_TRUEVISION_T1000	0x000c
 
 #define PCI_VENDOR_ID_INIT		0x1101
 #define PCI_DEVICE_ID_INIT_320P		0x9100
@@ -496,6 +537,7 @@
 #define PCI_DEVICE_ID_VIA_82C576	0x0576
 #define PCI_DEVICE_ID_VIA_82C585	0x0585
 #define PCI_DEVICE_ID_VIA_82C586_0	0x0586
+#define PCI_DEVICE_ID_VIA_82C926	0x0926
 #define PCI_DEVICE_ID_VIA_82C416	0x1571
 
 #define PCI_VENDOR_ID_VORTEX		0x1119
@@ -525,6 +567,9 @@
 #define PCI_VENDOR_ID_IMAGINGTECH	0x112f
 #define PCI_DEVICE_ID_IMAGINGTECH_ICPCI	0x0000
 
+#define PCI_VENDOR_ID_PHILIPS		0x1131
+#define PCI_DEVICE_ID_PHILIPS_SAA7146	0x7146
+
 #define PCI_VENDOR_ID_PLX		0x113c
 #define PCI_DEVICE_ID_PLX_9060		0x0001
 
@@ -541,21 +586,35 @@
 #define PCI_VENDOR_ID_MUTECH		0x1159
 #define PCI_DEVICE_ID_MUTECH_MV1000	0x0001
 
+#define PCI_VENDOR_ID_RENDITION		0x1163
+#define PCI_DEVICE_ID_RENDITION_VERITE	0x0001
+
 #define PCI_VENDOR_ID_TOSHIBA		0x1179
 #define PCI_DEVICE_ID_TOSHIBA_601	0x0601
 
+#define PCI_VENDOR_ID_RICOH		0x1180
+#define PCI_DEVICE_ID_RICOH_RL5C466	0x0466
+
 #define PCI_VENDOR_ID_ZEITNET		0x1193
 #define PCI_DEVICE_ID_ZEITNET_1221	0x0001
 #define PCI_DEVICE_ID_ZEITNET_1225	0x0002
 
 #define PCI_VENDOR_ID_OMEGA		0x119b
-#define PCI_DEVICE_ID_OMEGA_PCMCIA     	0x1221
+#define PCI_DEVICE_ID_OMEGA_82C092G	0x1221
+
+#define PCI_VENDOR_ID_NP		0x11bc
+#define PCI_DEVICE_ID_NP_PCI_FDDI	0x0001
 
 #define PCI_VENDOR_ID_SPECIALIX		0x11cb
 #define PCI_DEVICE_ID_SPECIALIX_XIO	0x4000
 #define PCI_DEVICE_ID_SPECIALIX_RIO	0x8000
 
+#define PCI_VENDOR_ID_IKON		0x11d5
+#define PCI_DEVICE_ID_IKON_10115	0x0115
+#define PCI_DEVICE_ID_IKON_10117	0x0117
+
 #define PCI_VENDOR_ID_ZORAN		0x11de
+#define PCI_DEVICE_ID_ZORAN_36057	0x6057
 #define PCI_DEVICE_ID_ZORAN_36120	0x6120
 
 #define PCI_VENDOR_ID_COMPEX		0x11f6
@@ -577,8 +636,8 @@
 #define PCI_VENDOR_ID_3DFX		0x121a
 #define PCI_DEVICE_ID_3DFX_VOODOO	0x0001
 
-#define PCI_VENDOR_ID_SIGMA_DESIGNS	0x1236
-#define PCI_DEVICE_ID_SD_REALMAGIC64GX	0x6401
+#define PCI_VENDOR_ID_SIGMADES		0x1236
+#define PCI_DEVICE_ID_SIGMADES_6425	0x6401
 
 #define PCI_VENDOR_ID_OPTIBASE		0x1255
 #define PCI_DEVICE_ID_OPTIBASE_FORGE	0x1110
@@ -595,12 +654,17 @@
 
 #define PCI_VENDOR_ID_3DLABS		0x3d3d
 #define PCI_DEVICE_ID_3DLABS_300SX	0x0001
+#define PCI_DEVICE_ID_3DLABS_500TX	0x0002
 #define PCI_DEVICE_ID_3DLABS_DELTA	0x0003
 #define PCI_DEVICE_ID_3DLABS_PERMEDIA	0x0004
 
 #define PCI_VENDOR_ID_AVANCE		0x4005
+#define PCI_DEVICE_ID_AVANCE_ALG2064	0x2064
 #define PCI_DEVICE_ID_AVANCE_2302	0x2302
 
+#define PCI_VENDOR_ID_NETVIN		0x4a14
+#define PCI_DEVICE_ID_NETVIN_NV5000SC	0x5000
+
 #define PCI_VENDOR_ID_S3		0x5333
 #define PCI_DEVICE_ID_S3_PLATO_PXS	0x0551
 #define PCI_DEVICE_ID_S3_ViRGE		0x5631
@@ -635,7 +699,7 @@
 #define PCI_DEVICE_ID_INTEL_82371_0	0x122e
 #define PCI_DEVICE_ID_INTEL_82371_1	0x1230
 #define PCI_DEVICE_ID_INTEL_82371MX	0x1234
-#define PCI_DEVICE_ID_INTEL_82430MX	0x1235
+#define PCI_DEVICE_ID_INTEL_82437MX	0x1235
 #define PCI_DEVICE_ID_INTEL_82441	0x1237
 #define PCI_DEVICE_ID_INTEL_82439	0x1250
 #define PCI_DEVICE_ID_INTEL_82371SB_0	0x7000
diff -urN linux-2.0.31-pre7/kernel/exit.c linux-2.0.31-pre8/kernel/exit.c
--- linux-2.0.31-pre7/kernel/exit.c	2003-08-15 15:04:07.000000000 -0700
+++ linux-2.0.31-pre8/kernel/exit.c	2003-08-15 15:04:07.000000000 -0700
@@ -533,7 +533,8 @@
 
 		p->p_pptr = p->p_opptr;
 		p->p_osptr = p->p_pptr->p_cptr;
-		p->p_osptr->p_ysptr = p;
+		if (p->p_osptr)
+			p->p_osptr->p_ysptr = p;
 		p->p_pptr->p_cptr = p;
 		if (p->state == TASK_ZOMBIE)
 			notify_parent(p, p->exit_signal);
diff -urN linux-2.0.31-pre7/kernel/time.c linux-2.0.31-pre8/kernel/time.c
--- linux-2.0.31-pre7/kernel/time.c	1996-04-24 23:59:33.000000000 -0700
+++ linux-2.0.31-pre8/kernel/time.c	2003-08-15 15:04:07.000000000 -0700
@@ -15,7 +15,7 @@
  * 1993-10-08    Torsten Duwe
  *      adjtime interface update and CMOS clock write code
  * 1995-08-13    Torsten Duwe
- *      kernel PLL updated to 1994-12-13 specs (rfc-1489)
+ *      kernel PLL updated to 1994-12-13 specs (rfc-1589)
  */
 
 #include <linux/errno.h>
diff -urN linux-2.0.31-pre7/mm/filemap.c linux-2.0.31-pre8/mm/filemap.c
--- linux-2.0.31-pre7/mm/filemap.c	2003-08-15 15:04:07.000000000 -0700
+++ linux-2.0.31-pre8/mm/filemap.c	2003-08-15 15:04:07.000000000 -0700
@@ -114,7 +114,7 @@
 	}
 }
 
-int shrink_mmap(int priority, int dma)
+int shrink_mmap(int priority, int dma, int can_do_io)
 {
 	static int clock = 0;
 	struct page * page;
@@ -174,7 +174,7 @@
 				}
 
 				/* is it a buffer cache page? */
-				if (bh && try_to_free_buffer(bh, &bh, 6))
+				if (can_do_io && bh && try_to_free_buffer(bh, &bh, 6))
 					return 1;
 				break;
 
diff -urN linux-2.0.31-pre7/mm/page_alloc.c linux-2.0.31-pre8/mm/page_alloc.c
--- linux-2.0.31-pre7/mm/page_alloc.c	2003-08-15 15:04:07.000000000 -0700
+++ linux-2.0.31-pre8/mm/page_alloc.c	2003-08-15 15:04:07.000000000 -0700
@@ -214,7 +214,7 @@
 		return 0;
 	}
 	restore_flags(flags);
-	if (priority != GFP_BUFFER && try_to_free_page(priority, dma, 1))
+	if (try_to_free_page(priority, dma, 1))
 		goto repeat;
 	return 0;
 }
diff -urN linux-2.0.31-pre7/mm/vmscan.c linux-2.0.31-pre8/mm/vmscan.c
--- linux-2.0.31-pre7/mm/vmscan.c	2003-08-15 15:04:07.000000000 -0700
+++ linux-2.0.31-pre8/mm/vmscan.c	2003-08-15 15:04:07.000000000 -0700
@@ -31,7 +31,7 @@
 /*
  * To check memory consuming code elsewhere set this to 1
  */
-#define MM_DEBUG 0
+/* #define MM_DEBUG */
 
 /* 
  * When are we next due for a page scan? 
@@ -80,7 +80,7 @@
  * have died while we slept).
  */
 static inline int try_to_swap_out(struct task_struct * tsk, struct vm_area_struct* vma,
-	unsigned long address, pte_t * page_table, int dma, int wait)
+	unsigned long address, pte_t * page_table, int dma, int wait, int can_do_io)
 {
 	pte_t pte;
 	unsigned long entry;
@@ -112,6 +112,8 @@
 	if (page_map->age)
 		return 0;
 	if (pte_dirty(pte)) {
+		if(!can_do_io)
+			return 0;
 		if (vma->vm_ops && vma->vm_ops->swapout) {
 			pid_t pid = tsk->pid;
 			vma->vm_mm->rss--;
@@ -169,7 +171,8 @@
  */
 
 static inline int swap_out_pmd(struct task_struct * tsk, struct vm_area_struct * vma,
-	pmd_t *dir, unsigned long address, unsigned long end, int dma, int wait)
+	pmd_t *dir, unsigned long address, unsigned long end, int dma, int wait,
+	int can_do_io)
 {
 	pte_t * pte;
 	unsigned long pmd_end;
@@ -191,7 +194,8 @@
 	do {
 		int result;
 		tsk->swap_address = address + PAGE_SIZE;
-		result = try_to_swap_out(tsk, vma, address, pte, dma, wait);
+		result = try_to_swap_out(tsk, vma, address, pte, dma, wait,
+					 can_do_io);
 		if (result)
 			return result;
 		address += PAGE_SIZE;
@@ -201,7 +205,8 @@
 }
 
 static inline int swap_out_pgd(struct task_struct * tsk, struct vm_area_struct * vma,
-	pgd_t *dir, unsigned long address, unsigned long end, int dma, int wait)
+	pgd_t *dir, unsigned long address, unsigned long end, int dma, int wait,
+	int can_do_io)
 {
 	pmd_t * pmd;
 	unsigned long pgd_end;
@@ -221,7 +226,8 @@
 		end = pgd_end;
 	
 	do {
-		int result = swap_out_pmd(tsk, vma, pmd, address, end, dma, wait);
+		int result = swap_out_pmd(tsk, vma, pmd, address, end, dma, wait,
+					  can_do_io);
 		if (result)
 			return result;
 		address = (address + PMD_SIZE) & PMD_MASK;
@@ -231,7 +237,7 @@
 }
 
 static int swap_out_vma(struct task_struct * tsk, struct vm_area_struct * vma,
-	pgd_t *pgdir, unsigned long start, int dma, int wait)
+	pgd_t *pgdir, unsigned long start, int dma, int wait, int can_do_io)
 {
 	unsigned long end;
 
@@ -242,7 +248,8 @@
 
 	end = vma->vm_end;
 	while (start < end) {
-		int result = swap_out_pgd(tsk, vma, pgdir, start, end, dma, wait);
+		int result = swap_out_pgd(tsk, vma, pgdir, start, end, dma, wait,
+					  can_do_io);
 		if (result)
 			return result;
 		start = (start + PGDIR_SIZE) & PGDIR_MASK;
@@ -251,7 +258,7 @@
 	return 0;
 }
 
-static int swap_out_process(struct task_struct * p, int dma, int wait)
+static int swap_out_process(struct task_struct * p, int dma, int wait, int can_do_io)
 {
 	unsigned long address;
 	struct vm_area_struct* vma;
@@ -272,7 +279,8 @@
 		address = vma->vm_start;
 
 	for (;;) {
-		int result = swap_out_vma(p, vma, pgd_offset(p->mm, address), address, dma, wait);
+		int result = swap_out_vma(p, vma, pgd_offset(p->mm, address), address, dma, wait,
+					  can_do_io);
 		if (result)
 			return result;
 		vma = vma->vm_next;
@@ -284,7 +292,7 @@
 	return 0;
 }
 
-static int swap_out(unsigned int priority, int dma, int wait)
+static int swap_out(unsigned int priority, int dma, int wait, int can_do_io)
 {
 	static int swap_task;
 	int loop, counter, shfrv;
@@ -357,7 +365,7 @@
 		}
 		if (!--p->swap_cnt)
 			swap_task++;
-		switch (swap_out_process(p, dma, wait)) {
+		switch (swap_out_process(p, dma, wait, can_do_io)) {
 			case 0:
 				if (p->state == TASK_STOPPED)
 					/* Stopped task occupy nonused ram */
@@ -391,24 +399,30 @@
 {
 	static int state = 0;
 	int i=6;
-	int stop;
+	int stop, can_do_io;
 
 	/* we don't try as hard if we're not waiting.. */
 	stop = 3;
+	can_do_io = 1;
 	if (wait)
 		stop = 0;
+	if (priority == GFP_BUFFER) {
+		/* bdflush() should do the rest if we fail */
+		stop = 3;
+		can_do_io = 0;
+	}
 	switch (state) {
 		do {
 		case 0:
-			if (shrink_mmap(i, dma))
+			if (shrink_mmap(i, dma, can_do_io))
 				return 1;
 			state = 1;
 		case 1:
-			if (shm_swap(i, dma))
+			if (can_do_io && shm_swap(i, dma))
 				return 1;
 			state = 2;
 		default:
-			if (swap_out(i, dma, wait))
+			if (swap_out(i, dma, wait, can_do_io))
 				return 1;
 			state = 0;
 		i--;
diff -urN linux-2.0.31-pre7/net/bridge/br.c linux-2.0.31-pre8/net/bridge/br.c
--- linux-2.0.31-pre7/net/bridge/br.c	1996-11-07 22:44:27.000000000 -0800
+++ linux-2.0.31-pre8/net/bridge/br.c	2003-08-15 15:04:07.000000000 -0700
@@ -1418,7 +1418,7 @@
 		return;
 	}
 		
-	bpdu = (Tcn_bpdu *)skb->data + ETH_HLEN;
+	bpdu = (Tcn_bpdu *) (skb->data + ETH_HLEN);
 	switch (bpdu->type) {
 		case BPDU_TYPE_CONFIG:
 			received_config_bpdu(port, (Config_bpdu *)bpdu);
diff -urN linux-2.0.31-pre7/net/ipv4/route.c linux-2.0.31-pre8/net/ipv4/route.c
--- linux-2.0.31-pre7/net/ipv4/route.c	2003-08-15 15:04:07.000000000 -0700
+++ linux-2.0.31-pre8/net/ipv4/route.c	2003-08-15 15:04:07.000000000 -0700
@@ -130,9 +130,9 @@
  * Backlogging.
  */
 
-#define RT_BH_REDIRECT		0
-#define RT_BH_GARBAGE_COLLECT 	1
-#define RT_BH_FREE	 	2
+#define RT_BH_REDIRECT		1
+#define RT_BH_GARBAGE_COLLECT 	2
+#define RT_BH_FREE	 	4
 
 struct rt_req
 {
