Whamcloud - gitweb
landing b_cmobd_merge on HEAD
[fs/lustre-release.git] / lustre / kernel_patches / patches / uml-patch-2.4.24-1.patch
@@ -1795,7 +1795,7 @@ diff -Naur -X ../exclude-files orig/arch/um/drivers/chan_user.c um/arch/um/drive
 + */
 diff -Naur -X ../exclude-files orig/arch/um/drivers/cow.h um/arch/um/drivers/cow.h
 --- orig/arch/um/drivers/cow.h 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/cow.h   2003-12-15 00:32:23.000000000 -0500
++++ um/arch/um/drivers/cow.h   2004-01-16 03:45:20.000000000 -0500
 @@ -0,0 +1,41 @@
 +#ifndef __COW_H__
 +#define __COW_H__
@@ -1840,7 +1840,7 @@ diff -Naur -X ../exclude-files orig/arch/um/drivers/cow.h um/arch/um/drivers/cow
 + */
 diff -Naur -X ../exclude-files orig/arch/um/drivers/cow_kern.c um/arch/um/drivers/cow_kern.c
 --- orig/arch/um/drivers/cow_kern.c    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/cow_kern.c      2003-10-21 03:26:06.000000000 -0400
++++ um/arch/um/drivers/cow_kern.c      2004-01-10 05:55:04.000000000 -0500
 @@ -0,0 +1,630 @@
 +#define COW_MAJOR 60
 +#define MAJOR_NR COW_MAJOR
@@ -1874,7 +1874,7 @@ diff -Naur -X ../exclude-files orig/arch/um/drivers/cow_kern.c um/arch/um/driver
 +      unsigned long *bitmap;
 +      unsigned long bitmap_len;
 +      int bitmap_offset;
-+        int data_offset;
++      int data_offset;
 +      devfs_handle_t devfs;
 +      struct semaphore sem;
 +      struct semaphore io_sem;
@@ -1925,10 +1925,10 @@ diff -Naur -X ../exclude-files orig/arch/um/drivers/cow_kern.c um/arch/um/driver
 +static int cow_revalidate(kdev_t rdev);
 +
 +static struct block_device_operations cow_blops = {
-+        .open         = cow_open,
-+        .release      = cow_release,
-+        .ioctl                = cow_ioctl,
-+        .revalidate   = cow_revalidate,
++      .open           = cow_open,
++      .release        = cow_release,
++      .ioctl          = cow_ioctl,
++      .revalidate     = cow_revalidate,
 +};
 +
 +/* Initialized in an initcall, and unchanged thereafter */
@@ -2526,7 +2526,7 @@ diff -Naur -X ../exclude-files orig/arch/um/drivers/cow_sys.h um/arch/um/drivers
 + */
 diff -Naur -X ../exclude-files orig/arch/um/drivers/cow_user.c um/arch/um/drivers/cow_user.c
 --- orig/arch/um/drivers/cow_user.c    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/cow_user.c      2003-11-08 06:29:47.000000000 -0500
++++ um/arch/um/drivers/cow_user.c      2004-01-10 05:56:22.000000000 -0500
 @@ -0,0 +1,375 @@
 +#include <stddef.h>
 +#include <string.h>
@@ -2691,7 +2691,7 @@ diff -Naur -X ../exclude-files orig/arch/um/drivers/cow_user.c um/arch/um/driver
 +int write_cow_header(char *cow_file, int fd, char *backing_file, 
 +                   int sectorsize, int alignment, long long *size)
 +{
-+        struct cow_header_v3 *header;
++      struct cow_header_v3 *header;
 +      unsigned long modtime;
 +      int err;
 +
@@ -3708,8 +3708,8 @@ diff -Naur -X ../exclude-files orig/arch/um/drivers/harddog_user.c um/arch/um/dr
 + */
 diff -Naur -X ../exclude-files orig/arch/um/drivers/hostaudio_kern.c um/arch/um/drivers/hostaudio_kern.c
 --- orig/arch/um/drivers/hostaudio_kern.c      1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/hostaudio_kern.c        2003-11-10 00:04:23.000000000 -0500
-@@ -0,0 +1,339 @@
++++ um/arch/um/drivers/hostaudio_kern.c        2004-02-12 05:46:22.000000000 -0500
+@@ -0,0 +1,352 @@
 +/* 
 + * Copyright (C) 2002 Steve Schmidtke 
 + * Licensed under the GPL
@@ -3717,7 +3717,6 @@ diff -Naur -X ../exclude-files orig/arch/um/drivers/hostaudio_kern.c um/arch/um/
 +
 +#include "linux/config.h"
 +#include "linux/module.h"
-+#include "linux/version.h"
 +#include "linux/init.h"
 +#include "linux/slab.h"
 +#include "linux/fs.h"
@@ -3726,7 +3725,18 @@ diff -Naur -X ../exclude-files orig/arch/um/drivers/hostaudio_kern.c um/arch/um/
 +#include "asm/uaccess.h"
 +#include "kern_util.h"
 +#include "init.h"
-+#include "hostaudio.h"
++#include "os.h"
++
++struct hostaudio_state {
++      int fd;
++};
++
++struct hostmixer_state {
++      int fd;
++};
++
++#define HOSTAUDIO_DEV_DSP "/dev/sound/dsp"
++#define HOSTAUDIO_DEV_MIXER "/dev/sound/mixer"
 +
 +/* Only changed from linux_main at boot time */
 +char *dsp = HOSTAUDIO_DEV_DSP;
@@ -3784,7 +3794,7 @@ diff -Naur -X ../exclude-files orig/arch/um/drivers/hostaudio_kern.c um/arch/um/
 +      if(kbuf == NULL)
 +              return(-ENOMEM);
 +
-+        err = hostaudio_read_user(state, kbuf, count, ppos);
++      err = os_read_file(state->fd, kbuf, count);
 +      if(err < 0)
 +              goto out;
 +
@@ -3815,9 +3825,10 @@ diff -Naur -X ../exclude-files orig/arch/um/drivers/hostaudio_kern.c um/arch/um/
 +      if(copy_from_user(kbuf, buffer, count))
 +              goto out;
 +
-+        err = hostaudio_write_user(state, kbuf, count, ppos);
++      err = os_write_file(state->fd, kbuf, count);
 +      if(err < 0)
 +              goto out;
++      *ppos += err;
 +
 + out:
 +      kfree(kbuf);
@@ -3860,7 +3871,7 @@ diff -Naur -X ../exclude-files orig/arch/um/drivers/hostaudio_kern.c um/arch/um/
 +              break;
 +      }
 +
-+        err = hostaudio_ioctl_user(state, cmd, (unsigned long) &data);
++      err = os_ioctl_generic(state->fd, cmd, (unsigned long) &data);
 +
 +      switch(cmd){
 +      case SNDCTL_DSP_SPEED:
@@ -3890,17 +3901,19 @@ diff -Naur -X ../exclude-files orig/arch/um/drivers/hostaudio_kern.c um/arch/um/
 +#endif
 +
 +        state = kmalloc(sizeof(struct hostaudio_state), GFP_KERNEL);
-+        if(state == NULL) return(-ENOMEM);
++        if(state == NULL) 
++              return(-ENOMEM);
 +
 +        if(file->f_mode & FMODE_READ) r = 1;
 +        if(file->f_mode & FMODE_WRITE) w = 1;
 +
-+        ret = hostaudio_open_user(state, r, w, dsp);
++      ret = os_open_file(dsp, of_set_rw(OPENFLAGS(), r, w), 0);
 +        if(ret < 0){
 +              kfree(state);
 +              return(ret);
 +        }
 +
++      state->fd = ret;
 +        file->private_data = state;
 +        return(0);
 +}
@@ -3908,16 +3921,15 @@ diff -Naur -X ../exclude-files orig/arch/um/drivers/hostaudio_kern.c um/arch/um/
 +static int hostaudio_release(struct inode *inode, struct file *file)
 +{
 +        struct hostaudio_state *state = file->private_data;
-+        int ret;
 +
 +#ifdef DEBUG
 +        printk("hostaudio: release called\n");
 +#endif
 +
-+        ret = hostaudio_release_user(state);
++      os_close_file(state->fd);
 +        kfree(state);
 +
-+        return(ret);
++        return(0);
 +}
 +
 +/* /dev/mixer file operations */
@@ -3931,7 +3943,7 @@ diff -Naur -X ../exclude-files orig/arch/um/drivers/hostaudio_kern.c um/arch/um/
 +        printk("hostmixer: ioctl called\n");
 +#endif
 +
-+        return(hostmixer_ioctl_mixdev_user(state, cmd, arg));
++      return(os_ioctl_generic(state->fd, cmd, arg));
 +}
 +
 +static int hostmixer_open_mixdev(struct inode *inode, struct file *file)
@@ -3950,9 +3962,11 @@ diff -Naur -X ../exclude-files orig/arch/um/drivers/hostaudio_kern.c um/arch/um/
 +        if(file->f_mode & FMODE_READ) r = 1;
 +        if(file->f_mode & FMODE_WRITE) w = 1;
 +
-+        ret = hostmixer_open_mixdev_user(state, r, w, mixer);
++      ret = os_open_file(mixer, of_set_rw(OPENFLAGS(), r, w), 0);
 +        
 +        if(ret < 0){
++              printk("hostaudio_open_mixdev failed to open '%s', err = %d\n",
++                     dsp, -ret);
 +              kfree(state);
 +              return(ret);
 +        }
@@ -3964,16 +3978,15 @@ diff -Naur -X ../exclude-files orig/arch/um/drivers/hostaudio_kern.c um/arch/um/
 +static int hostmixer_release(struct inode *inode, struct file *file)
 +{
 +        struct hostmixer_state *state = file->private_data;
-+      int ret;
 +
 +#ifdef DEBUG
 +        printk("hostmixer: release called\n");
 +#endif
 +
-+        ret = hostmixer_release_mixdev_user(state);
++      os_close_file(state->fd);
 +        kfree(state);
 +
-+        return(ret);
++        return(0);
 +}
 +
 +
@@ -4049,144 +4062,6 @@ diff -Naur -X ../exclude-files orig/arch/um/drivers/hostaudio_kern.c um/arch/um/
 + * c-file-style: "linux"
 + * End:
 + */
-diff -Naur -X ../exclude-files orig/arch/um/drivers/hostaudio_user.c um/arch/um/drivers/hostaudio_user.c
---- orig/arch/um/drivers/hostaudio_user.c      1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/hostaudio_user.c        2003-10-21 03:26:06.000000000 -0400
-@@ -0,0 +1,134 @@
-+/* 
-+ * Copyright (C) 2002 Steve Schmidtke 
-+ * Licensed under the GPL
-+ */
-+
-+#include <sys/types.h>
-+#include <unistd.h>
-+#include <errno.h>
-+#include "hostaudio.h"
-+#include "user_util.h"
-+#include "kern_util.h"
-+#include "user.h"
-+#include "os.h"
-+
-+/* /dev/dsp file operations */
-+
-+ssize_t hostaudio_read_user(struct hostaudio_state *state, char *buffer, 
-+                          size_t count, loff_t *ppos)
-+{
-+#ifdef DEBUG
-+        printk("hostaudio: read_user called, count = %d\n", count);
-+#endif
-+
-+        return(os_read_file(state->fd, buffer, count));
-+}
-+
-+ssize_t hostaudio_write_user(struct hostaudio_state *state, const char *buffer,
-+                           size_t count, loff_t *ppos)
-+{
-+      ssize_t ret;
-+
-+#ifdef DEBUG
-+        printk("hostaudio: write_user called, count = %d\n", count);
-+#endif
-+
-+        return(os_write_file(state->fd, buffer, count));
-+
-+        return(ret);
-+}
-+
-+int hostaudio_ioctl_user(struct hostaudio_state *state, unsigned int cmd, 
-+                       unsigned long arg)
-+{
-+#ifdef DEBUG
-+        printk("hostaudio: ioctl_user called, cmd = %u\n", cmd);
-+#endif
-+
-+        return(os_ioctl_generic(state->fd, cmd, arg));
-+}
-+
-+int hostaudio_open_user(struct hostaudio_state *state, int r, int w, char *dsp)
-+{
-+#ifdef DEBUG
-+        printk("hostaudio: open_user called\n");
-+#endif
-+
-+        state->fd = os_open_file(dsp, of_set_rw(OPENFLAGS(), r, w), 0);
-+
-+        if(state->fd < 0) {
-+              printk("hostaudio_open_user failed to open '%s', err = %d\n",
-+                     dsp, -state->fd);
-+              return(state->fd); 
-+      }
-+        
-+      return(0);
-+}
-+
-+int hostaudio_release_user(struct hostaudio_state *state)
-+{
-+#ifdef DEBUG
-+        printk("hostaudio: release called\n");
-+#endif
-+        if(state->fd >= 0){
-+              os_close_file(state->fd);
-+              state->fd = -1;
-+        }
-+
-+        return(0);
-+}
-+
-+/* /dev/mixer file operations */
-+
-+int hostmixer_ioctl_mixdev_user(struct hostmixer_state *state, 
-+                              unsigned int cmd, unsigned long arg)
-+{
-+#ifdef DEBUG
-+        printk("hostmixer: ioctl_user called cmd = %u\n",cmd);
-+#endif
-+
-+      return(os_ioctl_generic(state->fd, cmd, arg));
-+}
-+
-+int hostmixer_open_mixdev_user(struct hostmixer_state *state, int r, int w,
-+                             char *mixer)
-+{
-+#ifdef DEBUG
-+        printk("hostmixer: open_user called\n");
-+#endif
-+
-+        state->fd = os_open_file(mixer, of_set_rw(OPENFLAGS(), r, w), 0);
-+
-+        if(state->fd < 0) {
-+              printk("hostaudio_open_mixdev_user failed to open '%s', "
-+                     "err = %d\n", mixer, state->fd);
-+              return(state->fd); 
-+      }
-+        
-+      return(0);
-+}
-+
-+int hostmixer_release_mixdev_user(struct hostmixer_state *state)
-+{
-+#ifdef DEBUG
-+        printk("hostmixer: release_user called\n");
-+#endif
-+
-+        if(state->fd >= 0){
-+              os_close_file(state->fd);
-+              state->fd = -1;
-+        }
-+
-+        return 0;
-+}
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
 diff -Naur -X ../exclude-files orig/arch/um/drivers/line.c um/arch/um/drivers/line.c
 --- orig/arch/um/drivers/line.c        1969-12-31 19:00:00.000000000 -0500
 +++ um/arch/um/drivers/line.c  2003-11-07 03:03:57.000000000 -0500
@@ -4803,7 +4678,7 @@ diff -Naur -X ../exclude-files orig/arch/um/drivers/line.c um/arch/um/drivers/li
 + */
 diff -Naur -X ../exclude-files orig/arch/um/drivers/Makefile um/arch/um/drivers/Makefile
 --- orig/arch/um/drivers/Makefile      1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/Makefile        2003-11-08 09:58:54.000000000 -0500
