Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff -urN vmware-server-kernel.orig/vmmon-only/autoconf/fault.c vmware-server-kernel/vmmon-only/autoconf/fault.c
- --- vmware-server-kernel.orig/vmmon-only/autoconf/fault.c 1970-01-01 01:00:00.000000000 +0100
- +++ vmware-server-kernel/vmmon-only/autoconf/fault.c 2008-09-21 16:56:04.000000000 +0200
- @@@@ -0,0 +1,18 @@
- +/*
- + * we'll try to use fault instead of nopage since 2.6.26
- + */
- +#include <linux/autoconf.h>
- +#include <linux/version.h>
- +
- +#include <linux/mm.h>
- +
- +int LinuxDriverFault(struct vm_area_struct *vma,
- + struct vm_fault *vmf) {
- + (void)vma;
- + (void)vmf;
- + return VM_FAULT_MAJOR;
- +}
- +
- +struct vm_operations_struct vmuser_mops = {
- + .fault = LinuxDriverFault
- +};
- diff -ur vmware-server-kernel.orig/vmmon-only/linux/driver.c vmware-server-kernel/vmmon-only/linux/driver.c
- --- vmware-server-kernel.orig/vmmon-only/linux/driver.c 2008-09-21 16:46:30.000000000 +0200
- +++ vmware-server-kernel/vmmon-only/linux/driver.c 2008-09-21 17:17:54.000000000 +0200
- @@@@ -122,7 +122,12 @@
- static int LinuxDriver_Close(struct inode *inode, struct file *filp);
- static unsigned int LinuxDriverPoll(struct file *file, poll_table *wait);
- -#if defined(VMW_NOPAGE_261)
- +#if defined(VMW_FAULT)
- +int LinuxDriverFault(struct vm_area_struct *vma,
- + struct vm_fault *vmf);
- +int LinuxDriverLockedFault(struct vm_area_struct *vma,
- + struct vm_fault *vmf);
- +#elif defined(VMW_NOPAGE_261)
- static struct page *LinuxDriverNoPage(struct vm_area_struct *vma,
- unsigned long address, int *type);
- static struct page *LinuxDriverLockedNoPage(struct vm_area_struct *vma,
- @@@@ -143,11 +148,19 @@
- static void LinuxDriverPollTimeout(unsigned long clientData);
- static struct vm_operations_struct vmuser_mops = {
- +#if defined(VMW_FAULT)
- + .fault = LinuxDriverFault
- +#else
- .nopage = LinuxDriverNoPage
- +#endif
- };
- struct vm_operations_struct vmuser_locked_mops = {
- +#if defined(VMW_FAULT)
- + .fault = LinuxDriverLockedFault
- +#else
- .nopage = LinuxDriverLockedNoPage
- +#endif
- };
- static struct file_operations vmuser_fops;
- @@@@ -987,7 +1000,10 @@
- *-----------------------------------------------------------------------------
- */
- -#ifdef VMW_NOPAGE_261
- +#if defined(VMW_FAULT)
- +int LinuxDriverFault(struct vm_area_struct *vma, //IN
- + struct vm_fault *vmf) //INOUT
- +#elif defined(VMW_NOPAGE_261)
- static struct page *LinuxDriverNoPage(struct vm_area_struct *vma, //IN
- unsigned long address, //IN
- int *type) //OUT: Fault type
- @@@@ -1004,12 +1020,19 @@
- VMLinux *vmLinux = (VMLinux *) vma->vm_file->private_data;
- unsigned long pg;
- - pg = (address - vma->vm_start) >> PAGE_SHIFT;
- + pg = ((unsigned long)vmf->virtual_address - vma->vm_start) >> PAGE_SHIFT; // use vmf->pgoff?
- if (pg >= vmLinux->size4Gb) {
- +#ifdef VMW_FAULT
- + return VM_FAULT_SIGBUS;
- +#else
- return 0;
- +#endif
- }
- get_page(virt_to_page(vmLinux->pages4Gb[pg]));
- -#ifdef KERNEL_2_4_0
- +#if defined(VMW_FAULT)
- + vmf->page = virt_to_page(vmLinux->pages4Gb[pg]);
- + return VM_FAULT_MAJOR;
- +#elif defined(KERNEL_2_4_0)
- #ifdef VMW_NOPAGE_261
- *type = VM_FAULT_MINOR;
- #endif
- @@@@ -1037,7 +1060,10 @@
- *-----------------------------------------------------------------------------
- */
- -#ifdef VMW_NOPAGE_261
- +#if defined(VMW_FAULT)
- +int LinuxDriverLockedFault(struct vm_area_struct *vma, //IN
- + struct vm_fault *vmf) //INOUT
- +#elif defined(VMW_NOPAGE_261)
- static struct page *LinuxDriverLockedNoPage(struct vm_area_struct *vma, //IN
- unsigned long address, //IN
- int *type) //OUT: Fault type
- @@@@ -1057,33 +1083,56 @@
- struct VMHostEntry* vmhe;
- struct page* result;
- - pg = ((address - vma->vm_start) >> PAGE_SHIFT) + compat_vm_pgoff(vma);
- + pg = (((unsigned long)vmf->virtual_address - vma->vm_start) >> PAGE_SHIFT) + compat_vm_pgoff(vma); // use vmf->pgoff?
- if (pg >= vmLinux->sizeLocked) {
- printk(KERN_DEBUG "vmmon: Something went wrong: entry %08lX out of range (>=%08X) for mapping on filp %p\n", pg, vmLinux->sizeLocked, vmLinux);
- +#ifdef VMW_FAULT
- + return VM_FAULT_SIGBUS;
- +#else
- return NOPAGE_SIGBUS;
- +#endif
- }
- if (!vmLinux->vm || !vmLinux->vm->vmhost) {
- printk(KERN_DEBUG "vmmon: Something went wrong: no vm or vmhost for mapping on filp %p\n", vmLinux);
- +#ifdef VMW_FAULT
- + return VM_FAULT_SIGBUS;
- +#else
- return NOPAGE_SIGBUS;
- +#endif
- }
- pgt = vmLinux->pagesLocked->ent[pg / VMHOST_MAPPING_PT];
- if (!pgt) {
- printk(KERN_DEBUG "vmmon: Something went wrong: missing entry %08lX from mapping on filp %p\n", pg, vmLinux);
- +#ifdef VMW_FAULT
- + return VM_FAULT_SIGBUS;
- +#else
- return NOPAGE_SIGBUS;
- +#endif
- }
- vmhe = kmap(pgt);
- result = vmhe->ent[pg % VMHOST_MAPPING_PT];
- kunmap(pgt);
- if (!result) {
- printk(KERN_DEBUG "vmmon: Something went wrong: attempt to access non-existing entry %08lX in mapping on filp %p\n", pg, vmLinux);
- +#ifdef VMW_FAULT
- + return VM_FAULT_SIGBUS;
- +#else
- return NOPAGE_SIGBUS;
- +#endif
- }
- if (!PhysTrack_Test(vmLinux->vm->vmhost->AWEPages, page_to_pfn(result))) {
- printk(KERN_DEBUG "vmmon: MPN %08lX not tracked! Someone released it before removing it from VA first!\n", pg);
- +#ifdef VMW_FAULT
- + return VM_FAULT_SIGBUS;
- +#else
- return NOPAGE_SIGBUS;
- +#endif
- }
- get_page(result);
- -#ifdef KERNEL_2_4_0
- +#if defined(VMW_FAULT)
- + vmf->page = result;
- + return VM_FAULT_MAJOR;
- +#elif defined(KERNEL_2_4_0)
- #ifdef VMW_NOPAGE_261
- *type = VM_FAULT_MINOR;
- #endif
- diff -ur vmware-server-kernel.orig/vmmon-only/Makefile.kernel vmware-server-kernel/vmmon-only/Makefile.kernel
- --- vmware-server-kernel.orig/vmmon-only/Makefile.kernel 2008-09-21 16:46:30.000000000 +0200
- +++ vmware-server-kernel/vmmon-only/Makefile.kernel 2008-09-21 16:55:08.000000000 +0200
- @@@@ -13,6 +13,7 @@
- EXTRA_CFLAGS := $(CC_OPTS) $(INCLUDE)
- +EXTRA_CFLAGS += $(call vm_check_build, $(SRCROOT)/autoconf/fault.c, -DVMW_FAULT, )
- EXTRA_CFLAGS += $(call vm_check_build, $(SRCROOT)/autoconf/nopage1.c, -DVMW_NOPAGE_261, )
- EXTRA_CFLAGS += $(call vm_check_build, $(SRCROOT)/autoconf/skas1.c, -DVMW_SKAS_MMAP, )
- EXTRA_CFLAGS += $(call vm_check_build, $(SRCROOT)/autoconf/epoll.c, -DVMW_HAVE_EPOLL, )
- diff -ur vmware-server-kernel.orig/vmmon-only/Makefile.normal vmware-server-kernel/vmmon-only/Makefile.normal
- --- vmware-server-kernel.orig/vmmon-only/Makefile.normal 2008-09-21 16:46:30.000000000 +0200
- +++ vmware-server-kernel/vmmon-only/Makefile.normal 2008-09-21 16:55:07.000000000 +0200
- @@@@ -60,6 +60,7 @@
- INCLUDE += $(shell $(CC) $(INCLUDE) -E $(SRCROOT)/autoconf/geninclude.c \
- | sed -n -e 's!^APATH!-I$(HEADER_DIR)/asm!p')
- +CC_OPTS += $(call vm_check_build, $(SRCROOT)/autoconf/fault.c, -DVMW_FAULT, )
- CC_OPTS += $(call vm_check_build, $(SRCROOT)/autoconf/nopage1.c, -DVMW_NOPAGE_261, )
- CC_OPTS += $(call vm_check_build, $(SRCROOT)/autoconf/skas1.c, -DVMW_SKAS_MMAP, )
- CC_OPTS += $(call vm_check_build, $(SRCROOT)/autoconf/epoll.c, -DVMW_HAVE_EPOLL, )
- diff -ur vmware-server-kernel.orig/vmnet-only/bridge.c vmware-server-kernel/vmnet-only/bridge.c
- --- vmware-server-kernel.orig/vmnet-only/bridge.c 2008-09-21 16:46:29.000000000 +0200
- +++ vmware-server-kernel/vmnet-only/bridge.c 2008-09-21 17:31:47.000000000 +0200
- @@@@ -274,7 +274,7 @@
- struct net_device *net) // IN: Network device
- {
- #ifdef VMW_NETDEV_HAS_NET
- - if (net->nd_net != bridge->internalDev->nd_net) {
- + if (dev_net(net) != dev_net(bridge->internalDev)) {
- return 0;
- }
- #endif
- diff -ur vmware-server-kernel.orig/vmnet-only/procfs.c vmware-server-kernel/vmnet-only/procfs.c
- --- vmware-server-kernel.orig/vmnet-only/procfs.c 2008-09-21 16:46:29.000000000 +0200
- +++ vmware-server-kernel/vmnet-only/procfs.c 2008-09-21 17:35:53.000000000 +0200
- @@@@ -63,7 +63,7 @@
- {
- int retval;
- - retval = VNetProc_MakeEntry(&proc_root, "vmnet", S_IFDIR, &base);
- + retval = VNetProc_MakeEntry(NULL, "vmnet", S_IFDIR, &base);
- if (retval) {
- return retval;
- }
- @@@@ -95,7 +95,7 @@
- void
- VNetProc_Cleanup(void)
- {
- - VNetProc_RemoveEntry(base, &proc_root);
- + VNetProc_RemoveEntry(base, NULL);
- base = NULL;
- }
- diff -ur vmware-server-kernel.orig/vmnet-only/vmnetInt.h vmware-server-kernel/vmnet-only/vmnetInt.h
- --- vmware-server-kernel.orig/vmnet-only/vmnetInt.h 2008-09-21 16:46:29.000000000 +0200
- +++ vmware-server-kernel/vmnet-only/vmnetInt.h 2008-09-21 17:30:33.000000000 +0200
- @@@@ -63,7 +63,7 @@
- # define dev_lock_list() read_lock(&dev_base_lock)
- # define dev_unlock_list() read_unlock(&dev_base_lock)
- # ifdef VMW_NETDEV_HAS_NET
- -# define DEV_GET(x) __dev_get_by_name((x)->internalDev->nd_net, (x)->name)
- +# define DEV_GET(x) __dev_get_by_name(dev_net((x)->internalDev), (x)->name)
- # else
- # define DEV_GET(x) __dev_get_by_name((x)->name)
- # endif
- @@@@ -89,7 +89,7 @@
- #ifdef VMW_NETDEV_HAS_NET
- extern struct proto vmnet_proto;
- -# define compat_sk_alloc(_bri, _pri) sk_alloc((_bri)->internalDev->nd_net, \
- +# define compat_sk_alloc(_bri, _pri) sk_alloc(dev_net((_bri)->internalDev), \
- PF_NETLINK, _pri, &vmnet_proto)
- #elif defined(VMW_HAVE_SK_ALLOC_WITH_PROTO)
- extern struct proto vmnet_proto;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement