Hello Everyone,
Currently virtualbox fails to compile for kernel version 4.9 and up.
This is due to a change in get_user_pages api.
The ints for write and force have changed to gup_flags.
Please find the patch attach to fix this for linux 4.9 and up.
Thanks,
Reinoud.
--- source/r0drv/linux/memobj-r0drv-linux.c.orig 2017-08-01 15:57:35.175068385 -0700
+++ source/r0drv/linux/memobj-r0drv-linux.c 2017-08-01 15:55:43.357301836 -0700
@@ -1018,6 +1018,14 @@
PRTR0MEMOBJLNX pMemLnx;
int rc = VERR_NO_MEMORY;
int const fWrite = fAccess & RTMEM_PROT_WRITE ? 1 : 0;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 9, 0)
+ unsigned int flags = 0;
+
+ if (fWrite) {
+ flags = FOLL_WRITE;
+ flags |= FOLL_FORCE;
+ }
+#endif
/*
* Check for valid task and size overflows.
@@ -1045,7 +1053,27 @@
/*
* Get user pages.
*/
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0)
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 9, 0)
+ if (R0Process == RTR0ProcHandleSelf())
+ rc = get_user_pages(R3Ptr, /* Where from. */
+ cPages, /* How many pages. */
+ flags, /* gup_flags. */
+ &pMemLnx->apPages[0], /* Page array. */
+ papVMAs); /* vmas */
+ /*
+ * Actually this should not happen at the moment as call this function
+ * only for our own process.
+ */
+ else
+ rc = get_user_pages_remote(
+ pTask, /* Task for fault accounting. */
+ pTask->mm, /* Whose pages. */
+ R3Ptr, /* Where from. */
+ cPages, /* How many pages. */
+ flags, /* gup_flags. */
+ &pMemLnx->apPages[0], /* Page array. */
+ papVMAs); /* vmas */
+#elif LINUX_VERSION_CODE >= KERNEL_VERSION(4, 6, 0)
if (R0Process == RTR0ProcHandleSelf())
rc = get_user_pages(R3Ptr, /* Where from. */
cPages, /* How many pages. */
_______________________________________________
vbox-dev mailing list
[email protected]
https://www.virtualbox.org/mailman/listinfo/vbox-dev