++++ um/arch/um/drivers/Makefile        2004-02-12 03:55:08.000000000 -0500
 @@ -0,0 +1,97 @@
 +# 
 +# Copyright (C) 2000, 2002, 2003 Jeff Dike (jdike@karaya.com)
@@ -4825,7 +4700,7 @@ diff -Naur -X ../exclude-files orig/arch/um/drivers/Makefile um/arch/um/drivers/
 +pcap-libs := -lpcap -L/usr/lib
 +net-objs := net_kern.o net_user.o
 +mconsole-objs := mconsole_kern.o mconsole_user.o
-+hostaudio-objs := hostaudio_kern.o hostaudio_user.o
++hostaudio-objs := hostaudio_kern.o
 +ubd-objs := ubd_kern.o ubd_user.o
 +port-objs := port_kern.o port_user.o
 +harddog-objs := harddog_kern.o harddog_user.o
@@ -5268,8 +5143,8 @@ diff -Naur -X ../exclude-files orig/arch/um/drivers/mcast_user.c um/arch/um/driv
 + */
 diff -Naur -X ../exclude-files orig/arch/um/drivers/mconsole_kern.c um/arch/um/drivers/mconsole_kern.c
 --- orig/arch/um/drivers/mconsole_kern.c       1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/mconsole_kern.c 2003-10-21 03:26:06.000000000 -0400
-@@ -0,0 +1,561 @@
++++ um/arch/um/drivers/mconsole_kern.c 2004-02-12 03:09:12.000000000 -0500
+@@ -0,0 +1,560 @@
 +/*
 + * Copyright (C) 2001 Lennert Buytenhek (buytenh@gnu.org)
 + * Copyright (C) 2001 - 2003 Jeff Dike (jdike@addtoit.com)
@@ -5384,8 +5259,7 @@ diff -Naur -X ../exclude-files orig/arch/um/drivers/mconsole_kern.c um/arch/um/d
 +      int len;
 +      char *ptr = req->request.data;
 +      
-+      ptr += strlen("log");
-+      while(isspace(*ptr)) ptr++;
++      ptr += strlen("log ");
 +
 +      len = req->len - (ptr - req->request.data);
 +      printk("%.*s", len, ptr);
@@ -5657,8 +5531,8 @@ diff -Naur -X ../exclude-files orig/arch/um/drivers/mconsole_kern.c um/arch/um/d
 +      ptr += strlen("sysrq");
 +      while(isspace(*ptr)) ptr++;
 +
-+      handle_sysrq(*ptr, &current->thread.regs, NULL, NULL);
 +      mconsole_reply(req, "", 0, 0);
++      handle_sysrq(*ptr, &current->thread.regs, NULL, NULL);
 +}
 +#else
 +void mconsole_sysrq(struct mc_request *req)
@@ -7745,7 +7619,7 @@ diff -Naur -X ../exclude-files orig/arch/um/drivers/port.h um/arch/um/drivers/po
 + */
 diff -Naur -X ../exclude-files orig/arch/um/drivers/port_kern.c um/arch/um/drivers/port_kern.c
 --- orig/arch/um/drivers/port_kern.c   1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/port_kern.c     2003-10-21 03:26:06.000000000 -0400
++++ um/arch/um/drivers/port_kern.c     2004-01-10 06:18:49.000000000 -0500
 @@ -0,0 +1,303 @@
 +/* 
 + * Copyright (C) 2001, 2002 Jeff Dike (jdike@karaya.com)
@@ -7970,7 +7844,7 @@ diff -Naur -X ../exclude-files orig/arch/um/drivers/port_kern.c um/arch/um/drive
 +      int fd;
 +
 +      while(1){
-+              if(down_interruptible(&port->sem)) 
++              if(down_interruptible(&port->sem))
 +                      return(-ERESTARTSYS);
 +
 +              spin_lock(&port->lock);
@@ -9348,8 +9222,8 @@ diff -Naur -X ../exclude-files orig/arch/um/drivers/slirp_user.c um/arch/um/driv
 + */
 diff -Naur -X ../exclude-files orig/arch/um/drivers/ssl.c um/arch/um/drivers/ssl.c
 --- orig/arch/um/drivers/ssl.c 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/ssl.c   2003-11-08 02:57:02.000000000 -0500
-@@ -0,0 +1,306 @@
++++ um/arch/um/drivers/ssl.c   2004-01-10 06:20:17.000000000 -0500
+@@ -0,0 +1,300 @@
 +/* 
 + * Copyright (C) 2000, 2002 Jeff Dike (jdike@karaya.com)
 + * Licensed under the GPL
@@ -9582,12 +9456,6 @@ diff -Naur -X ../exclude-files orig/arch/um/drivers/ssl.c um/arch/um/drivers/ssl
 +
 +static kdev_t ssl_console_device(struct console *c)
 +{
-+#if 0 /* This is the 2.5 implementation */
-+static struct tty_driver *ssl_console_device(struct console *c, int *index)
-+      *index = c->index;
-+      return ssl_driver;
-+#endif
-+
 +      return mk_kdev(TTY_MAJOR, c->index);
 +}
 +
@@ -10062,8 +9930,8 @@ diff -Naur -X ../exclude-files orig/arch/um/drivers/tty.c um/arch/um/drivers/tty
 + */
 diff -Naur -X ../exclude-files orig/arch/um/drivers/ubd_kern.c um/arch/um/drivers/ubd_kern.c
 --- orig/arch/um/drivers/ubd_kern.c    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/ubd_kern.c      2003-12-17 10:48:17.000000000 -0500
-@@ -0,0 +1,1390 @@
++++ um/arch/um/drivers/ubd_kern.c      2004-01-21 01:28:43.000000000 -0500
+@@ -0,0 +1,1396 @@
 +/* 
 + * Copyright (C) 2000 Jeff Dike (jdike@karaya.com)
 + * Licensed under the GPL
@@ -10543,7 +10411,7 @@ diff -Naur -X ../exclude-files orig/arch/um/drivers/ubd_kern.c um/arch/um/driver
 +                      printk("ubd_handler - physmem_subst_mapping failed, "
 +                             "err = %d\n", -err);
 +      }
-+      
++
 +      spin_lock(&io_request_lock);
 +      ubd_finish(req.error);
 +      reactivate_fd(thread_fd, UBD_IRQ);      
@@ -10799,12 +10667,17 @@ diff -Naur -X ../exclude-files orig/arch/um/drivers/ubd_kern.c um/arch/um/driver
 +
 +static void ubd_close(struct ubd *dev)
 +{
++      if(ubd_do_mmap)
++              physmem_forget_descriptor(dev->fd);
 +      os_close_file(dev->fd);
-+      if(dev->cow.file != NULL) {
-+              os_close_file(dev->cow.fd);
-+              vfree(dev->cow.bitmap);
-+              dev->cow.bitmap = NULL;
-+      }
++      if(dev->cow.file != NULL)
++              return;
++
++      if(ubd_do_mmap)
++              physmem_forget_descriptor(dev->cow.fd);
++      os_close_file(dev->cow.fd);
++      vfree(dev->cow.bitmap);
++      dev->cow.bitmap = NULL;
 +}
 +
 +static int ubd_open_dev(struct ubd *dev)
@@ -10847,7 +10720,8 @@ diff -Naur -X ../exclude-files orig/arch/um/drivers/ubd_kern.c um/arch/um/driver
 +              err = read_cow_bitmap(dev->fd, dev->cow.bitmap, 
 +                                    dev->cow.bitmap_offset, 
 +                                    dev->cow.bitmap_len);
-+              if(err < 0) goto error;
++              if(err < 0) 
++                      goto error;
 +
 +              flags = dev->openflags;
 +              flags.w = 0;
@@ -11456,8 +11330,8 @@ diff -Naur -X ../exclude-files orig/arch/um/drivers/ubd_kern.c um/arch/um/driver
 + */
 diff -Naur -X ../exclude-files orig/arch/um/drivers/ubd_user.c um/arch/um/drivers/ubd_user.c
 --- orig/arch/um/drivers/ubd_user.c    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/drivers/ubd_user.c      2003-11-08 07:57:49.000000000 -0500
-@@ -0,0 +1,378 @@
++++ um/arch/um/drivers/ubd_user.c      2004-01-10 06:24:52.000000000 -0500
+@@ -0,0 +1,377 @@
 +/* 
 + * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
 + * Copyright (C) 2001 Ridgerun,Inc (glonnon@ridgerun.com)
@@ -11473,7 +11347,6 @@ diff -Naur -X ../exclude-files orig/arch/um/drivers/ubd_user.c um/arch/um/driver
 +#include <netinet/in.h>
 +#include <sys/time.h>
 +#include <sys/socket.h>
-+#include <string.h>
 +#include <sys/mman.h>
 +#include <sys/param.h>
 +#include "asm/types.h"
@@ -11521,7 +11394,7 @@ diff -Naur -X ../exclude-files orig/arch/um/drivers/ubd_user.c um/arch/um/driver
 +      int err;
 +
 +      err = os_file_modtime(file, &modtime);
-+      if(err < 0){
++      if(err < 0){
 +              printk("Failed to get modification time of backing file "
 +                     "\"%s\", err = %d\n", file, -err);
 +              return(err);
@@ -11571,17 +11444,17 @@ diff -Naur -X ../exclude-files orig/arch/um/drivers/ubd_user.c um/arch/um/driver
 +      __u64 size;
 +      __u32 version, align;
 +      char *backing_file;
-+        int fd, err, sectorsize, same, mode = 0644;
++      int fd, err, sectorsize, same, mode = 0644;
 +
-+        fd = os_open_file(file, *openflags, mode);
-+        if(fd < 0){
++      fd = os_open_file(file, *openflags, mode);
++      if(fd < 0){
 +              if((fd == -ENOENT) && (create_cow_out != NULL))
 +                      *create_cow_out = 1;
 +                if(!openflags->w ||
 +                   ((errno != EROFS) && (errno != EACCES))) return(-errno);
 +              openflags->w = 0;
-+                fd = os_open_file(file, *openflags, mode); 
-+                if(fd < 0) 
++              fd = os_open_file(file, *openflags, mode); 
++              if(fd < 0) 
 +                      return(fd);
 +        }
 +
@@ -12155,8 +12028,8 @@ diff -Naur -X ../exclude-files orig/arch/um/drivers/xterm_kern.c um/arch/um/driv
 + */
 diff -Naur -X ../exclude-files orig/arch/um/dyn_link.ld.in um/arch/um/dyn_link.ld.in
 --- orig/arch/um/dyn_link.ld.in        1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/dyn_link.ld.in  2003-10-21 03:26:06.000000000 -0400
-@@ -0,0 +1,172 @@
++++ um/arch/um/dyn_link.ld.in  2004-01-10 04:28:44.000000000 -0500
+@@ -0,0 +1,171 @@
 +OUTPUT_FORMAT("ELF_FORMAT")
 +OUTPUT_ARCH(ELF_ARCH)
 +ENTRY(_start)
