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,