例によって 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に変更された模様.