## Automatically generated incremental diff
## From:   linux-2.2.3-pre3
## To:     linux-2.2.3
## Robot:  $Id: make-incremental-diff,v 1.5 2001/12/01 08:32:36 hpa Exp $

diff -urN linux-2.2.3-pre3/Documentation/Configure.help linux/Documentation/Configure.help
--- linux-2.2.3-pre3/Documentation/Configure.help	Mon Dec  3 18:34:04 2001
+++ linux/Documentation/Configure.help	Mon Dec  3 18:34:21 2001
@@ -2080,7 +2080,7 @@
 CONFIG_PNP_PARPORT
   Some IEEE-1284 conforming parallel-port devices can identify
   themselves when requested. Say Y to enable this feature, or M to
-  compile it as a module (parport_ieee1284.o). If in doubt, say N.
+  compile it as a module (parport_probe.o). If in doubt, say N.
 
 Enable loadable module support
 CONFIG_MODULES
@@ -2716,20 +2716,6 @@
   enabled. Those programs that would benefit from disabling this
   facility can do it on a per connection basis themselves.
 
-IP: Drop source routed frames
-CONFIG_IP_NOSR
-  Usually, the originator of an IP frame (packet) specifies only the
-  destination, and the hosts along the way do the routing, i.e. they
-  decide how to forward the frame. However, there is a feature of the
-  IP protocol that allows to specify the full route for a given frame
-  already at its origin. A frame with such a fully specified route is
-  called "source routed". The question now is whether we should honour
-  these route requests when such frames arrive, or if we should drop
-  all those frames instead. Honouring them can introduce security
-  problems (and is rarely a useful feature), and hence it is
-  recommended that you say Y here unless you really know what you're
-  doing.
-
 IP: Allow large windows (not recommended if <16 MB of memory)
 CONFIG_SKB_LARGE
   On high speed, long distance networks the performance limit on
@@ -4184,6 +4170,17 @@
   say M here and read Documentation/modules.txt. The module will be
   called initio.o
 
+Initio 91XXU(W) SCSI support
+CONFIG_SCSI_INITIO
+  This is support for the Initio 91XXU(W) SCSI host adapter.
+  Please read the SCSI-HOWTO, available via FTP (user: anonymous) at
+  ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO.
+
+  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 Documentation/modules.txt. The module will be
+  called initio.o
+
 PAS16 SCSI support
 CONFIG_SCSI_PAS16
   This is support for a SCSI host adapter. It is explained in section
@@ -4197,6 +4194,17 @@
   The module will be called pas16.o. If you want to compile it as a
   module, say M here and read Documentation/modules.txt.
 
+Initio INI-A100U2W SCSI support
+CONFIG_SCSI_INIA100
+  This is support for the Initio INI-A100U2W SCSI host adapter.
+  Please read the SCSI-HOWTO, available via FTP (user: anonymous) at
+  ftp://sunsite.unc.edu/pub/Linux/docs/HOWTO.
+
+  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 Documentation/modules.txt. The module will be
+  called a100u2w.o
+
 PCI2000 support
 CONFIG_SCSI_PCI2000
   This is support for the PCI2000I EIDE interface card which acts as a
@@ -4389,6 +4397,23 @@
   say M here and read Documentation/modules.txt. The module will be
   called NCR53c406.o.
 
+Symbios Logic sym53c416 support
+CONFIG_SCSI_SYM53C416
+  This is support for the sym53c416 SCSI host adapter. This is the
+  SCSI adapter that comes with some hp scanners. This driver requires that
+  the sym53c416 is configured first using some sort of pnp configuration
+  program (e.g. isapnp) or by a PnP aware BIOS. If you are using isapnp then
+  you need to compile it as a module and then load it using insmod after
+  isapnp has run. The parameters of the configured card(s) should be passed
+  to the driver. The format is:
+
+    insmod sym53c416 sym53c416=<base>,<irq> [sym53c416_1=<base>,<irq>]
+
+  There is support for up to four adapters. If you want to compile this
+  driver as a module ( = code which can be inserted in and removed from
+  the running kernel whenever you want), say M here and read
+  Documentation/modules.txt.
+
 Tekram DC390(T) and Am53/79C974 (PCscsi) SCSI support
 CONFIG_SCSI_DC390T
   This driver supports PCI SCSI host adapters based on the Am53C974A
