diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/MAINTAINERS linux.24rc2/MAINTAINERS
--- linux.vanilla/MAINTAINERS	Wed Sep 18 15:23:16 2002
+++ linux.24rc2/MAINTAINERS	Mon Dec 16 18:55:15 2002
@@ -691,19 +691,14 @@
 S:	Maintained
 
 NETWORKING [GENERAL]
-P:	Networking Teak
+P:	Networking Team
 M:	netdev@oss.sgi.com
 L:	linux-net@vger.kernel.org
-W:	http://www.uk.linux.org/NetNews.html (2.0 only)
 S:	Maintained
 
 NETWORKING [IPv4/IPv6]
-P:	David S. Miller
-M:	davem@redhat.com
-P:	Andi Kleen
-M:	ak@muc.de
-P:	Alexey Kuznetsov
-M:	kuznet@ms2.inr.ac.ru
+P:	James Morris
+M:	jmorris@intercode.com.au
 L:	netdev@oss.sgi.com
 S:	Maintained
 
diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/Makefile linux.24rc2/Makefile
--- linux.vanilla/Makefile	Mon Dec 16 18:19:26 2002
+++ linux.24rc2/Makefile	Thu Dec 19 13:40:09 2002
@@ -1,7 +1,7 @@
 VERSION = 2
 PATCHLEVEL = 2
-SUBLEVEL = 23
-EXTRAVERSION = 
+SUBLEVEL = 24
+EXTRAVERSION = -rc2
 
 ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/)
 
diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/arch/i386/kernel/setup.c linux.24rc2/arch/i386/kernel/setup.c
--- linux.vanilla/arch/i386/kernel/setup.c	Wed Sep 18 15:23:16 2002
+++ linux.24rc2/arch/i386/kernel/setup.c	Thu Dec 19 18:52:36 2002
@@ -1378,8 +1378,9 @@
 			return;
 	
 		case X86_VENDOR_AMD:
-			init_amd(c);
-			return;
+			if(init_amd(c))
+				return;
+			break;
 
 		case X86_VENDOR_CENTAUR:
 			init_centaur(c);
diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/char/pms.c linux.24rc2/drivers/char/pms.c
--- linux.vanilla/drivers/char/pms.c	Sun Mar 25 17:31:26 2001
+++ linux.24rc2/drivers/char/pms.c	Mon Dec 16 19:00:27 2002
@@ -619,7 +619,7 @@
 }
 
 