@@ -12167,7 +12040,6 @@ diff -Naur -X ../exclude-files orig/arch/um/dyn_link.ld.in um/arch/um/dyn_link.l
 +{
 +  . = START() + SIZEOF_HEADERS;
 +  .interp         : { *(.interp) }
-+  . = ALIGN(4096);
 +  __binary_start = .;
 +  . = ALIGN(4096);            /* Init code and data */
 +  _stext = .;
@@ -13764,8 +13636,8 @@ diff -Naur -X ../exclude-files orig/arch/um/fs/hostfs/Makefile um/arch/um/fs/hos
 +      $(CC) $(CFLAGS_$@) $(USER_CFLAGS) -c -o $@ $<
 diff -Naur -X ../exclude-files orig/arch/um/fs/hppfs/hppfs_kern.c um/arch/um/fs/hppfs/hppfs_kern.c
 --- orig/arch/um/fs/hppfs/hppfs_kern.c 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/fs/hppfs/hppfs_kern.c   2003-11-08 09:42:49.000000000 -0500
-@@ -0,0 +1,727 @@
++++ um/arch/um/fs/hppfs/hppfs_kern.c   2004-01-08 23:35:58.000000000 -0500
+@@ -0,0 +1,737 @@
 +/* 
 + * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
 + * Licensed under the GPL
@@ -13928,6 +13800,8 @@ diff -Naur -X ../exclude-files orig/arch/um/fs/hppfs/hppfs_kern.c um/arch/um/fs/
 +      ssize_t n;
 +
 +      read = file->f_dentry->d_inode->i_fop->read;
++      if(read == NULL)
++              return(-EOPNOTSUPP);
 +
 +      if(!is_user)
 +              set_fs(KERNEL_DS);
@@ -14026,6 +13900,8 @@ diff -Naur -X ../exclude-files orig/arch/um/fs/hppfs/hppfs_kern.c um/arch/um/fs/
 +      int err;
 +
 +      write = proc_file->f_dentry->d_inode->i_fop->write;
++      if(write == NULL)
++              return(-EOPNOTSUPP);
 +
 +      proc_file->f_pos = file->f_pos;
 +      err = (*write)(proc_file, buf, len, &proc_file->f_pos);
@@ -14278,6 +14154,8 @@ diff -Naur -X ../exclude-files orig/arch/um/fs/hppfs/hppfs_kern.c um/arch/um/fs/
 +      int err;
 +
 +      readdir = proc_file->f_dentry->d_inode->i_fop->readdir;
++      if(readdir == NULL)
++              return(-EOPNOTSUPP);
 +
 +      proc_file->f_pos = file->f_pos;
 +      err = (*readdir)(proc_file, &dirent, hppfs_filldir);
@@ -14336,6 +14214,8 @@ diff -Naur -X ../exclude-files orig/arch/um/fs/hppfs/hppfs_kern.c um/arch/um/fs/
 +              return(err);
 +
 +      readlink = proc_dentry->d_inode->i_op->readlink;
++      if(readlink == NULL)
++              return(-EOPNOTSUPP);
 +      n = (*readlink)(proc_dentry, buffer, buflen);
 +
 +      if(proc_file.f_op->release)
@@ -14357,6 +14237,8 @@ diff -Naur -X ../exclude-files orig/arch/um/fs/hppfs/hppfs_kern.c um/arch/um/fs/
 +              return(err);
 +
 +      follow_link = proc_dentry->d_inode->i_op->follow_link;
++      if(follow_link == NULL)
++              return(-EOPNOTSUPP);
 +      n = (*follow_link)(proc_dentry, nd);
 +
 +      if(proc_file.f_op->release)
@@ -14893,58 +14775,6 @@ diff -Naur -X ../exclude-files orig/arch/um/include/helper.h um/arch/um/include/
 + * c-file-style: "linux"
 + * End:
 + */
-diff -Naur -X ../exclude-files orig/arch/um/include/hostaudio.h um/arch/um/include/hostaudio.h
---- orig/arch/um/include/hostaudio.h   1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/hostaudio.h     2003-10-21 03:26:06.000000000 -0400
-@@ -0,0 +1,48 @@
-+/* 
-+ * Copyright (C) 2002 Steve Schmidtke 
-+ * Licensed under the GPL
-+ */
-+
-+#ifndef HOSTAUDIO_H
-+#define HOSTAUDIO_H
-+
-+#define HOSTAUDIO_DEV_DSP "/dev/sound/dsp"
-+#define HOSTAUDIO_DEV_MIXER "/dev/sound/mixer"
-+
-+struct hostaudio_state {
-+  int fd;
-+};
-+
-+struct hostmixer_state {
-+  int fd;
-+};
-+
-+/* UML user-side protoypes */
-+extern ssize_t hostaudio_read_user(struct hostaudio_state *state, char *buffer,
-+                                 size_t count, loff_t *ppos);
-+extern ssize_t hostaudio_write_user(struct hostaudio_state *state, 
-+                                  const char *buffer, size_t count, 
-+                                  loff_t *ppos);
-+extern int hostaudio_ioctl_user(struct hostaudio_state *state, 
-+                              unsigned int cmd, unsigned long arg);
-+extern int hostaudio_open_user(struct hostaudio_state *state, int r, int w, 
-+                             char *dsp);
-+extern int hostaudio_release_user(struct hostaudio_state *state);
-+extern int hostmixer_ioctl_mixdev_user(struct hostmixer_state *state, 
-+                              unsigned int cmd, unsigned long arg);
-+extern int hostmixer_open_mixdev_user(struct hostmixer_state *state, int r, 
-+                                    int w, char *mixer);
-+extern int hostmixer_release_mixdev_user(struct hostmixer_state *state);
-+
-+#endif /* HOSTAUDIO_H */
-+
-+/*
-+ * Overrides for Emacs so that we follow Linus's tabbing style.
-+ * Emacs will notice this stuff at the end of the file and automatically
-+ * adjust the settings for this buffer only.  This must remain at the end
-+ * of the file.
-+ * ---------------------------------------------------------------------------
-+ * Local variables:
-+ * c-file-style: "linux"
-+ * End:
-+ */
 diff -Naur -X ../exclude-files orig/arch/um/include/init.h um/arch/um/include/init.h
 --- orig/arch/um/include/init.h        1969-12-31 19:00:00.000000000 -0500
 +++ um/arch/um/include/init.h  2003-10-21 03:26:06.000000000 -0400
@@ -15631,8 +15461,8 @@ diff -Naur -X ../exclude-files orig/arch/um/include/mconsole_kern.h um/arch/um/i
 + */
 diff -Naur -X ../exclude-files orig/arch/um/include/mem.h um/arch/um/include/mem.h
 --- orig/arch/um/include/mem.h 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/mem.h   2003-10-21 03:26:06.000000000 -0400
-@@ -0,0 +1,28 @@
++++ um/arch/um/include/mem.h   2004-01-16 11:14:38.000000000 -0500
+@@ -0,0 +1,29 @@
 +/* 
 + * Copyright (C) 2002, 2003 Jeff Dike (jdike@addtoit.com)
 + * Licensed under the GPL
@@ -15648,6 +15478,7 @@ diff -Naur -X ../exclude-files orig/arch/um/include/mem.h um/arch/um/include/mem
 +extern int physmem_subst_mapping(void *virt, int fd, __u64 offset, int w);
 +extern int is_remapped(void *virt);
 +extern int physmem_remove_mapping(void *virt);
++extern void physmem_forget_descriptor(int fd);
 +
 +#endif
 +
@@ -15697,8 +15528,8 @@ diff -Naur -X ../exclude-files orig/arch/um/include/mem_kern.h um/arch/um/includ
 + */
 diff -Naur -X ../exclude-files orig/arch/um/include/mem_user.h um/arch/um/include/mem_user.h
 --- orig/arch/um/include/mem_user.h    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/mem_user.h      2003-12-14 11:16:03.000000000 -0500
-@@ -0,0 +1,82 @@
++++ um/arch/um/include/mem_user.h      2004-01-10 00:11:06.000000000 -0500
+@@ -0,0 +1,81 @@
 +/*
 + * arch/um/include/mem_user.h
 + *
@@ -15750,7 +15581,6 @@ diff -Naur -X ../exclude-files orig/arch/um/include/mem_user.h um/arch/um/includ
 +extern unsigned long host_task_size;
 +extern unsigned long task_size;
 +
-+extern void check_devanon(void);
 +extern int init_mem_user(void);
 +extern int create_mem_file(unsigned long len);
 +extern void setup_memory(void *entry);
@@ -16425,8 +16255,8 @@ diff -Naur -X ../exclude-files orig/arch/um/include/syscall_user.h um/arch/um/in
 + */
 diff -Naur -X ../exclude-files orig/arch/um/include/sysdep-i386/checksum.h um/arch/um/include/sysdep-i386/checksum.h
 --- orig/arch/um/include/sysdep-i386/checksum.h        1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/sysdep-i386/checksum.h  2003-10-21 03:26:06.000000000 -0400
-@@ -0,0 +1,217 @@
++++ um/arch/um/include/sysdep-i386/checksum.h  2004-01-13 23:40:05.000000000 -0500
+@@ -0,0 +1,218 @@
 +/* 
 + * Licensed under the GPL
 + */
@@ -16435,6 +16265,7 @@ diff -Naur -X ../exclude-files orig/arch/um/include/sysdep-i386/checksum.h um/ar
 +#define __UM_SYSDEP_CHECKSUM_H
 +
 +#include "linux/string.h"
++#include "asm/uaccess.h"
 +
 +/*
 + * computes the checksum of a memory block at buff, length len,
@@ -16489,7 +16320,7 @@ diff -Naur -X ../exclude-files orig/arch/um/include/sysdep-i386/checksum.h um/ar
 +
 +/*
 + * These are the old (and unsafe) way of doing checksums, a warning message 
-+ * will be printed if they are used and an exeption occurs.
++ * will be printed if they are used and an exception occurs.
 + *
 + * these functions should go away after some time.
 + */
@@ -16752,7 +16583,7 @@ diff -Naur -X ../exclude-files orig/arch/um/include/sysdep-i386/frame_kern.h um/
 + */
 diff -Naur -X ../exclude-files orig/arch/um/include/sysdep-i386/frame_user.h um/arch/um/include/sysdep-i386/frame_user.h
 --- orig/arch/um/include/sysdep-i386/frame_user.h      1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/include/sysdep-i386/frame_user.h        2003-10-21 03:26:06.000000000 -0400
++++ um/arch/um/include/sysdep-i386/frame_user.h        2004-01-14 03:54:47.000000000 -0500
 @@ -0,0 +1,91 @@
 +/* 
 + * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
@@ -16812,26 +16643,26 @@ diff -Naur -X ../exclude-files orig/arch/um/include/sysdep-i386/frame_user.h um/
 + * it would have to be __builtin_frame_address(1).
 + */
 +
-+static inline unsigned long frame_restorer(void)
-+{
-+      unsigned long *fp;
-+
-+      fp = __builtin_frame_address(0);
-+      return((unsigned long) (fp + 1));
-+}
++#define frame_restorer() \
++({ \
++      unsigned long *fp; \
++\
++      fp = __builtin_frame_address(0); \
++      ((unsigned long) (fp + 1)); \
++})
 +
 +/* Similarly, this returns the value of sp when the handler was first
 + * entered.  This is used to calculate the proper sp when delivering
 + * signals.
 + */
 +
-+static inline unsigned long frame_sp(void)
-+{
-+      unsigned long *fp;
-+
-+      fp = __builtin_frame_address(0);
-+      return((unsigned long) (fp + 1));
-+}
++#define frame_sp() \
++({ \
++      unsigned long *fp; \
++\
++      fp = __builtin_frame_address(0); \
++      ((unsigned long) (fp + 1)); \
++})
 +
 +#endif
 +
@@ -20543,8 +20374,8 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/irq_user.c um/arch/um/kernel/
 + */
 diff -Naur -X ../exclude-files orig/arch/um/kernel/ksyms.c um/arch/um/kernel/ksyms.c
 --- orig/arch/um/kernel/ksyms.c        1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/ksyms.c  2003-12-17 03:22:37.000000000 -0500
-@@ -0,0 +1,119 @@
++++ um/arch/um/kernel/ksyms.c  2004-01-23 00:44:09.000000000 -0500
+@@ -0,0 +1,120 @@
 +/* 
 + * Copyright (C) 2001 - 2003 Jeff Dike (jdike@addtoit.com)
 + * Licensed under the GPL
@@ -20626,6 +20457,7 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/ksyms.c um/arch/um/kernel/ksy
 +EXPORT_SYMBOL(os_create_unix_socket);
 +EXPORT_SYMBOL(os_connect_socket);
 +EXPORT_SYMBOL(os_accept_connection);
++EXPORT_SYMBOL(os_ioctl_generic);
 +EXPORT_SYMBOL(os_rcv_fd);
 +EXPORT_SYMBOL(run_helper);
 +EXPORT_SYMBOL(start_thread);
@@ -20743,7 +20575,7 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/Makefile um/arch/um/kernel/Ma
 +archmrproper: clean
 diff -Naur -X ../exclude-files orig/arch/um/kernel/mem.c um/arch/um/kernel/mem.c
 --- orig/arch/um/kernel/mem.c  1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/mem.c    2003-11-13 23:26:35.000000000 -0500
++++ um/arch/um/kernel/mem.c    2003-12-22 01:25:00.000000000 -0500
 @@ -0,0 +1,336 @@
 +/* 
 + * Copyright (C) 2000 - 2003 Jeff Dike (jdike@addtoit.com)
@@ -20828,7 +20660,7 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/mem.c um/arch/um/kernel/mem.c
 +      start = (unsigned long) &__binary_start;
 +      if(uml_physmem != start){
 +              map_memory(uml_physmem, __pa(uml_physmem), start - uml_physmem,
-+                  1, 1, 0);
++                         1, 1, 0);
 +      }
 +
 +      /* this will put all low memory onto the freelists */
@@ -20874,7 +20706,7 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/mem.c um/arch/um/kernel/mem.c
 +      }
 +}
 +
-+#if CONFIG_HIGHMEM
++#ifdef CONFIG_HIGHMEM
 +pte_t *kmap_pte;
 +pgprot_t kmap_prot;
 +
@@ -21083,8 +20915,8 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/mem.c um/arch/um/kernel/mem.c
 + */
 diff -Naur -X ../exclude-files orig/arch/um/kernel/mem_user.c um/arch/um/kernel/mem_user.c
 --- orig/arch/um/kernel/mem_user.c     1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/mem_user.c       2003-12-14 11:30:57.000000000 -0500