@@ -8914,6 +8939,20 @@
   here (the module will be called sound.o) if you haven't found a
   driver for your sound card above, then pick your driver from the
   list below.
+
+Persistent DMA buffers
+CONFIG_SOUND_DMAP
+  Linux can often have problems allocating DMA buffers for ISA cards on
+  machines with more than 16MB of RAM. This is because ISA DMA buffers
+  must exist below the 16MB boundry and it is quite possible that we
+  can't find a large enough free block in this region after the machine
+  has been running for any amount of time. If you say Y here the DMA
+  buffers (64Kb) will be allocated at boot time and kept until the
+  shutdown. This option is only usefull if you say Y to OSS sound
+  modules. If you say M to OSS sound modules then you can just pass to
+  the sound.o module a "dmabuf=1" command-line argument.
+
+  Say Y unless you have 16MB or less RAM or a PCI sound card.
  
 Support for Aztech Sound Galaxy (non-PnP) cards
 CONFIG_SOUND_SGALAXY
@@ -10493,6 +10532,44 @@
 CONFIG_RADIO_SF16FMI_PORT
   Enter the I/O port of your SF16FMI radio card.
 
+Typhoon Radio
+CONFIG_RADIO_TYPHOON
+  Choose Y here if you have one of these FM radio cards, and then fill
+  in the port address and the frequency used for muting below.
+
+  In order to control your radio card, you will need to use programs
+  that are compatible with the Video for Linux API. Information on 
+  this API and pointers to "v4l" programs may be found on the WWW at
+  http://roadrunner.swansea.uk.linux.org/v4l.shtml; to browse the WWW,
+  you need to have access to a machine on the Internet that has a 
+  program like lynx or netscape.
+
+  If you want to compile this driver as a module ( = code which can be
+  inserted in and removed from the running kernel whenever you want),
+  say M here and read Documentation/modules.txt. The module will be
+  called radio-typhoon.o
+
+Support for /proc/radio-typhoon
+CONFIG_RADIO_TYPHOON_PROC_FS
+  Say Y here if you want the typhoon radio card driver to write
+  status information (frequency, volume, muted, mute frequency,
+  base address) to /proc/radio-typhoon. The file can be viewed with
+  your favorite pager (i.e. use "more /proc/radio-typhoon" or "less
+  /proc/radio-typhoon" or simply "cat /proc/radio-typhoon").
+
+Typhoon I/O port (0x316 or 0x336)
+CONFIG_RADIO_TYPHOON_PORT
+  Enter the I/O port of your Typhoon or EcoRadio radio card.
+
+Typhoon frequency set when muting the device (kHz)
+CONFIG_RADIO_TYPHOON_MUTEFREQ
+  Enter the frequency used for muting the radio. The device is never
+  completely silent. If the volume is just turned down, you can still
+  hear silent voices and music. For that reason, the frequency of the
+  radio device is set to the frequency you can enter here whenever
+  the device is muted. There should be no local radio station at that
+  frequency.
+
 Zoltrix Radio
 CONFIG_RADIO_ZOLTRIX
   Choose Y here if you have one of these FM radio cards, and then fill
@@ -10738,24 +10815,10 @@
   Documentation/modules.txt. IrLAN emulates an Ethernet and makes it
   possible to put up a wireless LAN using infrared beams.
 
-IrLAN Client Protocol 
-CONFIG_IRLAN_CLIENT
-  Say Y here if you want to build support for the IrLAN client
-  protocol. If you want to compile it as a module, say M here and read
-  Documentation/modules.txt. The IrLAN client protocol can be used to
-  talk with infrared access points like the HP NetbeamIR, or the ESI
-  JetEye NET. You can also connect to another Linux machine running
-  the IrLAN server protocol for ad-hoc networking!
-
-IrLAN Server Protocol 
-CONFIG_IRLAN_SERVER
-  Say Y here if you want to build support for infrared LAN access. If
-  you want to compile it as a module, say M here and read
-  Documentation/modules.txt. The IrLAN server protocol makes it
-  possible to set up a wireless LAN with a machine running the IrLAN
-  client protocol. Notice that the IrLAN server protocol currently
-  only emulates an access point and does not implement the ad-hoc
-  specification of IrLAN, but this will not be noticeable by the user.
+  The IrLAN protocol can be used to talk with infrared access points 
+  like the HP NetbeamIR, or the ESI JetEye NET. You can also connect 
+  to another Linux machine running the IrLAN protocol for ac-hoc 
+  networking!
 
 IrOBEX Protocol
 CONFIG_IROBEX
@@ -10867,6 +10930,15 @@
   the normal 9-pin serial port connector, and can currently only be
   used by IrTTY. To activate support for Tekram dongles you will have
   to insert "irattach -d tekram" in the /etc/irda/drivers script.
+
+Greenwich GIrBIL dongle
+CONFIG_GIRBIL_DONGLE
+  Say Y here if you want to build support for the Greenwich GIrBIL
+  dongle. If you want to compile it as a module, say M here and read
+  Documentation/modules.txt. The Greenwich dongle attaches to the
+  normal 9-pin serial port connector, and can currently only be used
+  by IrTTY. To activate support for Greenwich dongles you will have to
+  insert "irattach -d girbil" in the /etc/irda/drivers script.
 
 VME (Motorola and BVM) support
 CONFIG_VME
diff -urN linux-2.2.3-pre3/arch/i386/kernel/bios32.c linux/arch/i386/kernel/bios32.c
--- linux-2.2.3-pre3/arch/i386/kernel/bios32.c	Mon Dec  3 18:34:05 2001
+++ linux/arch/i386/kernel/bios32.c	Mon Dec  3 18:34:22 2001
@@ -875,8 +875,8 @@
 		printk("PCI: Unassigned I/O space for %02x:%02x\n", bus, devfn);
 		return;
 	}
