diff -Nur vmxnet-only.orig/compat_netdevice.h vmxnet-only/compat_netdevice.h
--- vmxnet-only.orig/compat_netdevice.h	2008-03-05 23:52:27.000000000 +0100
+++ vmxnet-only/compat_netdevice.h	2008-04-26 11:58:07.000000000 +0200
@@ -41,7 +41,16 @@
 #   define COMPAT_NETDEV_MOD_INC_USE_COUNT MOD_INC_USE_COUNT
 #   define COMPAT_NETDEV_MOD_DEC_USE_COUNT MOD_DEC_USE_COUNT
 #else
-#   define COMPAT_SET_MODULE_OWNER(dev) SET_MODULE_OWNER(dev)
+/*
+ * SET_MODULE_OWNER disappeared in 2.6.24 again, so make sure to kill it here
+ *
+ * by Alexander Griesser <work@tuxx-home.at>, 2008-03-10
+ */
+#   if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,24)
+#     define COMPAT_SET_MODULE_OWNER(dev) SET_MODULE_OWNER(dev)
+#   else
+#     define COMPAT_SET_MODULE_OWNER(dev) do {} while (0)
+#   endif
 #   define COMPAT_NETDEV_MOD_INC_USE_COUNT do {} while (0)
 #   define COMPAT_NETDEV_MOD_DEC_USE_COUNT do {} while (0)
 #endif
diff -Nur vmxnet-only.orig/vm_basic_types.h vmxnet-only/vm_basic_types.h
--- vmxnet-only.orig/vm_basic_types.h	2008-03-05 23:52:27.000000000 +0100
+++ vmxnet-only/vm_basic_types.h	2008-04-26 11:57:16.000000000 +0200
@@ -13,6 +13,16 @@
 #ifndef _VM_BASIC_TYPES_H_
 #define _VM_BASIC_TYPES_H_
 
+/*
+ * Since we do some kernel version checks in here, make sure to include
+ * compat_version.h.
+ * <linux/types.h> is needed for uintptr on 2.6.24
+ *
+ * by Alexander Griesser <work@tuxx-home.at>, 2008-03-14
+ */
+#include "compat_version.h"
+#include <linux/types.h>
+
 #define INCLUDE_ALLOW_USERLEVEL
 #define INCLUDE_ALLOW_VMMEXT
 #define INCLUDE_ALLOW_MODULE
@@ -152,18 +162,25 @@
 #      endif
 #   endif
 
-#   ifndef _STDINT_H
-#      ifdef VM_I386
-#         ifdef VM_X86_64
+/*
+ * uintptr_t is defined since 2.6.24, so defining it here will lead to
+ * compile errors.
+ *
+ * by Alexander Griesser <work@tuxx-home.at>, 2008-03-10
+ */
+#   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;
-#         else
-             typedef uint32    uintptr_t;
 #         endif
 #      endif
-
-#      ifdef VM_IA64
-          typedef uint64    uintptr_t;
-#      endif
 #   endif
 #endif
 
diff -Nur vmxnet-only.orig/vmxnet.c vmxnet-only/vmxnet.c
--- vmxnet-only.orig/vmxnet.c	2008-03-05 23:52:27.000000000 +0100
+++ vmxnet-only/vmxnet.c	2008-04-26 21:27:26.000000000 +0200
@@ -671,7 +671,18 @@
    u32 paddr;
 
    if (dev->irq == 0 ||	request_irq(dev->irq, &vmxnet_interrupt,
-			            SA_SHIRQ, lp->name, (void *)dev)) {
+/*
+ * With linux kernel 2.6.24 SA_SHIRQ was finally removed in favour of
+ * IRQF_SHARED
+ *
+ * by Alexander Griesser <vmware@tuxx-home.at>, 2008-04-22
+ */
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
+                                    IRQF_SHARED,
+#else
+                                    SA_SHIRQ,
+#endif
+			            lp->name, (void *)dev)) {
       return -EAGAIN;
    }
 
@@ -1055,7 +1066,19 @@
 vmxnet_netpoll(struct net_device *dev)
 {
    disable_irq(dev->irq);
+
+/*
+ * For linux kernels < 2.6.19, vmxnet_interrupt somehow needs to have three
+ * arguments passed to it
+ *
+ * by Alexander Griesser <work@tuxx-home.at>, 2008-04-26
+ */
+#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 */