-@@ -0,0 +1,217 @@
++++ um/arch/um/kernel/mem_user.c       2004-01-10 00:19:09.000000000 -0500
+@@ -0,0 +1,216 @@
 +/*
 + * arch/um/kernel/mem_user.c
 + *
@@ -21170,9 +21002,7 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/mem_user.c um/arch/um/kernel/
 +      return(fd);
 +}
 +
-+static int have_devanon = 0;
-+
-+void check_devanon(void)
++static int have_devanon(void)
 +{
 +      int fd;
 +
@@ -21180,11 +21010,11 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/mem_user.c um/arch/um/kernel/
 +      fd = open("/dev/anon", O_RDWR);
 +      if(fd < 0){
 +              printk("Not available (open failed with errno %d)\n", errno);
-+              return;
++              return(0);
 +      }
 +
 +      printk("OK\n");
-+      have_devanon = 1;
++      return(1);
 +}
 +
 +static int create_anon_file(unsigned long len)
@@ -21212,7 +21042,7 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/mem_user.c um/arch/um/kernel/
 +{
 +      int err, fd;
 +
-+      if(have_devanon)
++      if(have_devanon())
 +              fd = create_anon_file(len);
 +      else fd = create_tmp_file(len);
 +
@@ -21245,6 +21075,7 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/mem_user.c um/arch/um/kernel/
 +              os_print_error(fd, "parse_iomem - Couldn't open io file");
 +              goto out;
 +      }
++
 +      err = os_stat_fd(fd, &buf);
 +      if(err < 0){
 +              os_print_error(err, "parse_iomem - cannot stat_fd file");
@@ -21314,8 +21145,8 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/mprot.h um/arch/um/kernel/mpr
 +#endif
 diff -Naur -X ../exclude-files orig/arch/um/kernel/physmem.c um/arch/um/kernel/physmem.c
 --- orig/arch/um/kernel/physmem.c      1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/physmem.c        2003-11-14 02:59:20.000000000 -0500
-@@ -0,0 +1,349 @@
++++ um/arch/um/kernel/physmem.c        2004-01-16 23:38:02.000000000 -0500
+@@ -0,0 +1,446 @@
 +/* 
 + * Copyright (C) 2000 - 2003 Jeff Dike (jdike@addtoit.com)
 + * Licensed under the GPL
@@ -21349,6 +21180,7 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/physmem.c um/arch/um/kernel/p
 +      __u64 offset;
 +      void *virt;
 +      unsigned long phys;
++      struct list_head list;
 +};
 +
 +struct virtmem_table virtmem_hash;
@@ -21367,16 +21199,59 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/physmem.c um/arch/um/kernel/p
 +DEF_HASH(static, virtmem, struct phys_desc, virt_ptrs, void *, virt, virt_cmp, 
 +       virt_hash);
 +
++LIST_HEAD(descriptor_mappings);
++
++struct desc_mapping {
++      int fd;
++      struct list_head list;
++      struct list_head pages;
++};
++
++static struct desc_mapping *find_mapping(int fd)
++{
++      struct desc_mapping *desc;
++      struct list_head *ele;
++
++      list_for_each(ele, &descriptor_mappings){
++              desc = list_entry(ele, struct desc_mapping, list);
++              if(desc->fd == fd)
++                      return(desc);
++      }
++
++      return(NULL);
++}
++
++static struct desc_mapping *descriptor_mapping(int fd)
++{
++      struct desc_mapping *desc;
++
++      desc = find_mapping(fd);
++      if(desc != NULL)
++              return(desc);
++
++      desc = kmalloc(sizeof(*desc), GFP_ATOMIC);
++      if(desc == NULL)
++              return(NULL);
++
++      *desc = ((struct desc_mapping) 
++              { .fd =         fd,
++                .list =       LIST_HEAD_INIT(desc->list),
++                .pages =      LIST_HEAD_INIT(desc->pages) });
++      list_add(&desc->list, &descriptor_mappings);
++
++      return(desc);
++}
++
 +int physmem_subst_mapping(void *virt, int fd, __u64 offset, int w)
 +{
++      struct desc_mapping *fd_maps;
 +      struct phys_desc *desc;
 +      unsigned long phys;
 +      int err;
 +
-+      virt = (void *) ((unsigned long) virt & PAGE_MASK);
-+      err = os_map_memory(virt, fd, offset, PAGE_SIZE, 1, w, 0);
-+      if(err)
-+              goto out;
++      fd_maps = descriptor_mapping(fd);
++      if(fd_maps == NULL)
++              return(-ENOMEM);
 +
 +      phys = __pa(virt);
 +      if(find_virtmem_hash(&virtmem_hash, virt) != NULL)
@@ -21387,45 +21262,98 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/physmem.c um/arch/um/kernel/p
 +      if(desc == NULL)
 +              goto out;
 +
-+      *desc = ((struct phys_desc) { .virt_ptrs =      { NULL, NULL },
-+                                    .fd =             fd,
-+                                    .offset =         offset,
-+                                    .virt =           virt,
-+                                    .phys =           __pa(virt) });
++      *desc = ((struct phys_desc) 
++              { .virt_ptrs =  { NULL, NULL },
++                .fd =         fd,
++                .offset =             offset,
++                .virt =               virt,
++                .phys =               __pa(virt),
++                .list =               LIST_HEAD_INIT(desc->list) });
 +      insert_virtmem_hash(&virtmem_hash, desc);
-+      err = 0;
++
++      list_add(&desc->list, &fd_maps->pages);
++
++      virt = (void *) ((unsigned long) virt & PAGE_MASK);
++      err = os_map_memory(virt, fd, offset, PAGE_SIZE, 1, w, 0);
++      if(!err)
++              goto out;
++
++      remove_virtmem_hash(&virtmem_hash, desc);
++      kfree(desc);
 + out:
 +      return(err);
 +}
 +
 +static int physmem_fd = -1;
 +
-+int physmem_remove_mapping(void *virt)
++static void remove_mapping(struct phys_desc *desc)
 +{
-+      struct phys_desc *desc;
++      void *virt = desc->virt;
 +      int err;
 +
-+      virt = (void *) ((unsigned long) virt & PAGE_MASK);
-+      desc = find_virtmem_hash(&virtmem_hash, virt);
-+      if(desc == NULL)
-+              return(0);
-+
 +      remove_virtmem_hash(&virtmem_hash, desc);
++      list_del(&desc->list);
 +      kfree(desc);
 +
 +      err = os_map_memory(virt, physmem_fd, __pa(virt), PAGE_SIZE, 1, 1, 0);
 +      if(err)
 +              panic("Failed to unmap block device page from physical memory, "
 +                    "errno = %d", -err);
++}
++
++int physmem_remove_mapping(void *virt)
++{
++      struct phys_desc *desc;
++
++      virt = (void *) ((unsigned long) virt & PAGE_MASK);
++      desc = find_virtmem_hash(&virtmem_hash, virt);
++      if(desc == NULL)
++              return(0);
++
++      remove_mapping(desc);
 +      return(1);
 +}
 +
++void physmem_forget_descriptor(int fd)
++{
++      struct desc_mapping *desc;
++      struct phys_desc *page;
++      struct list_head *ele, *next;
++      __u64 offset;
++      void *addr;
++      int err;
++
++      desc = find_mapping(fd);
++      if(desc == NULL)
++              return;
++
++      list_for_each_safe(ele, next, &desc->pages){
++              page = list_entry(ele, struct phys_desc, list);
++              offset = page->offset;
++              addr = page->virt;
++              remove_mapping(page);
++              err = os_seek_file(fd, offset);
++              if(err)
++                      panic("physmem_forget_descriptor - failed to seek "
++                            "to %lld in fd %d, error = %d\n",
++                            offset, fd, -err);
++              err = os_read_file(fd, addr, PAGE_SIZE);
++              if(err < 0)
++                      panic("physmem_forget_descriptor - failed to read "
++                            "from fd %d to 0x%p, error = %d\n",
++                            fd, addr, -err);
++      }
++
++      list_del(&desc->list);
++      kfree(desc);
++}
++
 +void arch_free_page(struct page *page, int order)
 +{
 +      void *virt;
 +      int i;
 +
-+      for(i = 0; i < 1 << order; i++){
++      for(i = 0; i < (1 << order); i++){
 +              virt = __va(page_to_phys(page + i));
 +              physmem_remove_mapping(virt);
 +      }
@@ -21667,8 +21595,8 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/physmem.c um/arch/um/kernel/p
 + */
 diff -Naur -X ../exclude-files orig/arch/um/kernel/process.c um/arch/um/kernel/process.c
 --- orig/arch/um/kernel/process.c      1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/process.c        2003-11-07 02:09:21.000000000 -0500
-@@ -0,0 +1,288 @@
++++ um/arch/um/kernel/process.c        2004-01-31 02:47:57.000000000 -0500
+@@ -0,0 +1,289 @@
 +/* 
 + * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
 + * Licensed under the GPL
@@ -21799,7 +21727,8 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/process.c um/arch/um/kernel/p
 +      if(err < 0) panic("Waiting for outer trampoline failed - errno = %d", 
 +                        errno);
 +      if(!WIFSIGNALED(status) || (WTERMSIG(status) != SIGKILL))
-+              panic("outer trampoline didn't exit with SIGKILL");
++              panic("outer trampoline didn't exit with SIGKILL, "
++                    "status = %d", status);
 +
 +      return(arg.pid);
 +}
@@ -21901,7 +21830,7 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/process.c um/arch/um/kernel/p
 +
 +int run_kernel_thread(int (*fn)(void *), void *arg, void **jmp_ptr)
 +{
-+      jmp_buf buf;
++      sigjmp_buf buf;
 +      int n;
 +
 +      *jmp_ptr = &buf;
@@ -24224,8 +24153,8 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/include/skas.h um/arch/u
 + */
 diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/include/uaccess.h um/arch/um/kernel/skas/include/uaccess.h
 --- orig/arch/um/kernel/skas/include/uaccess.h 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/skas/include/uaccess.h   2003-12-17 01:19:45.000000000 -0500
-@@ -0,0 +1,38 @@
++++ um/arch/um/kernel/skas/include/uaccess.h   2004-01-17 06:35:41.000000000 -0500
+@@ -0,0 +1,40 @@
 +/* 
 + * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
 + * Licensed under the GPL
@@ -24234,6 +24163,8 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/include/uaccess.h um/arc
 +#ifndef __SKAS_UACCESS_H
 +#define __SKAS_UACCESS_H
 +
++#include "asm/errno.h"
++
 +#define access_ok_skas(type, addr, size) \
 +      ((segment_eq(get_fs(), KERNEL_DS)) || \
 +       (((unsigned long) (addr) < TASK_SIZE) && \
@@ -24245,8 +24176,6 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/include/uaccess.h um/arc
 +      return(access_ok_skas(type, addr, size) ? 0 : -EFAULT);
 +}
 +
-+#endif
-+
 +extern int copy_from_user_skas(void *to, const void *from, int n);
 +extern int copy_to_user_skas(void *to, const void *from, int n);
 +extern int strncpy_from_user_skas(char *dst, const char *src, int count);
@@ -24254,6 +24183,8 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/include/uaccess.h um/arc
 +extern int clear_user_skas(void *mem, int len);
 +extern int strnlen_user_skas(const void *str, int len);
 +
++#endif
++
 +/*
 + * Overrides for Emacs so that we follow Linus's tabbing style.
 + * Emacs will notice this stuff at the end of the file and automatically
@@ -24494,7 +24425,7 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/mmu.c um/arch/um/kernel/
 + */
 diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/process.c um/arch/um/kernel/skas/process.c
 --- orig/arch/um/kernel/skas/process.c 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/skas/process.c   2003-11-19 03:00:01.000000000 -0500
++++ um/arch/um/kernel/skas/process.c   2004-01-31 02:49:36.000000000 -0500
 @@ -0,0 +1,417 @@
 +/* 
 + * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
@@ -24686,7 +24617,7 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/process.c um/arch/um/ker
 +void new_thread(void *stack, void **switch_buf_ptr, void **fork_buf_ptr,
 +              void (*handler)(int))
 +{
-+      jmp_buf switch_buf, fork_buf;
++      sigjmp_buf switch_buf, fork_buf;
 +
 +      *switch_buf_ptr = &switch_buf;
 +      *fork_buf_ptr = &fork_buf;
@@ -24699,7 +24630,7 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/process.c um/arch/um/ker
 +
 +void thread_wait(void *sw, void *fb)
 +{
-+      jmp_buf buf, **switch_buf = sw, *fork_buf;
++      sigjmp_buf buf, **switch_buf = sw, *fork_buf;
 +
 +      *switch_buf = &buf;
 +      fork_buf = fb;
@@ -24761,23 +24692,23 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/process.c um/arch/um/ker
 +
 +void switch_threads(void *me, void *next)
 +{
-+      jmp_buf my_buf, **me_ptr = me, *next_buf = next;
++      sigjmp_buf my_buf, **me_ptr = me, *next_buf = next;
 +      
 +      *me_ptr = &my_buf;
 +      if(sigsetjmp(my_buf, 1) == 0)
 +              siglongjmp(*next_buf, 1);
 +}
 +
-+static jmp_buf initial_jmpbuf;
++static sigjmp_buf initial_jmpbuf;
 +
 +/* XXX Make these percpu */
 +static void (*cb_proc)(void *arg);
 +static void *cb_arg;