-	if ((dev->class >> 8) == PCI_CLASS_STORAGE_IDE && idx < 4 ||
-	    (dev->class >> 8) == PCI_CLASS_DISPLAY_VGA) {
+	if (((dev->class >> 8) == PCI_CLASS_STORAGE_IDE && idx < 4) ||
+	     (dev->class >> 8) == PCI_CLASS_DISPLAY_VGA) {
 		/*
 		 * In case the BIOS didn't assign an address 0--3 to an IDE
 		 * controller, we don't try to fix it as it means "use default
diff -urN linux-2.2.3-pre3/arch/i386/kernel/time.c linux/arch/i386/kernel/time.c
--- linux-2.2.3-pre3/arch/i386/kernel/time.c	Mon Dec  3 18:34:05 2001
+++ linux/arch/i386/kernel/time.c	Mon Dec  3 18:34:22 2001
@@ -543,70 +543,72 @@
  * device.
  */
 
+#define CALIBRATE_LATCH	(5 * LATCH)
+#define CALIBRATE_TIME	(5 * 1000020/HZ)
+
 __initfunc(static unsigned long calibrate_tsc(void))
 {
-       unsigned long retval;
+       /* Set the Gate high, disable speaker */
+	outb((inb(0x61) & ~0x02) | 0x01, 0x61);
 
-       __asm__( /* set the Gate high, program CTC channel 2 for mode 0
-		 * (interrupt on terminal count mode), binary count, 
-		 * load 5 * LATCH count, (LSB and MSB)
-		 * to begin countdown, read the TSC and busy wait.
-		 * BTW LATCH is calculated in timex.h from the HZ value
-		 */
-
-	       /* Set the Gate high, disable speaker */
-	       "inb  $0x61, %%al\n\t" /* Read port */
-	       "andb $0xfd, %%al\n\t" /* Turn off speaker Data */
-	       "orb  $0x01, %%al\n\t" /* Set Gate high */
-	       "outb %%al, $0x61\n\t" /* Write port */
-
-	       /* Now let's take care of CTC channel 2 */
-	       "movb $0xb0, %%al\n\t" /* binary, mode 0, LSB/MSB, ch 2*/
-	       "outb %%al, $0x43\n\t" /* Write to CTC command port */
-	       "movl %1, %%eax\n\t"
-	       "outb %%al, $0x42\n\t" /* LSB of count */
-	       "shrl $8, %%eax\n\t"
-	       "outb %%al, $0x42\n\t" /* MSB of count */
-
-               /* Read the TSC; counting has just started */
-               "rdtsc\n\t"
-               /* Move the value for safe-keeping. */
-               "movl %%eax, %%ebx\n\t"
-               "movl %%edx, %%ecx\n\t"
-
-	       /* Busy wait. Only 50 ms wasted at boot time. */
-               "0: inb $0x61, %%al\n\t" /* Read Speaker Output Port */
-	       "testb $0x20, %%al\n\t" /* Check CTC channel 2 output (bit 5) */
-               "jz 0b\n\t"
-
-               /* And read the TSC.  5 jiffies (50.00077ms) have elapsed. */
-               "rdtsc\n\t"
-
-               /* Great.  So far so good.  Store last TSC reading in
-                * last_tsc_low (only 32 lsb bits needed) */
-               "movl %%eax, last_tsc_low\n\t"
-               /* And now calculate the difference between the readings. */
-               "subl %%ebx, %%eax\n\t"
-               "sbbl %%ecx, %%edx\n\t" /* 64-bit subtract */
-	       /* but probably edx = 0 at this point (see below). */
-               /* Now we have 5 * (TSC counts per jiffy) in eax.  We want
-                * to calculate TSC->microsecond conversion factor. */
-
-               /* Note that edx (high 32-bits of difference) will now be 
-                * zero iff CPU clock speed is less than 85 GHz.  Moore's
-                * law says that this is likely to be true for the next
-                * 12 years or so.  You will have to change this code to
-                * do a real 64-by-64 divide before that time's up. */
-               "movl %%eax, %%ecx\n\t"
-               "xorl %%eax, %%eax\n\t"
-               "movl %2, %%edx\n\t"
-               "divl %%ecx\n\t" /* eax= 2^32 / (1 * TSC counts per microsecond) */
-	       /* Return eax for the use of fast_gettimeoffset */
-               "movl %%eax, %0\n\t"
-               : "=r" (retval)
-               : "r" (5 * LATCH), "r" (5 * 1000020/HZ)
-               : /* we clobber: */ "ax", "bx", "cx", "dx", "cc", "memory");
-       return retval;
+	/*
+	 * Now let's take care of CTC channel 2
+	 *
+	 * Set the Gate high, program CTC channel 2 for mode 0,
+	 * (interrupt on terminal count mode), binary count,
+	 * load 5 * LATCH count, (LSB and MSB) to begin countdown.
+	 */
+	outb(0xb0, 0x43);			/* binary, mode 0, LSB/MSB, Ch 2 */
+	outb(CALIBRATE_LATCH & 0xff, 0x42);	/* LSB of count */
+	outb(CALIBRATE_LATCH >> 8, 0x42);	/* MSB of count */
+
+	{
+		unsigned long startlow, starthigh;
+		unsigned long endlow, endhigh;
+		unsigned long count;
+
+		__asm__ __volatile__("rdtsc":"=a" (startlow),"=d" (starthigh));
+		count = 0;
+		do {
+			count++;
+		} while ((inb(0x61) & 0x20) == 0);
+		__asm__ __volatile__("rdtsc":"=a" (endlow),"=d" (endhigh));
+
+		last_tsc_low = endlow;
+
+		/* Error: ECTCNEVERSET */
+		if (count <= 1)
+			goto bad_ctc;
+
+		/* 64-bit subtract - gcc just messes up with long longs */
+		__asm__("subl %2,%0\n\t"
+			"sbbl %3,%1"
+			:"=a" (endlow), "=d" (endhigh)
+			:"g" (startlow), "g" (starthigh),
+			 "0" (endlow), "1" (endhigh));
+
+		/* Error: ECPUTOOFAST */
+		if (endhigh)
+			goto bad_ctc;
+
+		/* Error: ECPUTOOSLOW */
+		if (endlow <= CALIBRATE_TIME)
+			goto bad_ctc;
+
+		__asm__("divl %2"
+			:"=a" (endlow), "=d" (endhigh)
+			:"r" (endlow), "0" (0), "1" (CALIBRATE_TIME));
+
+		return endlow;
+	}
+
+	/*
+	 * The CTC wasn't reliable: we got a hit on the very first read,
+	 * or the CPU was so fast/slow that the quotient wouldn't fit in
+	 * 32 bits..
+	 */
+bad_ctc:
+	return 0;
 }
 
 __initfunc(void time_init(void))
@@ -642,23 +644,26 @@
  	dodgy_tsc();
  	
 	if (boot_cpu_data.x86_capability & X86_FEATURE_TSC) {
+		unsigned long tsc_quotient = calibrate_tsc();
+		if (tsc_quotient) {
+			fast_gettimeoffset_quotient = tsc_quotient;
+			use_tsc = 1;
 #ifndef do_gettimeoffset
-		do_gettimeoffset = do_fast_gettimeoffset;
+			do_gettimeoffset = do_fast_gettimeoffset;
 #endif
-		do_get_fast_time = do_gettimeofday;
-		use_tsc = 1;
-		fast_gettimeoffset_quotient = calibrate_tsc();
-		
-		/* report CPU clock rate in Hz.
-		 * The formula is (10^6 * 2^32) / (2^32 * 1 / (clocks/us)) =
-		 * clock/second. Our precision is about 100 ppm.
-		 */
-		{	unsigned long eax=0, edx=1000000;
-			__asm__("divl %2"
-	       		:"=a" (cpu_hz), "=d" (edx)
-               		:"r" (fast_gettimeoffset_quotient),
-                	"0" (eax), "1" (edx));
-			printk("Detected %ld Hz processor.\n", cpu_hz);
+			do_get_fast_time = do_gettimeofday;
+
+			/* report CPU clock rate in Hz.
+			 * The formula is (10^6 * 2^32) / (2^32 * 1 / (clocks/us)) =
+			 * clock/second. Our precision is about 100 ppm.
+			 */
+			{	unsigned long eax=0, edx=1000000;
+				__asm__("divl %2"
+		       		:"=a" (cpu_hz), "=d" (edx)
+        	       		:"r" (tsc_quotient),
+	                	"0" (eax), "1" (edx));
+				printk("Detected %ld Hz processor.\n", cpu_hz);
+			}
 		}
 	}
 
diff -urN linux-2.2.3-pre3/drivers/block/nbd.c linux/drivers/block/nbd.c
--- linux-2.2.3-pre3/drivers/block/nbd.c	Wed Dec 16 13:38:18 1998
+++ linux/drivers/block/nbd.c	Mon Dec  3 18:34:22 2001
@@ -17,6 +17,7 @@
  * 97-4-11 Making protocol independent of endianity etc.
  * 97-9-13 Cosmetic changes
  * 98-5-13 Attempt to make 64-bit-clean on 64-bit machines
+ * 99-1-11 Attempt to make 64-bit-clean on 32-bit machines <ankry@mif.pg.gda.pl>
  *
  * possible FIXME: make set_sock / set_blksize / set_size / do_it one syscall
  * why not: would need verify_area and friends, would share yet another 
@@ -45,8 +46,9 @@
 #define LO_MAGIC 0x68797548
 
 static int nbd_blksizes[MAX_NBD];
+static int nbd_blksize_bits[MAX_NBD];
 static int nbd_sizes[MAX_NBD];
-static int nbd_bytesizes[MAX_NBD];
+static u64 nbd_bytesizes[MAX_NBD];
 
 static struct nbd_device nbd_dev[MAX_NBD];
 
@@ -149,7 +151,7 @@
 	DEBUG("NBD: sending control, ");
 	request.magic = htonl(NBD_REQUEST_MAGIC);
 	request.type = htonl(req->cmd);
-	request.from = cpu_to_be64( (u64) req->sector * (u64) 512);
+	request.from = cpu_to_be64( (u64) req->sector << 9);
 	request.len = htonl(req->current_nr_sectors << 9);
 	memcpy(request.handle, &req, sizeof(req));
 
@@ -340,7 +342,7 @@
 		     unsigned int cmd, unsigned long arg)
 {
 	struct nbd_device *lo;
-	int dev, error;
+	int dev, error, temp;
 
 	/* Anyone capable of this syscall can do *real bad* things */
 
@@ -355,6 +357,7 @@
 	lo = &nbd_dev[dev];
 	switch (cmd) {
 	case NBD_CLEAR_SOCK:
+		nbd_clear_que(lo);
 		if (lo->head || lo->tail) {
 			printk(KERN_ERR "nbd: Some requests are in progress -> can not turn off.\n");
 			return -EBUSY;
@@ -380,14 +383,25 @@
 		}
 		return error;
 	case NBD_SET_BLKSIZE:
-		if ((arg & 511) || (arg > PAGE_SIZE))
+		if ((arg & (arg-1)) || (arg < 512) || (arg > PAGE_SIZE))
 			return -EINVAL;
 		nbd_blksizes[dev] = arg;
-		nbd_sizes[dev] = arg/nbd_blksizes[dev];
+		temp = arg >> 9;
+		nbd_blksize_bits[dev] = 9;
+		while (temp > 1) {
+			nbd_blksize_bits[dev]++;
+			temp >>= 1;
+		}
+		nbd_sizes[dev] = nbd_bytesizes[dev] >> nbd_blksize_bits[dev];
+		nbd_bytesizes[dev] = nbd_sizes[dev] << nbd_blksize_bits[dev];
 		return 0;
 	case NBD_SET_SIZE:
-		nbd_bytesizes[dev] = arg;
-		nbd_sizes[dev] = arg/nbd_blksizes[dev];
+		nbd_sizes[dev] = arg >> nbd_blksize_bits[dev];
+		nbd_bytesizes[dev] = nbd_sizes[dev] << nbd_blksize_bits[dev];
+		return 0;
+	case NBD_SET_SIZE_BLOCKS:
+		nbd_sizes[dev] = arg;
+		nbd_bytesizes[dev] = arg << nbd_blksize_bits[dev];
 		return 0;
 	case NBD_DO_IT:
 		if (!lo->file)
@@ -404,7 +418,7 @@
 		return 0;
 #endif
 	case BLKGETSIZE:
-		return put_user(nbd_bytesizes[dev]/512, (long *) arg);
+		return put_user(nbd_bytesizes[dev] << 9, (long *) arg);
 	}
 	return -EINVAL;
 }
@@ -420,6 +434,7 @@
 	if (dev >= MAX_NBD)
 		return -ENODEV;
 	fsync_dev(inode->i_rdev);
+	invalidate_buffers(inode->i_rdev);
 	lo = &nbd_dev[dev];
 	if (lo->refcnt <= 0)
 		printk(KERN_ALERT "nbd_release: refcount(%d) <= 0\n", lo->refcnt);
@@ -478,8 +493,9 @@
 		nbd_dev[i].magic = LO_MAGIC;
 		nbd_dev[i].flags = 0;
 		nbd_blksizes[i] = 1024;
-		nbd_bytesizes[i] = 0x7fffffff;
-		nbd_sizes[i] = nbd_bytesizes[i]/nbd_blksizes[i];
+		nbd_blksize_bits[i] = 10;
+		nbd_bytesizes[i] = 0x7ffffc00; /* 2GB */
+		nbd_sizes[i] = nbd_bytesizes[i] >> nbd_blksize_bits[i];
 	}
 	return 0;
 }
