kernel-2.6.23-rc8 & VMware server 1.0.4 (build-56528)

例によって linux-2.6.23-rc8 では, VMware server 1.0.4 (build-56528) の vmmon,vmnet がコンパイルできない.以下,簡単なパッチを書いたのでメモ.

vmnet-only.tar 用パッチ.

--- vmmon-only/linux/driver.c.orig~	2007-09-26 23:13:22.000000000 +0900
+++ vmmon-only/linux/driver.c	2007-09-26 23:14:36.000000000 +0900
@@ -1656,7 +1656,7 @@
           current->egid == current->gid &&
 	  current->fsgid == current->gid) {
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 4, 7)
-	 current->mm->dumpable = 1;
+	 set_dumpable(current->mm, MMF_DUMP_SECURELY);
 #else
 	 current->dumpable = 1;
 #endif
@@ -2309,3 +2309,4 @@
 
 MODULE_AUTHOR("VMware, Inc.");
 MODULE_DESCRIPTION("VMware Virtual Machine Monitor.");
+MODULE_LICENSE("GPL"); /* I HATE EXPORT_SYMBOL_GPL !!! */

linux-2.6.23から提供予定の set_dumpable() という関数は,マクロ EXPORT_SYMBOL_GPL でexportされているため 非GPLなモジュールからはリンクできない.そのため,強引に MODULE_LICENSE("GPL") を付けてとりあえず動くようにした.lkml をちらりと覗くと EXPORT_SYMBOL_GPL に関しては宗教論争的議論が展開されている模様.

vmnet-only.tar 用パッチ.

--- vmnet-only/vmnetInt.h.orig~ 2007-09-26 23:16:19.000000000 +0900
+++ vmnet-only/vmnetInt.h       2007-09-26 23:16:48.000000000 +0900
@@ -25,10 +25,8 @@
 #else
 #   define compat_fop_set_owner(_pFop)
 #   define compat_mod_inc_refcount do { \
-   MOD_INC_USE_COUNT;                   \
 } while (0)
 #   define compat_mod_dec_refcount do { \
-   MOD_DEC_USE_COUNT;                   \
 } while (0)
 #endif 
--- vmnet-only/driver.c.orig~   2007-09-26 23:16:10.000000000 +0900
+++ vmnet-only/driver.c 2007-09-26 23:16:38.000000000 +0900
@@ -516,14 +516,8 @@
 void
 cleanup_module(void)
 {
-   int retval;
-
    unregister_ioctl32_handlers();
-   retval =  unregister_chrdev(VNET_MAJOR_NUMBER, "vmnet");
-   if (retval != 0 ) {
-      LOG(0, (KERN_WARNING "/dev/vmnet: could not unregister major device %d\n"
, 
-             VNET_MAJOR_NUMBER));
-   }
+   unregister_chrdev(VNET_MAJOR_NUMBER, "vmnet");
    VNetProtoUnregister();
    VNetProc_Cleanup();
 }

MOD_DEC_USE_COUNT はもはや不要.また unregister_chrdev() は返り値がvoidに変更された模様.