Seite 1 von 1

vmware-tools@kernel 2.6.25

Verfasst: 01.07.2008, 16:02
von lisan
Hai, anbei zwei patches

Vorsicht! Der Kernelstub HgfsReadInode muss evtl. nun implementiert werden, das geht allerdings ist aufgabe der hgfs autoren. D.h. shared-folder funktionieren evtl. nicht - ich habe es nicht getestet. Der Rest ist ok.

Änderungen beziehen sich auf changes der kernel 2.6.19, 24 und 25.

Viel erfolg damit.

How to apply the patches ?

Code: Alles auswählen

cd /tmp
mount -t iso9660 /dev/cdrom /media/cdrom
cp /media/cdrom/VMware*.tar.gz /tmp
tar zxvf VMware-Tools-xy.tar.gz
cd vmware-tools-distrib/lib/modules/source/
tar xvf vmhgfs.tar
tar xvf vmxnet.tar
for i in /tmp/*.patch; do patch -p1 < $i; done
tar cvf --remove-files vmnet.tar vmxnet-only
tar cvf --remove-files vmhgfs.tar vmhgfs-only
cd ../../..
vmware-install.pl


Code: Alles auswählen

diff -Naur old/vmxnet-only//vmxnet.c new/vmxnet-only//vmxnet.c
--- old/vmxnet-only//vmxnet.c   2008-05-10 05:41:08.000000000 +0200
+++ new/vmxnet-only//vmxnet.c   2008-07-03 18:32:54.000000000 +0200
@@ -46,6 +46,11 @@
 static int vmxnetForceTcpCsumOffload = 1;
 #endif
 
+#ifndef IRQF_SHARED
+#define IRQF_SHARED SA_SHIRQ
+#endif
+
+
 static int vmxnet_debug = 1;
 
 #define VMXNET_WATCHDOG_TIMEOUT (5 * HZ)
@@ -672,7 +677,7 @@
    u32 paddr;
 
    if (dev->irq == 0 ||   request_irq(dev->irq, &vmxnet_interrupt,
-                     SA_SHIRQ, lp->name, (void *)dev)) {
+                     IRQF_SHARED, lp->name, (void *)dev)) {
       return -EAGAIN;
    }
 
@@ -1042,7 +1047,11 @@
 vmxnet_netpoll(struct net_device *dev)
 {
    disable_irq(dev->irq);
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,19)
    vmxnet_interrupt(dev->irq, dev, NULL);
+#else
+   vmxnet_interrupt(dev->irq, dev);
+#endif
    enable_irq(dev->irq);
 }
 #endif /* VMW_HAVE_POLL_CONTROLLER */


Code: Alles auswählen

diff -Naur old/vmhgfs-only//driver.c new/vmhgfs-only//driver.c
--- old/vmhgfs-only//driver.c   2008-05-10 05:41:11.000000000 +0200
+++ new/vmhgfs-only//driver.c   2008-07-03 18:17:15.000000000 +0200
@@ -28,6 +28,11 @@
 #define KERNEL_25_FS 1
 #endif
 
+/* forward declaration of HgfsReadInode
+ * stub only
+ */
+void HgfsReadInode(struct inode *inode);
+
 /*
  * Macros for accessing members that are private to this code in
  * sb/inode/file structs.
@@ -882,9 +887,21 @@
    ASSERT(remoteName);
 
    LOG(6, (KERN_DEBUG "VMware hgfs: HgfsIget: entered\n"));
-
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)
    inode = iget(sb, ino);
+#else
+   inode = iget_locked(sb, ino);
+#endif
    if (inode) {
+/* redefinition of iget
+ * @see <include/fs.h> and porting documentation of your kernel code for details
+ */
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,25)     
+      if (inode->i_state & I_NEW) {
+          HgfsReadInode(inode);
+          unlock_new_inode(inode);
+      } // else I_LOCK locked already
+#endif
       /*
        * When it creates a new VFS inode, iget() sets INODE_GET_II_P(inode) to
        * NULL. --hpreg
@@ -4252,9 +4269,10 @@
    /* Optional */
    clear_inode:  HgfsClearInode,
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,25)
    /* Mandatory */
    read_inode:   HgfsReadInode,
-
+#endif
    /* Optional */
    put_super:    HgfsPutSuper,
 
diff -Naur old/vmhgfs-only//vm_basic_types.h new/vmhgfs-only//vm_basic_types.h
--- old/vmhgfs-only//vm_basic_types.h   2008-05-10 05:41:11.000000000 +0200
+++ new/vmhgfs-only//vm_basic_types.h   2008-07-03 18:17:20.000000000 +0200
@@ -25,6 +25,10 @@
 #define INCLUDE_ALLOW_VMCORE
 #include "includeCheck.h"
 
+#ifndef LINUX_VERSION_CODE
+#include <linux/version.h>
+#endif
+
 /* STRICT ANSI means the Xserver build and X defines Bool differently. */
 #if !defined(__STRICT_ANSI__) || defined(__FreeBSD__)
 typedef char           Bool;
@@ -152,19 +156,21 @@
           typedef int64     intptr_t;
 #      endif
 #   endif
-
-#   ifndef _STDINT_H
-#      ifdef VM_I386
-#         ifdef VM_X86_64
-             typedef uint64    uintptr_t;
-#         else
-             typedef uint32    uintptr_t;
-#         endif
-#      endif
-
-#      ifdef VM_IA64
-          typedef uint64    uintptr_t;
-#      endif
+/* In Linux >= 2.6.24, linux/types.h has uintptr_t typedef */
+#   if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)
+#       ifndef _STDINT_H
+#           ifdef VM_I386
+#           ifdef VM_X86_64
+               typedef uint64    uintptr_t;
+#           else
+               typedef uint32    uintptr_t;
+#           endif
+#        endif
+
+#        ifdef VM_IA64
+            typedef uint64    uintptr_t;
+#        endif
+#     endif
 #   endif
 #endif
 
@@ -259,9 +265,6 @@
 #define MAX_UINT64 (CONST64U(0xffffffffffffffff))
 
 
-typedef uintptr_t VA;
-typedef uintptr_t VPN;
-
 typedef uint64    PA;
 typedef uint32    PPN;
 
@@ -293,8 +296,6 @@
  * Linear address
  */
 
-typedef uintptr_t LA;
-typedef uintptr_t LPN;
 #define LA_2_LPN(_la)     ((_la) >> PAGE_SHIFT)
 #define LPN_2_LA(_lpn)    ((_lpn) << PAGE_SHIFT)