-+static jmp_buf *cb_back;
++static sigjmp_buf *cb_back;
 +
 +int start_idle_thread(void *stack, void *switch_buf_ptr, void **fork_buf_ptr)
 +{
-+      jmp_buf **switch_buf = switch_buf_ptr;
++      sigjmp_buf **switch_buf = switch_buf_ptr;
 +      int n;
 +
 +      *fork_buf_ptr = &initial_jmpbuf;
@@ -24813,7 +24744,7 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/process.c um/arch/um/ker
 +
 +void initial_thread_cb_skas(void (*proc)(void *), void *arg)
 +{
-+      jmp_buf here;
++      sigjmp_buf here;
 +
 +      cb_proc = proc;
 +      cb_arg = arg;
@@ -25115,7 +25046,7 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/process_kern.c um/arch/u
 + */
 diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/syscall_kern.c um/arch/um/kernel/skas/syscall_kern.c
 --- orig/arch/um/kernel/skas/syscall_kern.c    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/skas/syscall_kern.c      2003-10-21 03:26:07.000000000 -0400
++++ um/arch/um/kernel/skas/syscall_kern.c      2004-01-04 08:20:29.000000000 -0500
 @@ -0,0 +1,42 @@
 +/* 
 + * Copyright (C) 2002 - 2003 Jeff Dike (jdike@addtoit.com)
@@ -25142,7 +25073,7 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/syscall_kern.c um/arch/u
 +      nsyscalls++;
 +      syscall = UPT_SYSCALL_NR(&regs->regs);
 +
-+      if((syscall >= NR_syscalls) || (syscall < 0))
++      if((syscall >= NR_syscalls) || (syscall < 1))
 +              res = -ENOSYS;
 +      else res = EXECUTE_SYSCALL(syscall, regs);
 +
@@ -25541,8 +25472,8 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/tlb.c um/arch/um/kernel/
 + */
 diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/trap_user.c um/arch/um/kernel/skas/trap_user.c
 --- orig/arch/um/kernel/skas/trap_user.c       1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/skas/trap_user.c 2003-12-14 11:17:37.000000000 -0500
-@@ -0,0 +1,63 @@
++++ um/arch/um/kernel/skas/trap_user.c 2004-01-21 01:17:05.000000000 -0500
+@@ -0,0 +1,66 @@
 +/* 
 + * Copyright (C) 2002 - 2003 Jeff Dike (jdike@addtoit.com)
 + * Licensed under the GPL
@@ -25564,8 +25495,10 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/trap_user.c um/arch/um/k
 +      struct skas_regs *r;
 +      struct signal_info *info;
 +      int save_errno = errno;
++      int save_user;
 +
 +      r = &TASK_REGS(get_current())->skas;
++      save_user = r->is_user;
 +      r->is_user = 0;
 +      r->fault_addr = SC_FAULT_ADDR(sc);
 +      r->fault_type = SC_FAULT_TYPE(sc);
@@ -25578,6 +25511,7 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/trap_user.c um/arch/um/k
 +      (*info->handler)(sig, (union uml_pt_regs *) r);
 +
 +      errno = save_errno;
++      r->is_user = save_user;
 +}
 +
 +extern int missed_ticks[];
@@ -25608,7 +25542,7 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/trap_user.c um/arch/um/k
 + */
 diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/uaccess.c um/arch/um/kernel/skas/uaccess.c
 --- orig/arch/um/kernel/skas/uaccess.c 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/skas/uaccess.c   2003-11-11 11:11:26.000000000 -0500
++++ um/arch/um/kernel/skas/uaccess.c   2003-12-22 01:30:09.000000000 -0500
 @@ -0,0 +1,217 @@
 +/* 
 + * Copyright (C) 2002 - 2003 Jeff Dike (jdike@addtoit.com)
@@ -25738,7 +25672,7 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/uaccess.c um/arch/um/ker
 +
 +static int strncpy_chunk_from_user(unsigned long from, int len, void *arg)
 +{
-+        char **to_ptr = arg, *to = *to_ptr;
++      char **to_ptr = arg, *to = *to_ptr;
 +      int n;
 +
 +      strncpy(to, (void *) from, len);
@@ -25843,8 +25777,9 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/util/Makefile um/arch/um
 +      $(RM) -f mk_ptregs *.o *~
 diff -Naur -X ../exclude-files orig/arch/um/kernel/skas/util/mk_ptregs.c um/arch/um/kernel/skas/util/mk_ptregs.c
 --- orig/arch/um/kernel/skas/util/mk_ptregs.c  1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/skas/util/mk_ptregs.c    2003-10-21 03:26:07.000000000 -0400
-@@ -0,0 +1,50 @@
++++ um/arch/um/kernel/skas/util/mk_ptregs.c    2003-12-22 01:31:11.000000000 -0500
+@@ -0,0 +1,51 @@
++#include <stdio.h>
 +#include <asm/ptrace.h>
 +#include <asm/user.h>
 +
@@ -26229,7 +26164,7 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/smp.c um/arch/um/kernel/smp.c
 + */
 diff -Naur -X ../exclude-files orig/arch/um/kernel/syscall_kern.c um/arch/um/kernel/syscall_kern.c
 --- orig/arch/um/kernel/syscall_kern.c 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/syscall_kern.c   2003-11-07 01:41:13.000000000 -0500
++++ um/arch/um/kernel/syscall_kern.c   2004-01-10 06:37:46.000000000 -0500
 @@ -0,0 +1,343 @@
 +/* 
 + * Copyright (C) 2000 - 2003 Jeff Dike (jdike@addtoit.com)
@@ -26368,7 +26303,7 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/syscall_kern.c um/arch/um/ker
 +
 +        error = do_pipe(fd);
 +        if (!error) {
-+                if (copy_to_user(fildes, fd, sizeof(fd)))
++              if (copy_to_user(fildes, fd, sizeof(fd)))
 +                        error = -EFAULT;
 +        }
 +        return error;
@@ -27076,7 +27011,7 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/sys_call_table.c um/arch/um/k
 + */
 diff -Naur -X ../exclude-files orig/arch/um/kernel/syscall_user.c um/arch/um/kernel/syscall_user.c
 --- orig/arch/um/kernel/syscall_user.c 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/syscall_user.c   2003-10-21 03:26:07.000000000 -0400
++++ um/arch/um/kernel/syscall_user.c   2003-12-22 01:32:48.000000000 -0500
 @@ -0,0 +1,48 @@
 +/* 
 + * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
@@ -27099,7 +27034,7 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/syscall_user.c um/arch/um/ker
 +int record_syscall_start(int syscall)
 +{
 +      int max, index;
-+      
++
 +      max = sizeof(syscall_record)/sizeof(syscall_record[0]);
 +      index = next_syscall_index(max);
 +
@@ -27230,9 +27165,9 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/sysrq.c um/arch/um/kernel/sys
 + */
 diff -Naur -X ../exclude-files orig/arch/um/kernel/tempfile.c um/arch/um/kernel/tempfile.c
 --- orig/arch/um/kernel/tempfile.c     1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/tempfile.c       2003-10-21 03:26:07.000000000 -0400
++++ um/arch/um/kernel/tempfile.c       2003-12-22 01:33:38.000000000 -0500
 @@ -0,0 +1,82 @@
-+/* 
++/*
 + * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
 + * Licensed under the GPL
 + */
@@ -27316,8 +27251,8 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/tempfile.c um/arch/um/kernel/
 + */
 diff -Naur -X ../exclude-files orig/arch/um/kernel/time.c um/arch/um/kernel/time.c
 --- orig/arch/um/kernel/time.c 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/time.c   2003-12-17 01:08:27.000000000 -0500
-@@ -0,0 +1,164 @@
++++ um/arch/um/kernel/time.c   2004-02-12 07:09:48.000000000 -0500
+@@ -0,0 +1,172 @@
 +/* 
 + * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
 + * Licensed under the GPL
@@ -27402,7 +27337,8 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/time.c um/arch/um/kernel/time
 +static unsigned long long get_host_hz(void)
 +{
 +      char mhzline[16], *end;
-+      int ret, mult, mhz, rest, len;
++      unsigned long long mhz;
++      int ret, mult, rest, len;
 +
 +      ret = cpu_feature("cpu MHz", mhzline, 
 +                        sizeof(mhzline) / sizeof(mhzline[0]));
@@ -27436,6 +27372,13 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/time.c um/arch/um/kernel/time
 +
 +void time_init(void)
 +{
++      /* XXX This is to fill xtime with something real - otherwise by the
++       * time /proc is mounted, no timers have fired, and xtime is still 0,
++       * meaning it shows times of Jan 1 1970.  The real fix is to figure
++       * out why no timers have happened by then.
++       */
++      timer();
++
 +      host_hz = get_host_hz();
 +      if(signal(SIGVTALRM, boot_timer_handler) == SIG_ERR)
 +              panic("Couldn't set SIGVTALRM handler");
@@ -27484,7 +27427,7 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/time.c um/arch/um/kernel/time
 + */
 diff -Naur -X ../exclude-files orig/arch/um/kernel/time_kern.c um/arch/um/kernel/time_kern.c
 --- orig/arch/um/kernel/time_kern.c    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/time_kern.c      2003-12-17 01:07:51.000000000 -0500
++++ um/arch/um/kernel/time_kern.c      2004-02-14 06:51:31.000000000 -0500
 @@ -0,0 +1,205 @@
 +/* 
 + * Copyright (C) 2000 Jeff Dike (jdike@karaya.com)
@@ -27533,17 +27476,17 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/time_kern.c um/arch/um/kernel
 +{
 +      unsigned long long ticks = 0;
 +
-+        if(!timer_irq_inited){
++      if(!timer_irq_inited){
 +              /* This is to ensure that ticks don't pile up when
 +               * the timer handler is suspended */
 +              first_tick = 0;
 +              return;
 +      }
-+      
++
 +      if(first_tick){
 +#if defined(CONFIG_UML_REAL_TIME_CLOCK)
 +              unsigned long long tsc;
-+               /* We've had 1 tick */
++              /* We've had 1 tick */
 +              tsc = time_stamp();
 +
 +              delta += tsc - prev_tsc;
@@ -27777,7 +27720,7 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/tlb.c um/arch/um/kernel/tlb.c
 + */
 diff -Naur -X ../exclude-files orig/arch/um/kernel/trap_kern.c um/arch/um/kernel/trap_kern.c
 --- orig/arch/um/kernel/trap_kern.c    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/trap_kern.c      2003-12-14 11:18:05.000000000 -0500
++++ um/arch/um/kernel/trap_kern.c      2003-12-22 22:48:41.000000000 -0500
 @@ -0,0 +1,220 @@
 +/* 
 + * Copyright (C) 2000, 2001 Jeff Dike (jdike@karaya.com)
@@ -27838,7 +27781,7 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/trap_kern.c um/arch/um/kernel
 +      pgd = pgd_offset(mm, page);
 +      pmd = pmd_offset(pgd, page);
 +      do {
-+      survive:
++ survive:
 +              switch (handle_mm_fault(mm, vma, address, is_write)) {
 +              case 1:
 +                      current->min_flt++;
@@ -28001,7 +27944,7 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/trap_kern.c um/arch/um/kernel
 + */
 diff -Naur -X ../exclude-files orig/arch/um/kernel/trap_user.c um/arch/um/kernel/trap_user.c
 --- orig/arch/um/kernel/trap_user.c    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/trap_user.c      2003-10-21 03:26:07.000000000 -0400
++++ um/arch/um/kernel/trap_user.c      2004-01-31 02:47:39.000000000 -0500
 @@ -0,0 +1,138 @@
 +/* 
 + * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
@@ -28126,7 +28069,7 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/trap_user.c um/arch/um/kernel
 +
 +void do_longjmp(void *b, int val)
 +{
-+      jmp_buf *buf = b;
++      sigjmp_buf *buf = b;
 +
 +      siglongjmp(*buf, val);
 +}
@@ -28998,10 +28941,10 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/Makefile um/arch/um/kernel
 +clean :
 diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/mem.c um/arch/um/kernel/tt/mem.c
 --- orig/arch/um/kernel/tt/mem.c       1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/tt/mem.c 2003-10-21 03:26:07.000000000 -0400
++++ um/arch/um/kernel/tt/mem.c 2004-01-31 02:38:28.000000000 -0500
 @@ -0,0 +1,51 @@
 +/* 
-+ * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
++ * Copyright (C) 2002 - 2004 Jeff Dike (jdike@karaya.com)
 + * Licensed under the GPL
 + */
 +
@@ -29020,7 +28963,7 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/mem.c um/arch/um/kernel/tt
 +      if(!jail || debug)
 +              remap_data(UML_ROUND_DOWN(&_stext), UML_ROUND_UP(&_etext), 1);
 +      remap_data(UML_ROUND_DOWN(&_sdata), UML_ROUND_UP(&_edata), 1);
-+      remap_data(UML_ROUND_DOWN(&__bss_start), UML_ROUND_UP(brk_start), 1);
++      remap_data(UML_ROUND_DOWN(&__bss_start), UML_ROUND_UP(&_end), 1);
 +}
 +
 +#ifdef CONFIG_HOST_2G_2G
@@ -29106,8 +29049,8 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/mem_user.c um/arch/um/kern
 + */
 diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/process_kern.c um/arch/um/kernel/tt/process_kern.c
 --- orig/arch/um/kernel/tt/process_kern.c      1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/tt/process_kern.c        2003-10-21 03:26:07.000000000 -0400
-@@ -0,0 +1,537 @@
++++ um/arch/um/kernel/tt/process_kern.c        2004-01-31 02:39:08.000000000 -0500
+@@ -0,0 +1,535 @@
 +/* 
 + * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
 + * Licensed under the GPL
@@ -29373,14 +29316,12 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/process_kern.c um/arch/um/
 +{
 +      current->thread.request.op = OP_REBOOT;
 +      os_usr1_process(os_getpid());
-+      os_kill_process(os_getpid(), 0);
 +}
 +
 +void halt_tt(void)
 +{
 +      current->thread.request.op = OP_HALT;
 +      os_usr1_process(os_getpid());
-+      os_kill_process(os_getpid(), 0);
 +}
 +
 +void kill_off_processes_tt(void)
@@ -29515,7 +29456,7 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/process_kern.c um/arch/um/
 +      protect_memory(start, end - start, 1, w, 1, 1);
 +
 +      start = (unsigned long) UML_ROUND_DOWN(&__bss_start);
-+      end = (unsigned long) UML_ROUND_UP(brk_start);
++      end = (unsigned long) UML_ROUND_UP(&_end);
 +      protect_memory(start, end - start, 1, w, 1, 1);
 +
 +      mprotect_kernel_vm(w);
@@ -30451,7 +30392,7 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/ptproxy/sysdep.h um/arch/u
 + */
 diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/ptproxy/wait.c um/arch/um/kernel/tt/ptproxy/wait.c
 --- orig/arch/um/kernel/tt/ptproxy/wait.c      1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/tt/ptproxy/wait.c        2003-10-21 03:26:07.000000000 -0400
++++ um/arch/um/kernel/tt/ptproxy/wait.c        2004-01-17 05:27:18.000000000 -0500
 @@ -0,0 +1,88 @@
 +/**********************************************************************
 +wait.c
@@ -30516,7 +30457,7 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/ptproxy/wait.c um/arch/um/
 +      pid = debugger->pid;
 +
 +      ip = ptrace(PTRACE_PEEKUSER, pid, PT_IP_OFFSET, 0);
-+      ip = IP_RESTART_SYSCALL(ip);
++      IP_RESTART_SYSCALL(ip);
 +
 +      if(ptrace(PTRACE_POKEUSER, pid, PT_IP_OFFSET, ip) < 0)
 +              tracer_panic("real_wait_return : Failed to restart system "
@@ -31740,7 +31681,7 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/uaccess.c um/arch/um/kerne
 + */
 diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/uaccess_user.c um/arch/um/kernel/tt/uaccess_user.c
 --- orig/arch/um/kernel/tt/uaccess_user.c      1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/tt/uaccess_user.c        2003-11-12 08:51:13.000000000 -0500
++++ um/arch/um/kernel/tt/uaccess_user.c        2004-01-31 02:48:29.000000000 -0500
 @@ -0,0 +1,98 @@
 +/* 
 + * Copyright (C) 2001 Chris Emerson (cemerson@chiark.greenend.org.uk)
@@ -31816,7 +31757,7 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/tt/uaccess_user.c um/arch/um/
 +      struct tt_regs save = TASK_REGS(get_current())->tt;
 +      int ret;
 +      unsigned long *faddrp = (unsigned long *)fault_addr;
-+      jmp_buf jbuf;
++      sigjmp_buf jbuf;
 +
 +      *fault_catcher = &jbuf;
 +      if(sigsetjmp(jbuf, 1) == 0)
@@ -32109,7 +32050,7 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/tty_log.c um/arch/um/kernel/t
 + */
 diff -Naur -X ../exclude-files orig/arch/um/kernel/uaccess_user.c um/arch/um/kernel/uaccess_user.c
 --- orig/arch/um/kernel/uaccess_user.c 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/uaccess_user.c   2003-10-21 03:26:07.000000000 -0400
++++ um/arch/um/kernel/uaccess_user.c   2004-01-31 02:48:08.000000000 -0500
 @@ -0,0 +1,64 @@
 +/* 
 + * Copyright (C) 2001 Chris Emerson (cemerson@chiark.greenend.org.uk)
@@ -32131,7 +32072,7 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/uaccess_user.c um/arch/um/ker
 +{
 +      unsigned long *faddrp = (unsigned long *) fault_addr, ret;
 +
-+      jmp_buf jbuf;
++      sigjmp_buf jbuf;
 +      *fault_catcher = &jbuf;
 +      if(sigsetjmp(jbuf, 1) == 0){
 +              (*op)(to, from, n);
@@ -32177,8 +32118,8 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/uaccess_user.c um/arch/um/ker
 + */
 diff -Naur -X ../exclude-files orig/arch/um/kernel/um_arch.c um/arch/um/kernel/um_arch.c
 --- orig/arch/um/kernel/um_arch.c      1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/um_arch.c        2003-12-14 11:19:59.000000000 -0500
-@@ -0,0 +1,432 @@
++++ um/arch/um/kernel/um_arch.c        2004-01-10 00:11:09.000000000 -0500
+@@ -0,0 +1,431 @@
 +/* 
 + * Copyright (C) 2000, 2002 Jeff Dike (jdike@karaya.com)
 + * Licensed under the GPL
@@ -32598,7 +32539,6 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/um_arch.c um/arch/um/kernel/u
 +      arch_check_bugs();
 +      check_ptrace();
 +      check_sigio();
-+      check_devanon();
 +}
 +
 +/*
@@ -32613,8 +32553,8 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/um_arch.c um/arch/um/kernel/u
 + */
 diff -Naur -X ../exclude-files orig/arch/um/kernel/umid.c um/arch/um/kernel/umid.c
 --- orig/arch/um/kernel/umid.c 1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/umid.c   2003-10-21 03:26:07.000000000 -0400
-@@ -0,0 +1,324 @@
++++ um/arch/um/kernel/umid.c   2004-01-26 10:13:01.000000000 -0500
+@@ -0,0 +1,327 @@
 +/* 
 + * Copyright (C) 2001, 2002 Jeff Dike (jdike@karaya.com)
 + * Licensed under the GPL
@@ -32822,12 +32762,15 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/umid.c um/arch/um/kernel/umid
 +                      printf("Failed to malloc uml_dir - error = %d\n",
 +                             errno);
 +                      uml_dir = name;
++                      /* Return 0 here because do_initcalls doesn't look at
++                       * the return value.
++                       */
 +                      return(0);
 +              }
 +              sprintf(uml_dir, "%s/", name);
 +      }
 +      else uml_dir = name;
-+      return 0;
++      return(0);
 +}
 +
 +static int __init make_uml_dir(void)
@@ -32941,8 +32884,8 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/umid.c um/arch/um/kernel/umid
 + */
 diff -Naur -X ../exclude-files orig/arch/um/kernel/user_syms.c um/arch/um/kernel/user_syms.c
 --- orig/arch/um/kernel/user_syms.c    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/kernel/user_syms.c      2003-10-21 03:26:07.000000000 -0400