diff -urN linux-2.2.3-pre3/drivers/char/bttv.c linux/drivers/char/bttv.c
--- linux-2.2.3-pre3/drivers/char/bttv.c	Mon Dec  3 18:34:05 2001
+++ linux/drivers/char/bttv.c	Mon Dec  3 18:34:22 2001
@@ -1558,7 +1558,6 @@
 static void bttv_close(struct video_device *dev)
 {
 	struct bttv *btv=(struct bttv *)dev;
-	unsigned long f;
 	
 	btv->user--;
 	audio(btv, AUDIO_INTERN);
@@ -1580,6 +1579,7 @@
 	 *	which is more than sufficient to be sure.
 	 */
 	 
+	current->state = TASK_UNINTERRUPTIBLE;
 	schedule_timeout(HZ/10);	/* Wait 1/10th of a second */
 	
 	/*
diff -urN linux-2.2.3-pre3/drivers/video/fbcon.c linux/drivers/video/fbcon.c
--- linux-2.2.3-pre3/drivers/video/fbcon.c	Mon Dec  3 18:34:05 2001
+++ linux/drivers/video/fbcon.c	Mon Dec  3 18:34:22 2001
@@ -1317,10 +1317,19 @@
     struct fb_info *info = p->fb_info;
 
     if (softback_top) {
+    	int l = fbcon_softback_size / conp->vc_size_row;
 	if (softback_lines)
 	    fbcon_set_origin(conp);
         softback_top = softback_curr = softback_in = softback_buf;
         softback_lines = 0;
+
+	if (l > 5)
+	    softback_end = softback_buf + l * conp->vc_size_row;
+	else {
+	    /* Smaller scrollback makes no sense, and 0 would screw
+	       the operation totally */
+	    softback_top = 0;
+	}
     }
     if (logo_shown >= 0) {
     	struct vc_data *conp2 = vc_cons[logo_shown].d;
@@ -1620,9 +1629,6 @@
     int h = op->height;
     int size = h;
     int i, k;
-#ifndef CONFIG_FBCON_FONTWIDTH8_ONLY
-    int j;
-#endif
     u8 *new_data, *data = op->data, *p;
 
 #ifdef CONFIG_FBCON_FONTWIDTH8_ONLY
@@ -1878,7 +1884,6 @@
     		    	q -= conp->vc_size_row;
     		    	scr_memcpyw((u16 *)q, (u16 *)p, conp->vc_size_row);
     		    }
