vmware-tools@kernel 2.6.25
Verfasst: 01.07.2008, 16:02
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 ?
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)