Here's a new version of the patch.
This should be more correct.
But, I do make one assumption on line # 359 which I am not sure
is correct.
Index: freemware/kernel/host-linux.c
===================================================================
RCS file: /cvsroot-freemware/freemware/kernel/host-linux.c,v
retrieving revision 1.13
diff -u -r1.13 host-linux.c
--- freemware/kernel/host-linux.c       1999/12/02 00:12:31     1.13
+++ freemware/kernel/host-linux.c       1999/12/07 06:19:36
@@ -77,6 +77,9 @@
 
 // For the /proc/freemware entry
 int fmw_read_procmem(char *, char **, off_t, int, int);
+
+#if LINUX_VERSION_CODE >= VERSION_CODE(2,3,25)
+#else
 static struct proc_dir_entry fmw_proc_entry = {
     0,                  // dynamic inode
     9, "freemware",     // len, name
@@ -86,6 +89,7 @@
     NULL,
     &fmw_read_procmem,  // read function
 };
+#endif
 
 
 
@@ -93,7 +97,6 @@
 /* Macros                                                               */
 /************************************************************************/
 
-
 // Check for pending signals
 inline unsigned pending_signals(void)
 {
@@ -145,7 +148,14 @@
     }
 
     // register the /proc entry
+    #ifdef CONFIG_PROC_FS
+#if LINUX_VERSION_CODE >= VERSION_CODE(2,3,25)
+    if (!create_proc_info_entry("freemware", 0, NULL, fmw_read_procmem))
+      printk(KERN_ERR "freemware: registering /proc/freewmare failed\n");
+#else
     proc_register_dynamic(&proc_root, &fmw_proc_entry);
+#endif
+    #endif
 
     // retrieve the monitor physical pages
     retrieve_monitor_pages();
@@ -168,7 +178,14 @@
     unregister_chrdev(FMW_MAJOR, "freemware");
 
     // unregister /proc entry
+
+    #ifdef CONFIG_PROC_FS
+#if LINUX_VERSION_CODE >= VERSION_CODE(2,3,26)
+    remove_proc_entry("freemware", NULL);
+#else
     proc_unregister(&proc_root, fmw_proc_entry.low_ino);
+#endif
+    #endif
 }
 
 
@@ -338,22 +355,39 @@
     }
 
     /* To simplify things, allow only page-aligned offsets */
+#if LINUX_VERSION_CODE >= VERSION_CODE(2,3,25)
+       /* assuming since offset is in pages, offsets are always aligned
+        -- is this correct? */ 
+#else
     if ( vma->vm_offset & (PAGE_SIZE - 1) ) {
         printk(KERN_WARNING "freemware: unaligned offset %08lx\n", vma->vm_offset);
         return -EINVAL;
     }
+#endif
 
     /* Sanity check */
+#if LINUX_VERSION_CODE >= VERSION_CODE(2,3,25)
+    if (    vma->vm_pgoff < 0
+         || vma->vm_pgoff + ((vma->vm_end - vma->vm_start) / PAGE_SIZE)
+          > vm_pages.guest_n_pages)
+    {
+        printk(KERN_WARNING "freemware: offset page %08lx out of range\n", 
+vma->vm_pgoff);
+#else
     if (    vma->vm_offset < 0
          || vma->vm_offset + (vma->vm_end - vma->vm_start)
           > vm_pages.guest_n_pages * PAGE_SIZE )
     {
         printk(KERN_WARNING "freemware: offset %08lx out of range\n", 
vma->vm_offset);
+#endif
         return -EINVAL;
     }
 
     /* Map all requested guest pages in ... */
+#if LINUX_VERSION_CODE >= VERSION_CODE(2,3,25)
+    firstpage = vma->vm_pgoff;
+#else
     firstpage = vma->vm_offset / PAGE_SIZE;
+#endif
     nr_pages  = (vma->vm_end - vma->vm_start) / PAGE_SIZE;
     for ( i = 0; i < nr_pages; i++ )
         if ( remap_page_range( vma->vm_start + i*PAGE_SIZE,

Reply via email to