-    		    softback_lines -= i;
     		    softback_in = p;
     		    update_region(unit, conp->vc_origin, logo_lines * conp->vc_cols);
     		}
diff -urN linux-2.2.3-pre3/fs/proc/array.c linux/fs/proc/array.c
--- linux-2.2.3-pre3/fs/proc/array.c	Thu Jan 28 10:08:53 1999
+++ linux/fs/proc/array.c	Mon Dec  3 18:34:22 2001
@@ -1343,6 +1343,7 @@
 {
 	struct task_struct *p;
 	uid_t euid=0;	/* Save the euid keep the lock short */
+	int ok = 0;
 		
 	read_lock(&tasklist_lock);
 	
@@ -1352,9 +1353,11 @@
 	 */
 	
 	p = find_task_by_pid(pid);
-	if(p)
-	{
+	if (p) {
 		euid=p->euid;
+		ok = p->dumpable;
+		if(!cap_issubset(p->cap_permitted, current->cap_permitted))
+			ok=0;			
 		if(!p->mm)	/* Scooby scooby doo where are you ? */
 			p=NULL;
 	}
@@ -1374,7 +1377,7 @@
 		case PROC_PID_CPU:
 			return 0;	
 	}
-	if(capable(CAP_DAC_OVERRIDE) || current->fsuid == euid)
+	if(capable(CAP_DAC_OVERRIDE) || (current->fsuid == euid && ok))
 		return 0;
 	return 1;
 }