-@@ -0,0 +1,116 @@
++++ um/arch/um/kernel/user_syms.c      2004-01-23 00:44:09.000000000 -0500
+@@ -0,0 +1,118 @@
 +#include <stdio.h>
 +#include <unistd.h>
 +#include <dirent.h>
@@ -33057,6 +33000,8 @@ diff -Naur -X ../exclude-files orig/arch/um/kernel/user_syms.c um/arch/um/kernel
 +
 +EXPORT_SYMBOL(memset);
 +EXPORT_SYMBOL(strstr);
++EXPORT_SYMBOL(strlen);
++EXPORT_SYMBOL(printf);
 +
 +EXPORT_SYMBOL(find_iomem);
 diff -Naur -X ../exclude-files orig/arch/um/kernel/user_util.c um/arch/um/kernel/user_util.c
@@ -33327,8 +33272,8 @@ diff -Naur -X ../exclude-files orig/arch/um/link.ld.in um/arch/um/link.ld.in
 +}
 diff -Naur -X ../exclude-files orig/arch/um/main.c um/arch/um/main.c
 --- orig/arch/um/main.c        1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/main.c  2003-10-21 03:26:07.000000000 -0400
-@@ -0,0 +1,198 @@
++++ um/arch/um/main.c  2004-01-29 00:48:42.000000000 -0500
+@@ -0,0 +1,199 @@
 +/* 
 + * Copyright (C) 2000, 2001 Jeff Dike (jdike@karaya.com)
 + * Licensed under the GPL
@@ -33479,6 +33424,7 @@ diff -Naur -X ../exclude-files orig/arch/um/main.c um/arch/um/main.c
 +      /* Reboot */
 +      if(ret){
 +              printf("\n");
++
 +              execvp(new_argv[0], new_argv);
 +              perror("Failed to exec kernel");
 +              ret = 1;
@@ -33529,7 +33475,7 @@ diff -Naur -X ../exclude-files orig/arch/um/main.c um/arch/um/main.c
 + */
 diff -Naur -X ../exclude-files orig/arch/um/Makefile um/arch/um/Makefile
 --- orig/arch/um/Makefile      1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/Makefile        2003-12-17 03:02:28.000000000 -0500
++++ um/arch/um/Makefile        2004-02-14 06:26:41.000000000 -0500
 @@ -0,0 +1,174 @@
 +# 
 +# Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
@@ -33628,9 +33574,9 @@ diff -Naur -X ../exclude-files orig/arch/um/Makefile um/arch/um/Makefile
 +              -DELF_FORMAT=$(ELF_FORMAT) $(M4_MODE_TT) \
 +              -DKERNEL_STACK_SIZE=$$(( 4096 * $$pages )) $< > $@
 +
-+SYMLINK_HEADERS = include/asm-um/archparam.h include/asm-um/system.h \
-+      include/asm-um/sigcontext.h include/asm-um/processor.h \
-+      include/asm-um/ptrace.h include/asm-um/arch-signal.h
++SYMLINK_HEADERS = archparam.h system.h sigcontext.h processor.h ptrace.h \
++      arch-signal.h
++SYMLINK_HEADERS := $(foreach header,$(SYMLINK_HEADERS),include/asm-um/$(header))
 +
 +ARCH_SYMLINKS = include/asm-um/arch arch/um/include/sysdep arch/um/os \
 +      $(SYMLINK_HEADERS) $(ARCH_DIR)/include/uml-config.h
@@ -34617,8 +34563,8 @@ diff -Naur -X ../exclude-files orig/arch/um/os-Linux/drivers/tuntap_user.c um/ar
 + */
 diff -Naur -X ../exclude-files orig/arch/um/os-Linux/file.c um/arch/um/os-Linux/file.c
 --- orig/arch/um/os-Linux/file.c       1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/os-Linux/file.c 2003-11-30 20:18:39.000000000 -0500
-@@ -0,0 +1,669 @@
++++ um/arch/um/os-Linux/file.c 2004-01-10 06:52:24.000000000 -0500
+@@ -0,0 +1,668 @@
 +/* 
 + * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
 + * Licensed under the GPL
@@ -34776,7 +34722,7 @@ diff -Naur -X ../exclude-files orig/arch/um/os-Linux/file.c um/arch/um/os-Linux/
 +      sencap = 0;
 +      if(ioctl(fd, SIOCSIFENCAP, &sencap) < 0){
 +              printk("Failed to set slip encapsulation - "
-+                     "errno = %d\n", errno);
++                     "errno = %d\n", errno);
 +              return(-errno);
 +      }
 +
@@ -34788,10 +34734,9 @@ diff -Naur -X ../exclude-files orig/arch/um/os-Linux/file.c um/arch/um/os-Linux/
 +      if(fcntl(fd, F_SETOWN, pid) < 0){
 +              int save_errno = errno;
 +
-+              if(fcntl(fd, F_GETOWN, 0) != pid){
++              if(fcntl(fd, F_GETOWN, 0) != pid)
 +                      return(-save_errno);
-+                }
-+        }
++      }
 +
 +      return(0);
 +}
@@ -34807,14 +34752,14 @@ diff -Naur -X ../exclude-files orig/arch/um/os-Linux/file.c um/arch/um/os-Linux/
 +              return(-errno);
 +      }
 +
-+        if((fcntl(master, F_SETFL, flags | O_NONBLOCK | O_ASYNC) < 0) ||
-+           (fcntl(master, F_SETOWN, os_getpid()) < 0)){
-+                printk("fcntl F_SETFL or F_SETOWN failed, errno = %d\n", errno);
++      if((fcntl(master, F_SETFL, flags | O_NONBLOCK | O_ASYNC) < 0) ||
++         (fcntl(master, F_SETOWN, os_getpid()) < 0)){
++              printk("fcntl F_SETFL or F_SETOWN failed, errno = %d\n", errno);
 +              return(-errno);
 +      }
 +
-+        if((fcntl(slave, F_SETFL, flags | O_NONBLOCK) < 0)){
-+                printk("fcntl F_SETFL failed, errno = %d\n", errno);
++      if((fcntl(slave, F_SETFL, flags | O_NONBLOCK) < 0)){
++              printk("fcntl F_SETFL failed, errno = %d\n", errno);
 +              return(-errno);
 +      }
 +
@@ -35031,7 +34976,7 @@ diff -Naur -X ../exclude-files orig/arch/um/os-Linux/file.c um/arch/um/os-Linux/
 +      *modtime = buf.ust_mtime;
 +      return(0);
 +}
-+ 
++
 +int os_get_exec_close(int fd, int* close_on_exec)
 +{
 +      int ret;
@@ -35271,7 +35216,7 @@ diff -Naur -X ../exclude-files orig/arch/um/os-Linux/file.c um/arch/um/os-Linux/
 +              err = -errno;
 +              goto out;
 +      }
-+              
++
 +      printk("F_SETLK failed, file already locked by pid %d\n", lock.l_pid);
 +      err = save;
 + out:
@@ -35337,7 +35282,7 @@ diff -Naur -X ../exclude-files orig/arch/um/os-Linux/Makefile um/arch/um/os-Linu
 +archmrproper:
 diff -Naur -X ../exclude-files orig/arch/um/os-Linux/process.c um/arch/um/os-Linux/process.c
 --- orig/arch/um/os-Linux/process.c    1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/os-Linux/process.c      2003-12-18 03:08:34.000000000 -0500
++++ um/arch/um/os-Linux/process.c      2004-01-10 06:53:44.000000000 -0500
 @@ -0,0 +1,148 @@
 +/* 
 + * Copyright (C) 2002 Jeff Dike (jdike@addtoit.com)
@@ -35472,7 +35417,7 @@ diff -Naur -X ../exclude-files orig/arch/um/os-Linux/process.c um/arch/um/os-Lin
 +        int err;
 +
 +        err = munmap(addr, len);
-+        if(err < 0) 
++      if(err < 0)
 +              return(-errno);
 +        return(0);
 +}
@@ -35554,8 +35499,8 @@ diff -Naur -X ../exclude-files orig/arch/um/os-Linux/tty.c um/arch/um/os-Linux/t
 + */
 diff -Naur -X ../exclude-files orig/arch/um/sys-i386/bugs.c um/arch/um/sys-i386/bugs.c
 --- orig/arch/um/sys-i386/bugs.c       1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/sys-i386/bugs.c 2003-11-15 02:54:48.000000000 -0500
-@@ -0,0 +1,221 @@
++++ um/arch/um/sys-i386/bugs.c 2004-01-21 22:42:39.000000000 -0500
+@@ -0,0 +1,222 @@
 +/* 
 + * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
 + * Licensed under the GPL
@@ -35575,8 +35520,8 @@ diff -Naur -X ../exclude-files orig/arch/um/sys-i386/bugs.c um/arch/um/sys-i386/
 +#define MAXTOKEN 64
 +
 +/* Set during early boot */
-+int cpu_has_cmov = 1;
-+int cpu_has_xmm = 0;
++int host_has_cmov = 1;
++int host_has_xmm = 0;
 +
 +static char token(int fd, char *buf, int len, char stop)
 +{
@@ -35734,36 +35679,37 @@ diff -Naur -X ../exclude-files orig/arch/um/sys-i386/bugs.c um/arch/um/sys-i386/
 +              return;
 +      }
 +      if(check_cpu_flag("cmov", &have_it)) 
-+              cpu_has_cmov = have_it;
++              host_has_cmov = have_it;
 +      if(check_cpu_flag("xmm", &have_it)) 
-+              cpu_has_xmm = have_it;
++              host_has_xmm = have_it;
 +}
 +
 +int arch_handle_signal(int sig, union uml_pt_regs *regs)
 +{
-+      unsigned long ip;
++      unsigned char tmp[2];
 +
 +      /* This is testing for a cmov (0x0f 0x4x) instruction causing a
 +       * SIGILL in init.
 +       */
 +      if((sig != SIGILL) || (TASK_PID(get_current()) != 1)) return(0);
 +
-+      ip = UPT_IP(regs);
-+      if((*((char *) ip) != 0x0f) || ((*((char *) (ip + 1)) & 0xf0) != 0x40))
++      if (copy_from_user_proc(tmp, (void *) UPT_IP(regs), 2))
++              panic("SIGILL in init, could not read instructions!\n");
++      if((tmp[0] != 0x0f) || ((tmp[1] & 0xf0) != 0x40))
 +              return(0);
 +
-+      if(cpu_has_cmov == 0)
++      if(host_has_cmov == 0)
 +              panic("SIGILL caused by cmov, which this processor doesn't "
 +                    "implement, boot a filesystem compiled for older "
 +                    "processors");
-+      else if(cpu_has_cmov == 1)
++      else if(host_has_cmov == 1)
 +              panic("SIGILL caused by cmov, which this processor claims to "
 +                    "implement");
-+      else if(cpu_has_cmov == -1)
++      else if(host_has_cmov == -1)
 +              panic("SIGILL caused by cmov, couldn't tell if this processor "
 +                    "implements it, boot a filesystem compiled for older "
 +                    "processors");
-+      else panic("Bad value for cpu_has_cmov (%d)", cpu_has_cmov);
++      else panic("Bad value for host_has_cmov (%d)", host_has_cmov);
 +      return(0);
 +}
 +
@@ -36302,8 +36248,8 @@ diff -Naur -X ../exclude-files orig/arch/um/sys-i386/ksyms.c um/arch/um/sys-i386
 +EXPORT_SYMBOL(csum_partial_copy_to);
 diff -Naur -X ../exclude-files orig/arch/um/sys-i386/ldt.c um/arch/um/sys-i386/ldt.c
 --- orig/arch/um/sys-i386/ldt.c        1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/sys-i386/ldt.c  2003-10-21 03:26:07.000000000 -0400