-static int pms_capture(struct pms_device *dev, char *buf, int rgb555, int count)
+static int pms_capture(struct pms_device *dev, char *buf, int rgb555, unsigned long count)
 {
 	int y;
 	int dw = 2*dev->width;
diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/net/lance.c linux.24rc2/drivers/net/lance.c
--- linux.vanilla/drivers/net/lance.c	Sun Mar 25 17:37:34 2001
+++ linux.24rc2/drivers/net/lance.c	Mon Dec 16 18:59:20 2002
@@ -1174,7 +1174,6 @@
 {
 	int ioaddr = dev->base_addr;
 	struct lance_private *lp = (struct lance_private *)dev->priv;
-	int i;
 
 	dev->start = 0;
 	dev->tbusy = 1;
diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/drivers/net/starfire.c linux.24rc2/drivers/net/starfire.c
--- linux.vanilla/drivers/net/starfire.c	Fri Aug 30 14:49:10 2002
+++ linux.24rc2/drivers/net/starfire.c	Thu Dec 19 18:52:38 2002
@@ -1046,25 +1046,22 @@
 {
 	struct netdev_private *np = dev->priv;
 	long ioaddr = dev->base_addr;
+	int old_debug;
 
 	printk(KERN_WARNING "%s: Transmit timed out, status %8.8x,"
 	       " resetting...\n", dev->name, (int)readl(ioaddr + IntrStatus));
 
-#ifndef __alpha__
-	{
-		int i;
-		printk(KERN_DEBUG "  Rx ring %p: ", np->rx_ring);
-		for (i = 0; i < RX_RING_SIZE; i++)
-			printk(" %8.8x", (unsigned int)le32_to_cpu(np->rx_ring[i].rxaddr));
-		printk("\n"KERN_DEBUG"  Tx ring %p: ", np->tx_ring);
-		for (i = 0; i < TX_RING_SIZE; i++)
-			printk(" %4.4x", le32_to_cpu(np->tx_ring[i].status));
-		printk("\n");
-	}
-#endif
-
 	/* Perhaps we should reinitialize the hardware here. */
-	/* Stop and restart the chip's Tx processes . */
+
+	/*
+	 * Stop and restart the chip's Tx processes.
+	 * Cheat and increase the debug level temporarily.
+	 */
+	old_debug = debug;
+	debug = 2;
+	netdev_close(dev);
+	netdev_open(dev);
+	debug = old_debug;
 
 	/* Trigger an immediate transmit demand. */
 
@@ -1933,6 +1930,8 @@
 	writel(0, ioaddr + IntrEnable);
 
 	/* Stop the chip's Tx and Rx processes. */
+	writel(0, ioaddr + GenCtrl);
+	readl(ioaddr + GenCtrl);
 
 #ifdef __i386__
 	if (debug > 2) {
diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/pipe.c linux.24rc2/fs/pipe.c
--- linux.vanilla/fs/pipe.c	Sun Mar 25 17:30:58 2001
+++ linux.24rc2/fs/pipe.c	Mon Dec 16 18:56:34 2002
@@ -105,9 +105,17 @@
 	else
 		free = 1; /* can't do it atomically, wait for any free space */
 	up(&inode->i_sem);
-	if (down_interruptible(&inode->i_atomic_write)) {
-		down(&inode->i_sem);
-		return -ERESTARTSYS;
+	if (filp->f_flags & O_NONBLOCK) {
+		if (down_trylock(&inode->i_atomic_write)) {
+			down(&inode->i_sem);
+			return -ERESTARTSYS;
+		}
+	}
+	else {
+		if (down_interruptible(&inode->i_atomic_write)) {
+			down(&inode->i_sem);
+			return -ERESTARTSYS;
+		}
 	}
 	while (count>0) {
 		while ((PIPE_FREE(*inode) < free) || PIPE_LOCK(*inode)) {
diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/fs/proc/mem.c linux.24rc2/fs/proc/mem.c
--- linux.vanilla/fs/proc/mem.c	Fri Nov  2 16:39:08 2001
+++ linux.24rc2/fs/proc/mem.c	Mon Dec 16 19:03:21 2002
@@ -209,113 +209,6 @@
 	return offset;
 }
 
-/*
- * This isn't really reliable by any means..
- */
-int mem_mmap(struct file * file, struct vm_area_struct * vma)
-{
-	struct task_struct *tsk;
-	pgd_t *src_dir, *dest_dir;
-	pmd_t *src_middle, *dest_middle;
-	pte_t *src_table, *dest_table;
-	unsigned long stmp, dtmp, mapnr;
-	struct vm_area_struct *src_vma = NULL;
-	struct inode *inode = file->f_dentry->d_inode;
-	
-	/* Get the source's task information */
-
-	tsk = get_task(inode->i_ino >> 16);
-
-	if (!tsk)
-		return -ESRCH;
-
-	/* Ensure that we have a valid source area.  (Has to be mmap'ed and
-	 have valid page information.)  We can't map shared memory at the
-	 moment because working out the vm_area_struct & nattach stuff isn't
-	 worth it. */
-
-	src_vma = tsk->mm->mmap;
-	stmp = vma->vm_offset;
-	while (stmp < vma->vm_offset + (vma->vm_end - vma->vm_start)) {
-		while (src_vma && stmp > src_vma->vm_end)
-			src_vma = src_vma->vm_next;
-		if (!src_vma || (src_vma->vm_flags & VM_SHM))
-			return -EINVAL;
-
-		src_dir = pgd_offset(tsk->mm, stmp);
-		if (pgd_none(*src_dir))
-			return -EINVAL;
-		if (pgd_bad(*src_dir)) {
-			printk("Bad source page dir entry %08lx\n", pgd_val(*src_dir));
-			return -EINVAL;
-		}
-		src_middle = pmd_offset(src_dir, stmp);
-		if (pmd_none(*src_middle))
-			return -EINVAL;
-		if (pmd_bad(*src_middle)) {
-			printk("Bad source page middle entry %08lx\n", pmd_val(*src_middle));
-			return -EINVAL;
-		}
-		src_table = pte_offset(src_middle, stmp);
-		if (pte_none(*src_table))
-			return -EINVAL;
-
-		if (stmp < src_vma->vm_start) {
-			if (!(src_vma->vm_flags & VM_GROWSDOWN))
-				return -EINVAL;
-			if (src_vma->vm_end - stmp > current->rlim[RLIMIT_STACK].rlim_cur)
-				return -EINVAL;
-		}
-		stmp += PAGE_SIZE;
-	}
-
-	src_vma = tsk->mm->mmap;
-	stmp    = vma->vm_offset;
-	dtmp    = vma->vm_start;
-
-	flush_cache_range(vma->vm_mm, vma->vm_start, vma->vm_end);
-	flush_cache_range(src_vma->vm_mm, src_vma->vm_start, src_vma->vm_end);
-	while (dtmp < vma->vm_end) {
-		while (src_vma && stmp > src_vma->vm_end)
-			src_vma = src_vma->vm_next;
-
-		src_dir = pgd_offset(tsk->mm, stmp);
-		src_middle = pmd_offset(src_dir, stmp);
-		src_table = pte_offset(src_middle, stmp);
-
-		dest_dir = pgd_offset(current->mm, dtmp);
-		dest_middle = pmd_alloc(dest_dir, dtmp);
-		if (!dest_middle)
-			return -ENOMEM;
-		dest_table = pte_alloc(dest_middle, dtmp);
-		if (!dest_table)
-			return -ENOMEM;
-
-		if (!pte_present(*src_table)) {
-			if (handle_mm_fault(tsk, src_vma, stmp, 1) < 0)
-				return -ENOMEM;
-		}
-
-		if ((vma->vm_flags & VM_WRITE) && !pte_write(*src_table)) {
-			if (handle_mm_fault(tsk, src_vma, stmp, 1) < 0)
-				return -ENOMEM;
-		}
-
-		set_pte(src_table, pte_mkdirty(*src_table));
-		set_pte(dest_table, *src_table);
-		mapnr = MAP_NR(pte_page(*src_table));
-		if (mapnr < max_mapnr)
-			atomic_inc(&mem_map[MAP_NR(pte_page(*src_table))].count);
-
-		stmp += PAGE_SIZE;
-		dtmp += PAGE_SIZE;
-	}
-
-	flush_tlb_range(vma->vm_mm, vma->vm_start, vma->vm_end);
-	flush_tlb_range(src_vma->vm_mm, src_vma->vm_start, src_vma->vm_end);
-	return 0;
-}
-
 static struct file_operations proc_mem_operations = {
 	mem_lseek,
 	mem_read,
@@ -323,7 +216,7 @@
 	NULL,		/* mem_readdir */
 	NULL,		/* mem_poll */
 	NULL,		/* mem_ioctl */
-	mem_mmap,	/* mmap */
+	NULL,		/* mmap */
 	NULL,		/* no special open code */
 	NULL,		/* flush */
 	NULL,		/* no special release code */
diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla/include/linux/skbuff.h linux.24rc2/include/linux/skbuff.h
--- linux.vanilla/include/linux/skbuff.h	Sun Mar 25 17:31:03 2001
+++ linux.24rc2/include/linux/skbuff.h	Mon Dec 16 19:14:54 2002
@@ -564,7 +564,12 @@
 	headroom = (headroom+15)&~15;
 
 	if ((unsigned)skb_headroom(skb) < headroom || skb_cloned(skb)) {
-		struct sk_buff *skb2 = skb_realloc_headroom(skb, headroom);
+		struct sk_buff *skb2;
+		
+		if ((unsigned)skb_headroom(skb) < headroom)
+			skb2 = skb_realloc_headroom(skb, headroom);
+		else
+			skb2 = skb_copy(skb, GFP_ATOMIC);
 		kfree_skb(skb);
 		skb = skb2;
 	}
