vserver 2.0 rc7
[linux-2.6.git] / arch / um / drivers / mmapper_kern.c
index 628d8f8..a37a5ac 100644 (file)
@@ -8,6 +8,8 @@
  *         Greg Lonnon glonnon@ridgerun.com or info@ridgerun.com
  *
  */
+
+#include <linux/types.h>
 #include <linux/kdev_t.h>
 #include <linux/time.h>
 #include <linux/devfs_fs_kernel.h>
@@ -16,6 +18,7 @@
 #include <linux/slab.h>
 #include <linux/init.h> 
 #include <linux/smp_lock.h>
+#include <linux/miscdevice.h>
 #include <asm/uaccess.h>
 #include <asm/irq.h>
 #include <asm/pgtable.h>
@@ -81,10 +84,10 @@ mmapper_mmap(struct file *file, struct vm_area_struct * vma)
        size = vma->vm_end - vma->vm_start;
        if(size > mmapper_size) return(-EFAULT);
 
-       /* XXX A comment above remap_page_range says it should only be
+       /* XXX A comment above remap_pfn_range says it should only be
         * called when the mm semaphore is held
         */
-       if (remap_page_range(vma, vma->vm_start, p_buf, size, 
+       if (remap_pfn_range(vma, vma->vm_start, p_buf >> PAGE_SHIFT, size,
                             vma->vm_page_prot))
                goto out;
        ret = 0;
@@ -115,22 +118,39 @@ static struct file_operations mmapper_fops = {
        .release        = mmapper_release,
 };
 
+static struct miscdevice mmapper_dev = {
+       .minor          = MISC_DYNAMIC_MINOR,
+       .name           = "mmapper",
+       .fops           = &mmapper_fops
+};
+
 static int __init mmapper_init(void)
 {
+       int err;
+
        printk(KERN_INFO "Mapper v0.1\n");
 
        v_buf = (char *) find_iomem("mmapper", &mmapper_size);
-       if(mmapper_size == 0) return(0);
+       if(mmapper_size == 0){
+               printk(KERN_ERR "mmapper_init - find_iomem failed\n");
+               goto out;
+       }
 
-       p_buf = __pa(v_buf);
+       err = misc_register(&mmapper_dev);
+       if(err){
+               printk(KERN_ERR "mmapper - misc_register failed, err = %d\n",
+                      err);
+               goto out;
+       }
 
-       devfs_mk_cdev(MKDEV(30, 0), S_IFCHR|S_IRUGO|S_IWUGO, "mmapper");
-       devfs_mk_symlink("mmapper0", "mmapper");
-       return(0);
+       p_buf = __pa(v_buf);
+out:
+       return 0;
 }
 
 static void mmapper_exit(void)
 {
+       misc_deregister(&mmapper_dev);
 }
 
 module_init(mmapper_init);