-@@ -0,0 +1,92 @@
++++ um/arch/um/sys-i386/ldt.c  2004-01-19 04:01:11.000000000 -0500
+@@ -0,0 +1,94 @@
 +/*
 + * Copyright (C) 2001, 2002 Jeff Dike (jdike@karaya.com)
 + * Licensed under the GPL
@@ -36319,6 +36265,8 @@ diff -Naur -X ../exclude-files orig/arch/um/sys-i386/ldt.c um/arch/um/sys-i386/l
 +#ifdef CONFIG_MODE_TT
 +extern int modify_ldt(int func, void *ptr, unsigned long bytecount);
 +
++/* XXX this needs copy_to_user and copy_from_user */
++
 +int sys_modify_ldt_tt(int func, void *ptr, unsigned long bytecount)
 +{
 +      if(verify_area(VERIFY_READ, ptr, bytecount)) return(-EFAULT);
@@ -37767,8 +37715,8 @@ diff -Naur -X ../exclude-files orig/arch/um/util/Makefile um/arch/um/util/Makefi
 +archmrproper : clean
 diff -Naur -X ../exclude-files orig/arch/um/util/mk_constants_kern.c um/arch/um/util/mk_constants_kern.c
 --- orig/arch/um/util/mk_constants_kern.c      1969-12-31 19:00:00.000000000 -0500
-+++ um/arch/um/util/mk_constants_kern.c        2003-10-21 03:26:07.000000000 -0400
-@@ -0,0 +1,24 @@
++++ um/arch/um/util/mk_constants_kern.c        2004-01-10 06:54:51.000000000 -0500
+@@ -0,0 +1,25 @@
 +#include "linux/kernel.h"
 +#include "linux/stringify.h"
 +#include "asm/page.h"
@@ -37782,6 +37730,7 @@ diff -Naur -X ../exclude-files orig/arch/um/util/mk_constants_kern.c um/arch/um/
 +{
 +  print_head();
 +  print_constant_int("UM_KERN_PAGE_SIZE", PAGE_SIZE);
++
 +  print_constant_str("UM_KERN_EMERG", KERN_EMERG);
 +  print_constant_str("UM_KERN_ALERT", KERN_ALERT);
 +  print_constant_str("UM_KERN_CRIT", KERN_CRIT);
@@ -38271,7 +38220,7 @@ diff -Naur -X ../exclude-files orig/drivers/char/Makefile um/drivers/char/Makefi
    KEYBD    =
 diff -Naur -X ../exclude-files orig/drivers/char/mem.c um/drivers/char/mem.c
 --- orig/drivers/char/mem.c    2003-12-16 22:16:27.000000000 -0500
-+++ um/drivers/char/mem.c      2003-12-16 22:17:25.000000000 -0500
++++ um/drivers/char/mem.c      2004-01-05 11:23:32.000000000 -0500
 @@ -220,7 +220,8 @@
        ssize_t read = 0;
        ssize_t virtr = 0;
@@ -38448,8 +38397,8 @@ diff -Naur -X ../exclude-files orig/fs/bad_inode.c um/fs/bad_inode.c
        inode->i_atime = inode->i_mtime = inode->i_ctime = CURRENT_TIME;
        inode->i_op = &bad_inode_ops;   
 diff -Naur -X ../exclude-files orig/include/asm-i386/hardirq.h um/include/asm-i386/hardirq.h
---- orig/include/asm-i386/hardirq.h    2003-12-16 22:16:35.000000000 -0500
-+++ um/include/asm-i386/hardirq.h      2003-12-17 02:16:13.000000000 -0500
+--- orig/include/asm-i386/hardirq.h    2004-01-11 22:46:12.000000000 -0500
++++ um/include/asm-i386/hardirq.h      2004-02-14 06:28:59.000000000 -0500
 @@ -4,6 +4,7 @@
  #include <linux/config.h>
  #include <linux/threads.h>
@@ -38641,7 +38590,7 @@ diff -Naur -X ../exclude-files orig/include/asm-um/arch-signal-i386.h um/include
 + */
 diff -Naur -X ../exclude-files orig/include/asm-um/atomic.h um/include/asm-um/atomic.h
 --- orig/include/asm-um/atomic.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/atomic.h 2003-12-17 02:16:13.000000000 -0500
++++ um/include/asm-um/atomic.h 2004-02-14 06:28:59.000000000 -0500
 @@ -0,0 +1,6 @@
 +#ifndef __UM_ATOMIC_H
 +#define __UM_ATOMIC_H
@@ -38651,7 +38600,7 @@ diff -Naur -X ../exclude-files orig/include/asm-um/atomic.h um/include/asm-um/at
 +#endif
 diff -Naur -X ../exclude-files orig/include/asm-um/bitops.h um/include/asm-um/bitops.h
 --- orig/include/asm-um/bitops.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/bitops.h 2003-12-17 02:16:13.000000000 -0500
++++ um/include/asm-um/bitops.h 2004-02-14 06:28:59.000000000 -0500
 @@ -0,0 +1,6 @@
 +#ifndef __UM_BITOPS_H
 +#define __UM_BITOPS_H
@@ -38681,7 +38630,7 @@ diff -Naur -X ../exclude-files orig/include/asm-um/bugs.h um/include/asm-um/bugs
 +#endif
 diff -Naur -X ../exclude-files orig/include/asm-um/byteorder.h um/include/asm-um/byteorder.h
 --- orig/include/asm-um/byteorder.h    1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/byteorder.h      2003-12-16 22:26:55.000000000 -0500
++++ um/include/asm-um/byteorder.h      2004-01-16 03:32:58.000000000 -0500
 @@ -0,0 +1,6 @@
 +#ifndef __UM_BYTEORDER_H
 +#define __UM_BYTEORDER_H
@@ -38721,7 +38670,7 @@ diff -Naur -X ../exclude-files orig/include/asm-um/cobalt.h um/include/asm-um/co
 +#endif
 diff -Naur -X ../exclude-files orig/include/asm-um/current.h um/include/asm-um/current.h
 --- orig/include/asm-um/current.h      1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/current.h        2003-12-17 02:16:13.000000000 -0500
++++ um/include/asm-um/current.h        2004-02-14 06:28:59.000000000 -0500
 @@ -0,0 +1,34 @@
 +/* 
 + * Copyright (C) 2000 Jeff Dike (jdike@karaya.com)
@@ -38790,7 +38739,7 @@ diff -Naur -X ../exclude-files orig/include/asm-um/div64.h um/include/asm-um/div
 +#endif
 diff -Naur -X ../exclude-files orig/include/asm-um/dma.h um/include/asm-um/dma.h
 --- orig/include/asm-um/dma.h  1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/dma.h    2003-12-15 00:26:39.000000000 -0500
++++ um/include/asm-um/dma.h    2004-01-16 03:32:59.000000000 -0500
 @@ -0,0 +1,10 @@
 +#ifndef __UM_DMA_H
 +#define __UM_DMA_H
@@ -38846,7 +38795,7 @@ diff -Naur -X ../exclude-files orig/include/asm-um/fcntl.h um/include/asm-um/fcn
 +#endif
 diff -Naur -X ../exclude-files orig/include/asm-um/fixmap.h um/include/asm-um/fixmap.h
 --- orig/include/asm-um/fixmap.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/fixmap.h 2003-12-17 02:16:14.000000000 -0500
++++ um/include/asm-um/fixmap.h 2004-02-14 06:29:00.000000000 -0500
 @@ -0,0 +1,89 @@
 +#ifndef __UM_FIXMAP_H
 +#define __UM_FIXMAP_H
@@ -38949,7 +38898,7 @@ diff -Naur -X ../exclude-files orig/include/asm-um/floppy.h um/include/asm-um/fl
 +#endif
 diff -Naur -X ../exclude-files orig/include/asm-um/hardirq.h um/include/asm-um/hardirq.h
 --- orig/include/asm-um/hardirq.h      1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/hardirq.h        2003-12-17 02:16:13.000000000 -0500
++++ um/include/asm-um/hardirq.h        2004-02-14 06:28:59.000000000 -0500
 @@ -0,0 +1,6 @@
 +#ifndef __UM_HARDIRQ_H
 +#define __UM_HARDIRQ_H
@@ -38969,7 +38918,7 @@ diff -Naur -X ../exclude-files orig/include/asm-um/hdreg.h um/include/asm-um/hdr
 +#endif
 diff -Naur -X ../exclude-files orig/include/asm-um/highmem.h um/include/asm-um/highmem.h
 --- orig/include/asm-um/highmem.h      1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/highmem.h        2003-12-17 02:16:14.000000000 -0500
++++ um/include/asm-um/highmem.h        2004-02-14 06:29:00.000000000 -0500
 @@ -0,0 +1,12 @@
 +#ifndef __UM_HIGHMEM_H
 +#define __UM_HIGHMEM_H
@@ -38999,7 +38948,7 @@ diff -Naur -X ../exclude-files orig/include/asm-um/hw_irq.h um/include/asm-um/hw
 +#endif
 diff -Naur -X ../exclude-files orig/include/asm-um/ide.h um/include/asm-um/ide.h
 --- orig/include/asm-um/ide.h  1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/ide.h    2003-12-15 00:29:05.000000000 -0500
++++ um/include/asm-um/ide.h    2004-01-16 23:40:52.000000000 -0500
 @@ -0,0 +1,6 @@
 +#ifndef __UM_IDE_H
 +#define __UM_IDE_H
@@ -39044,7 +38993,7 @@ diff -Naur -X ../exclude-files orig/include/asm-um/ioctls.h um/include/asm-um/io
 +#endif
 diff -Naur -X ../exclude-files orig/include/asm-um/io.h um/include/asm-um/io.h
 --- orig/include/asm-um/io.h   1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/io.h     2003-12-15 00:26:39.000000000 -0500
++++ um/include/asm-um/io.h     2004-01-16 03:32:59.000000000 -0500
 @@ -0,0 +1,25 @@
 +#ifndef __UM_IO_H
 +#define __UM_IO_H
@@ -39184,7 +39133,7 @@ diff -Naur -X ../exclude-files orig/include/asm-um/mman.h um/include/asm-um/mman
 +#endif
 diff -Naur -X ../exclude-files orig/include/asm-um/mmu_context.h um/include/asm-um/mmu_context.h
 --- orig/include/asm-um/mmu_context.h  1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/mmu_context.h    2003-12-17 02:16:13.000000000 -0500
++++ um/include/asm-um/mmu_context.h    2004-02-14 06:28:59.000000000 -0500
 @@ -0,0 +1,72 @@
 +/* 
 + * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
@@ -39306,7 +39255,7 @@ diff -Naur -X ../exclude-files orig/include/asm-um/msgbuf.h um/include/asm-um/ms
 +#endif
 diff -Naur -X ../exclude-files orig/include/asm-um/mtrr.h um/include/asm-um/mtrr.h
 --- orig/include/asm-um/mtrr.h 1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/mtrr.h   2003-12-17 10:48:33.000000000 -0500
++++ um/include/asm-um/mtrr.h   2004-02-12 05:46:29.000000000 -0500
 @@ -0,0 +1,6 @@
 +#ifndef __UM_MTRR_H
 +#define __UM_MTRR_H
@@ -39326,7 +39275,7 @@ diff -Naur -X ../exclude-files orig/include/asm-um/namei.h um/include/asm-um/nam
 +#endif
 diff -Naur -X ../exclude-files orig/include/asm-um/page.h um/include/asm-um/page.h
 --- orig/include/asm-um/page.h 1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/page.h   2003-12-15 00:26:37.000000000 -0500
++++ um/include/asm-um/page.h   2004-01-16 03:32:58.000000000 -0500
 @@ -0,0 +1,68 @@
 +/* 
 + * Copyright (C) 2000 - 2003 Jeff Dike (jdike@addtoit.com)
@@ -39403,14 +39352,12 @@ diff -Naur -X ../exclude-files orig/include/asm-um/page_offset.h um/include/asm-
 +#define PAGE_OFFSET_RAW (uml_physmem)
 diff -Naur -X ../exclude-files orig/include/asm-um/param.h um/include/asm-um/param.h
 --- orig/include/asm-um/param.h        1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/param.h  2003-10-21 03:26:07.000000000 -0400
-@@ -0,0 +1,24 @@
++++ um/include/asm-um/param.h  2004-02-13 02:26:52.000000000 -0500
+@@ -0,0 +1,22 @@
 +#ifndef _UM_PARAM_H
 +#define _UM_PARAM_H
 +
-+#ifndef HZ
-+#define HZ 52
-+#endif
++#define HZ 100
 +
 +#define EXEC_PAGESIZE   4096
 +
@@ -39441,7 +39388,7 @@ diff -Naur -X ../exclude-files orig/include/asm-um/pci.h um/include/asm-um/pci.h
 +#endif
 diff -Naur -X ../exclude-files orig/include/asm-um/pgalloc.h um/include/asm-um/pgalloc.h
 --- orig/include/asm-um/pgalloc.h      1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/pgalloc.h        2003-12-17 02:16:14.000000000 -0500
++++ um/include/asm-um/pgalloc.h        2004-02-14 06:29:00.000000000 -0500
 @@ -0,0 +1,164 @@
 +/* 
 + * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
@@ -39609,7 +39556,7 @@ diff -Naur -X ../exclude-files orig/include/asm-um/pgalloc.h um/include/asm-um/p
 + */
 diff -Naur -X ../exclude-files orig/include/asm-um/pgtable.h um/include/asm-um/pgtable.h
 --- orig/include/asm-um/pgtable.h      1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/pgtable.h        2003-12-17 02:16:13.000000000 -0500
++++ um/include/asm-um/pgtable.h        2004-02-14 06:28:59.000000000 -0500
 @@ -0,0 +1,413 @@
 +/* 
 + * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
@@ -40046,7 +39993,7 @@ diff -Naur -X ../exclude-files orig/include/asm-um/posix_types.h um/include/asm-
 +#endif
 diff -Naur -X ../exclude-files orig/include/asm-um/processor-generic.h um/include/asm-um/processor-generic.h
 --- orig/include/asm-um/processor-generic.h    1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/processor-generic.h      2003-12-17 02:16:13.000000000 -0500
++++ um/include/asm-um/processor-generic.h      2004-02-14 06:28:59.000000000 -0500
 @@ -0,0 +1,177 @@
 +/* 
 + * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
@@ -40227,7 +40174,7 @@ diff -Naur -X ../exclude-files orig/include/asm-um/processor-generic.h um/includ
 + */
 diff -Naur -X ../exclude-files orig/include/asm-um/processor-i386.h um/include/asm-um/processor-i386.h
 --- orig/include/asm-um/processor-i386.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/processor-i386.h 2003-12-17 02:16:13.000000000 -0500
++++ um/include/asm-um/processor-i386.h 2004-02-14 06:28:59.000000000 -0500
 @@ -0,0 +1,35 @@
 +/* 
 + * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
@@ -40285,7 +40232,7 @@ diff -Naur -X ../exclude-files orig/include/asm-um/processor-ppc.h um/include/as
 +#endif
 diff -Naur -X ../exclude-files orig/include/asm-um/ptrace-generic.h um/include/asm-um/ptrace-generic.h
 --- orig/include/asm-um/ptrace-generic.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/ptrace-generic.h 2003-12-17 02:16:13.000000000 -0500
++++ um/include/asm-um/ptrace-generic.h 2004-02-14 06:28:59.000000000 -0500
 @@ -0,0 +1,74 @@
 +/* 
 + * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
@@ -40363,7 +40310,7 @@ diff -Naur -X ../exclude-files orig/include/asm-um/ptrace-generic.h um/include/a
 + */
 diff -Naur -X ../exclude-files orig/include/asm-um/ptrace-i386.h um/include/asm-um/ptrace-i386.h
 --- orig/include/asm-um/ptrace-i386.h  1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/ptrace-i386.h    2003-12-17 02:16:13.000000000 -0500
++++ um/include/asm-um/ptrace-i386.h    2004-02-14 06:28:59.000000000 -0500
 @@ -0,0 +1,46 @@
 +/* 
 + * Copyright (C) 2000, 2001, 2002 Jeff Dike (jdike@karaya.com)
@@ -40433,7 +40380,7 @@ diff -Naur -X ../exclude-files orig/include/asm-um/rwlock.h um/include/asm-um/rw
 +#endif
 diff -Naur -X ../exclude-files orig/include/asm-um/rwsem.h um/include/asm-um/rwsem.h
 --- orig/include/asm-um/rwsem.h        1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/rwsem.h  2003-12-17 02:16:13.000000000 -0500
++++ um/include/asm-um/rwsem.h  2004-02-14 06:28:59.000000000 -0500
 @@ -0,0 +1,10 @@
 +#ifndef __UM_RWSEM_H__
 +#define __UM_RWSEM_H__
@@ -40465,7 +40412,7 @@ diff -Naur -X ../exclude-files orig/include/asm-um/segment.h um/include/asm-um/s
 +#endif
 diff -Naur -X ../exclude-files orig/include/asm-um/semaphore.h um/include/asm-um/semaphore.h
 --- orig/include/asm-um/semaphore.h    1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/semaphore.h      2003-12-17 02:16:13.000000000 -0500
++++ um/include/asm-um/semaphore.h      2004-02-14 06:28:59.000000000 -0500
 @@ -0,0 +1,6 @@
 +#ifndef __UM_SEMAPHORE_H
 +#define __UM_SEMAPHORE_H
@@ -40549,7 +40496,7 @@ diff -Naur -X ../exclude-files orig/include/asm-um/sigcontext-ppc.h um/include/a
 +#endif
 diff -Naur -X ../exclude-files orig/include/asm-um/siginfo.h um/include/asm-um/siginfo.h
 --- orig/include/asm-um/siginfo.h      1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/siginfo.h        2003-12-17 02:16:13.000000000 -0500
++++ um/include/asm-um/siginfo.h        2004-02-14 06:28:59.000000000 -0500
 @@ -0,0 +1,6 @@
 +#ifndef __UM_SIGINFO_H
 +#define __UM_SIGINFO_H
@@ -40559,7 +40506,7 @@ diff -Naur -X ../exclude-files orig/include/asm-um/siginfo.h um/include/asm-um/s
 +#endif
 diff -Naur -X ../exclude-files orig/include/asm-um/signal.h um/include/asm-um/signal.h
 --- orig/include/asm-um/signal.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/signal.h 2003-12-17 02:16:13.000000000 -0500
++++ um/include/asm-um/signal.h 2004-02-14 06:28:59.000000000 -0500
 @@ -0,0 +1,22 @@
 +/* 
 + * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
@@ -40585,7 +40532,7 @@ diff -Naur -X ../exclude-files orig/include/asm-um/signal.h um/include/asm-um/si
 + */
 diff -Naur -X ../exclude-files orig/include/asm-um/smp.h um/include/asm-um/smp.h
 --- orig/include/asm-um/smp.h  1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/smp.h    2003-12-17 02:16:13.000000000 -0500
++++ um/include/asm-um/smp.h    2004-02-14 06:28:59.000000000 -0500
 @@ -0,0 +1,19 @@
 +#ifndef __UM_SMP_H
 +#define __UM_SMP_H
@@ -40608,7 +40555,7 @@ diff -Naur -X ../exclude-files orig/include/asm-um/smp.h um/include/asm-um/smp.h
 +#endif
 diff -Naur -X ../exclude-files orig/include/asm-um/smplock.h um/include/asm-um/smplock.h
 --- orig/include/asm-um/smplock.h      1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/smplock.h        2003-12-17 02:16:13.000000000 -0500
++++ um/include/asm-um/smplock.h        2004-02-14 06:28:59.000000000 -0500
 @@ -0,0 +1,6 @@
 +#ifndef __UM_SMPLOCK_H
 +#define __UM_SMPLOCK_H
@@ -40638,7 +40585,7 @@ diff -Naur -X ../exclude-files orig/include/asm-um/sockios.h um/include/asm-um/s
 +#endif
 diff -Naur -X ../exclude-files orig/include/asm-um/softirq.h um/include/asm-um/softirq.h
 --- orig/include/asm-um/softirq.h      1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/softirq.h        2003-12-17 02:16:13.000000000 -0500
++++ um/include/asm-um/softirq.h        2004-02-14 06:28:59.000000000 -0500
 @@ -0,0 +1,13 @@
 +#ifndef __UM_SOFTIRQ_H
 +#define __UM_SOFTIRQ_H
@@ -40655,7 +40602,7 @@ diff -Naur -X ../exclude-files orig/include/asm-um/softirq.h um/include/asm-um/s
 +#endif
 diff -Naur -X ../exclude-files orig/include/asm-um/spinlock.h um/include/asm-um/spinlock.h
 --- orig/include/asm-um/spinlock.h     1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/spinlock.h       2003-12-17 02:16:13.000000000 -0500
++++ um/include/asm-um/spinlock.h       2004-02-14 06:28:59.000000000 -0500
 @@ -0,0 +1,10 @@
 +#ifndef __UM_SPINLOCK_H
 +#define __UM_SPINLOCK_H
@@ -40669,7 +40616,7 @@ diff -Naur -X ../exclude-files orig/include/asm-um/spinlock.h um/include/asm-um/
 +#endif
 diff -Naur -X ../exclude-files orig/include/asm-um/statfs.h um/include/asm-um/statfs.h
 --- orig/include/asm-um/statfs.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/statfs.h 2003-12-17 02:16:13.000000000 -0500
++++ um/include/asm-um/statfs.h 2004-02-14 06:28:59.000000000 -0500
 @@ -0,0 +1,6 @@
 +#ifndef _UM_STATFS_H
 +#define _UM_STATFS_H
@@ -40689,7 +40636,7 @@ diff -Naur -X ../exclude-files orig/include/asm-um/stat.h um/include/asm-um/stat
 +#endif
 diff -Naur -X ../exclude-files orig/include/asm-um/string.h um/include/asm-um/string.h
 --- orig/include/asm-um/string.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/string.h 2003-12-16 22:26:55.000000000 -0500
++++ um/include/asm-um/string.h 2004-01-16 03:32:58.000000000 -0500
 @@ -0,0 +1,7 @@
 +#ifndef __UM_STRING_H
 +#define __UM_STRING_H
@@ -40700,7 +40647,7 @@ diff -Naur -X ../exclude-files orig/include/asm-um/string.h um/include/asm-um/st
 +#endif
 diff -Naur -X ../exclude-files orig/include/asm-um/system-generic.h um/include/asm-um/system-generic.h
 --- orig/include/asm-um/system-generic.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/system-generic.h 2003-12-17 02:16:13.000000000 -0500
++++ um/include/asm-um/system-generic.h 2004-02-14 06:28:59.000000000 -0500
 @@ -0,0 +1,50 @@
 +#ifndef __UM_SYSTEM_GENERIC_H
 +#define __UM_SYSTEM_GENERIC_H
@@ -40754,7 +40701,7 @@ diff -Naur -X ../exclude-files orig/include/asm-um/system-generic.h um/include/a
 +#endif
 diff -Naur -X ../exclude-files orig/include/asm-um/system-i386.h um/include/asm-um/system-i386.h
 --- orig/include/asm-um/system-i386.h  1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/system-i386.h    2003-12-17 02:16:13.000000000 -0500
++++ um/include/asm-um/system-i386.h    2004-02-14 06:28:59.000000000 -0500
 @@ -0,0 +1,39 @@
 +#ifndef __UM_SYSTEM_I386_H
 +#define __UM_SYSTEM_I386_H
@@ -40833,7 +40780,7 @@ diff -Naur -X ../exclude-files orig/include/asm-um/termios.h um/include/asm-um/t
 +#endif
 diff -Naur -X ../exclude-files orig/include/asm-um/timex.h um/include/asm-um/timex.h
 --- orig/include/asm-um/timex.h        1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/timex.h  2003-12-17 02:16:13.000000000 -0500
++++ um/include/asm-um/timex.h  2004-02-14 06:28:59.000000000 -0500
 @@ -0,0 +1,18 @@
 +#ifndef __UM_TIMEX_H
 +#define __UM_TIMEX_H
@@ -40860,7 +40807,7 @@ diff -Naur -X ../exclude-files orig/include/asm-um/tlb.h um/include/asm-um/tlb.h
 +#include <asm-generic/tlb.h>
 diff -Naur -X ../exclude-files orig/include/asm-um/types.h um/include/asm-um/types.h
 --- orig/include/asm-um/types.h        1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/types.h  2003-12-15 00:26:37.000000000 -0500
++++ um/include/asm-um/types.h  2004-01-16 03:32:58.000000000 -0500
 @@ -0,0 +1,6 @@
 +#ifndef __UM_TYPES_H
 +#define __UM_TYPES_H
@@ -40870,7 +40817,7 @@ diff -Naur -X ../exclude-files orig/include/asm-um/types.h um/include/asm-um/typ
 +#endif
 diff -Naur -X ../exclude-files orig/include/asm-um/uaccess.h um/include/asm-um/uaccess.h
 --- orig/include/asm-um/uaccess.h      1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/uaccess.h        2003-12-17 02:16:13.000000000 -0500
++++ um/include/asm-um/uaccess.h        2004-02-14 06:28:59.000000000 -0500
 @@ -0,0 +1,99 @@
 +/* 
 + * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
@@ -40993,7 +40940,7 @@ diff -Naur -X ../exclude-files orig/include/asm-um/unaligned.h um/include/asm-um
 +#endif
 diff -Naur -X ../exclude-files orig/include/asm-um/unistd.h um/include/asm-um/unistd.h
 --- orig/include/asm-um/unistd.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/unistd.h 2003-12-17 02:16:14.000000000 -0500
++++ um/include/asm-um/unistd.h 2004-02-14 06:29:00.000000000 -0500
 @@ -0,0 +1,121 @@
 +/* 
 + * Copyright (C) 2000, 2001  Jeff Dike (jdike@karaya.com)
@@ -41118,7 +41065,7 @@ diff -Naur -X ../exclude-files orig/include/asm-um/unistd.h um/include/asm-um/un
 + */
 diff -Naur -X ../exclude-files orig/include/asm-um/user.h um/include/asm-um/user.h
 --- orig/include/asm-um/user.h 1969-12-31 19:00:00.000000000 -0500
-+++ um/include/asm-um/user.h   2003-12-17 02:18:31.000000000 -0500
++++ um/include/asm-um/user.h   2004-02-14 06:31:38.000000000 -0500
 @@ -0,0 +1,6 @@
 +#ifndef __UM_USER_H
 +#define __UM_USER_H
@@ -41147,8 +41094,8 @@ diff -Naur -X ../exclude-files orig/include/asm-um/xor.h um/include/asm-um/xor.h
 +
 +#endif
 diff -Naur -X ../exclude-files orig/include/linux/blk.h um/include/linux/blk.h
---- orig/include/linux/blk.h   2002-09-15 12:13:19.000000000 -0400
-+++ um/include/linux/blk.h     2003-12-17 02:16:30.000000000 -0500
+--- orig/include/linux/blk.h   2004-01-11 22:46:30.000000000 -0500
++++ um/include/linux/blk.h     2004-02-14 06:29:18.000000000 -0500
 @@ -320,6 +320,24 @@
  #define DEVICE_REQUEST do_ida_request
  #define DEVICE_NR(device) (MINOR(device) >> 4)
@@ -41176,7 +41123,7 @@ diff -Naur -X ../exclude-files orig/include/linux/blk.h um/include/linux/blk.h
  /* provide DEVICE_xxx defaults, if not explicitly defined
 diff -Naur -X ../exclude-files orig/include/linux/fs.h um/include/linux/fs.h
 --- orig/include/linux/fs.h    2003-12-16 22:16:36.000000000 -0500
-+++ um/include/linux/fs.h      2003-12-17 02:16:13.000000000 -0500
++++ um/include/linux/fs.h      2004-02-14 06:28:59.000000000 -0500
 @@ -320,6 +320,8 @@
  #include <linux/ncp_fs_i.h>
  #include <linux/proc_fs_i.h>
@@ -41308,8 +41255,8 @@ diff -Naur -X ../exclude-files orig/include/linux/hppfs_fs_i.h um/include/linux/
 + * End:
 + */
 diff -Naur -X ../exclude-files orig/include/linux/kernel.h um/include/linux/kernel.h
---- orig/include/linux/kernel.h        2003-02-27 13:04:27.000000000 -0500
-+++ um/include/linux/kernel.h  2003-12-17 02:16:13.000000000 -0500
+--- orig/include/linux/kernel.h        2004-01-11 22:46:12.000000000 -0500
++++ um/include/linux/kernel.h  2004-02-14 06:28:59.000000000 -0500
 @@ -49,7 +49,7 @@
  # define ATTRIB_NORET  __attribute__((noreturn))
  # define NORET_AND     noreturn,
@@ -41320,8 +41267,8 @@ diff -Naur -X ../exclude-files orig/include/linux/kernel.h um/include/linux/kern
  #else
  #define FASTCALL(x)   x
 diff -Naur -X ../exclude-files orig/include/linux/kernel_stat.h um/include/linux/kernel_stat.h
---- orig/include/linux/kernel_stat.h   2003-08-29 17:26:25.000000000 -0400
-+++ um/include/linux/kernel_stat.h     2003-12-17 02:16:13.000000000 -0500
+--- orig/include/linux/kernel_stat.h   2004-01-11 22:46:12.000000000 -0500
++++ um/include/linux/kernel_stat.h     2004-02-14 06:28:59.000000000 -0500
 @@ -12,7 +12,7 @@
   * used by rstatd/perfmeter
   */
@@ -41333,7 +41280,7 @@ diff -Naur -X ../exclude-files orig/include/linux/kernel_stat.h um/include/linux
  struct kernel_stat {
 diff -Naur -X ../exclude-files orig/include/linux/mm.h um/include/linux/mm.h
 --- orig/include/linux/mm.h    2003-12-16 22:16:36.000000000 -0500
-+++ um/include/linux/mm.h      2003-12-17 02:16:13.000000000 -0500
++++ um/include/linux/mm.h      2004-02-14 06:28:59.000000000 -0500
 @@ -438,6 +438,18 @@
  extern struct page * FASTCALL(__alloc_pages(unsigned int gfp_mask, unsigned int order, zonelist_t *zonelist));
  extern struct page * alloc_pages_node(int nid, unsigned int gfp_mask, unsigned int order);
@@ -41398,7 +41345,7 @@ diff -Naur -X ../exclude-files orig/include/linux/mm.h um/include/linux/mm.h
  }
 diff -Naur -X ../exclude-files orig/include/linux/proc_mm.h um/include/linux/proc_mm.h
 --- orig/include/linux/proc_mm.h       1969-12-31 19:00:00.000000000 -0500
-+++ um/include/linux/proc_mm.h 2003-12-17 02:17:30.000000000 -0500
++++ um/include/linux/proc_mm.h 2004-02-14 06:30:22.000000000 -0500
 @@ -0,0 +1,48 @@
 +/* 
 + * Copyright (C) 2002 Jeff Dike (jdike@karaya.com)
@@ -41461,8 +41408,8 @@ diff -Naur -X ../exclude-files orig/include/linux/shmem_fs.h um/include/linux/sh
        unsigned long           flags;
        struct list_head        list;
 diff -Naur -X ../exclude-files orig/include/linux/tty.h um/include/linux/tty.h
---- orig/include/linux/tty.h   2003-08-29 17:26:26.000000000 -0400
-+++ um/include/linux/tty.h     2003-12-17 02:16:13.000000000 -0500
+--- orig/include/linux/tty.h   2004-01-11 22:46:12.000000000 -0500
++++ um/include/linux/tty.h     2004-02-14 06:28:59.000000000 -0500
 @@ -309,6 +309,9 @@
        spinlock_t read_lock;
        /* If the tty has a pending do_SAK, queue it here - akpm */
@@ -41546,8 +41493,8 @@ diff -Naur -X ../exclude-files orig/MAINTAINERS um/MAINTAINERS
  USB "USBNET" DRIVER
  P:    David Brownell
 diff -Naur -X ../exclude-files orig/Makefile um/Makefile
---- orig/Makefile      2003-12-16 22:16:23.000000000 -0500
-+++ um/Makefile        2003-12-16 22:17:22.000000000 -0500
+--- orig/Makefile      2004-02-14 06:26:12.000000000 -0500
++++ um/Makefile        2004-02-14 06:26:19.000000000 -0500
 @@ -5,7 +5,15 @@
  
  KERNELRELEASE=$(VERSION).$(PATCHLEVEL).$(SUBLEVEL)$(EXTRAVERSION)