diff -urN linux-2.2.3-pre3/include/linux/filter.h linux/include/linux/filter.h
--- linux-2.2.3-pre3/include/linux/filter.h	Mon Dec  3 18:34:05 2001
+++ linux/include/linux/filter.h	Mon Dec  3 18:34:22 2001
@@ -26,8 +26,8 @@
 
 struct sock_fprog	/* Required for SO_ATTACH_FILTER. */
 {
-        unsigned int         	len;	/* Number of filter blocks */
-        struct sock_filter     *filter;
+	unsigned short		len;	/* Number of filter blocks */
+	struct sock_filter	*filter;
 };
 
 #ifdef __KERNEL__
diff -urN linux-2.2.3-pre3/include/linux/nbd.h linux/include/linux/nbd.h
--- linux-2.2.3-pre3/include/linux/nbd.h	Thu Sep 17 09:16:28 1998
+++ linux/include/linux/nbd.h	Mon Dec  3 18:34:22 2001
@@ -8,6 +8,7 @@
 #define NBD_CLEAR_SOCK	_IO( 0xab, 4 )
 #define NBD_CLEAR_QUE	_IO( 0xab, 5 )
 #define NBD_PRINT_DEBUG	_IO( 0xab, 6 )
+#define NBD_SET_SIZE_BLOCKS	_IO( 0xab, 7 )
 
 #ifdef MAJOR_NR
 
@@ -60,13 +61,21 @@
 #define NBD_REPLY_MAGIC 0x67446698
 /* Do *not* use magics: 0x12560953 0x96744668. */
 
+/*
+ * This is packet used for communication between client and
+ * server. All data are in network byte order.
+ */
 struct nbd_request {
 	u32 magic;
 	u32 type;	/* == READ || == WRITE 	*/
 	char handle[8];
 	u64 from;
 	u32 len;
-};
+}
+#ifdef __GNUC__
+	__attribute__ ((packed))
+#endif
+;
 
 struct nbd_reply {
 	u32 magic;
diff -urN linux-2.2.3-pre3/mm/mmap.c linux/mm/mmap.c
--- linux-2.2.3-pre3/mm/mmap.c	Mon Dec  3 18:34:06 2001
+++ linux/mm/mmap.c	Mon Dec  3 18:34:22 2001
@@ -607,7 +607,7 @@
 		return -EINVAL;
 
 	if ((len = PAGE_ALIGN(len)) == 0)
-		return 0;
+		return -EINVAL;
 
 	/* Check if this memory area is ok - put it on the temporary
 	 * list if so..  The checks here are pretty simple --
