diff -Naur a/src/vboxhost/vboxdrv/linux/SUPDrv-linux.c b/src/vboxhost/vboxdrv/linux/SUPDrv-linux.c
--- a/src/vboxhost/vboxdrv/linux/SUPDrv-linux.c	2019-03-15 17:12:45.000000000 +0100
+++ b/src/vboxhost/vboxdrv/linux/SUPDrv-linux.c	2020-10-09 15:48:58.426653566 +0200
@@ -756,12 +756,19 @@
 RTCCUINTREG VBOXCALL supdrvOSChangeCR4(RTCCUINTREG fOrMask, RTCCUINTREG fAndMask)
 {
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 20, 0)
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0)
     RTCCUINTREG uOld = this_cpu_read(cpu_tlbstate.cr4);
+#else
+    RTCCUINTREG uOld = __read_cr4();
+#endif
     RTCCUINTREG uNew = (uOld & fAndMask) | fOrMask;
     if (uNew != uOld)
     {
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0)
         this_cpu_write(cpu_tlbstate.cr4, uNew);
         __write_cr4(uNew);
+#endif
+        ASMSetCR4(uNew);
     }
 #else
     RTCCUINTREG uOld = ASMGetCR4();
diff -Naur a/src/vboxhost/vboxdrv/r0drv/linux/alloc-r0drv-linux.c b/src/vboxhost/vboxdrv/r0drv/linux/alloc-r0drv-linux.c
--- a/src/vboxhost/vboxdrv/r0drv/linux/alloc-r0drv-linux.c	2019-10-30 15:16:23.000000000 +0100
+++ b/src/vboxhost/vboxdrv/r0drv/linux/alloc-r0drv-linux.c	2020-10-09 15:48:58.426653566 +0200
@@ -151,6 +151,8 @@
 
 
 #ifdef RTMEMALLOC_EXEC_VM_AREA
+
+
 /**
  * Allocate executable kernel memory in the module range.
  *
@@ -166,7 +168,12 @@
     struct vm_struct   *pVmArea;
     size_t              iPage;
 
+# if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 8, 0)
+    pVmArea = __get_vm_area_caller(cbAlloc, VM_ALLOC, MODULES_VADDR, MODULES_END,
+                                   __builtin_return_address(0));
+#else
     pVmArea = __get_vm_area(cbAlloc, VM_ALLOC, MODULES_VADDR, MODULES_END);
+#endif
     if (!pVmArea)
         return NULL;
     pVmArea->nr_pages = 0;    /* paranoia? */
@@ -199,6 +206,12 @@
 # endif
         pVmArea->nr_pages = cPages;
         pVmArea->pages    = papPages;
+# if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 8, 0)
+        unsigned long start = (unsigned long)pVmArea->addr;
+        unsigned long size = get_vm_area_size(pVmArea);
+
+        if (!map_kernel_range(start, size, PAGE_KERNEL_EXEC, papPages))
+#else
         if (!map_vm_area(pVmArea, PAGE_KERNEL_EXEC,
 # if LINUX_VERSION_CODE < KERNEL_VERSION(3, 17, 0)
                          &papPagesIterator
@@ -206,6 +219,7 @@
                          papPages
 # endif
                          ))
+#endif
         {
             PRTMEMLNXHDREX pHdrEx = (PRTMEMLNXHDREX)pVmArea->addr;
             pHdrEx->pVmArea     = pVmArea;
diff -Naur a/src/vboxhost/vboxdrv/r0drv/linux/memobj-r0drv-linux.c b/src/vboxhost/vboxdrv/r0drv/linux/memobj-r0drv-linux.c
--- a/src/vboxhost/vboxdrv/r0drv/linux/memobj-r0drv-linux.c	2020-04-02 08:11:13.000000000 +0200
+++ b/src/vboxhost/vboxdrv/r0drv/linux/memobj-r0drv-linux.c	2020-10-09 15:53:17.179985719 +0200
@@ -220,9 +220,17 @@
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 5, 0)
         ulAddr = vm_mmap(NULL, R3PtrFixed, cb, fLnxProt, MAP_SHARED | MAP_ANONYMOUS | MAP_FIXED, 0);
 #else
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0)
         down_write(&pTask->mm->mmap_sem);
+#else
+        down_write(&pTask->mm->mmap_lock);
+#endif
         ulAddr = do_mmap(NULL, R3PtrFixed, cb, fLnxProt, MAP_SHARED | MAP_ANONYMOUS | MAP_FIXED, 0);
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0)
         up_write(&pTask->mm->mmap_sem);
+#else
+        up_write(&pTask->mm->mmap_lock);
+#endif
 #endif
     }
     else
@@ -230,9 +238,17 @@
 #if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 5, 0)
         ulAddr = vm_mmap(NULL, 0, cb, fLnxProt, MAP_SHARED | MAP_ANONYMOUS, 0);
 #else
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0)
         down_write(&pTask->mm->mmap_sem);
+#else
+        down_write(&pTask->mm->mmap_lock);
+#endif
         ulAddr = do_mmap(NULL, 0, cb, fLnxProt, MAP_SHARED | MAP_ANONYMOUS, 0);
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0)
         up_write(&pTask->mm->mmap_sem);
+#else
+        up_write(&pTask->mm->mmap_lock);
+#endif
 #endif
         if (    !(ulAddr & ~PAGE_MASK)
             &&  (ulAddr & (uAlignment - 1)))
@@ -267,13 +283,29 @@
     Assert(pTask == current); RT_NOREF_PV(pTask);
     vm_munmap((unsigned long)pv, cb);
 #elif defined(USE_RHEL4_MUNMAP)
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0)
     down_write(&pTask->mm->mmap_sem);
+#else
+    down_write(&pTask->mm->mmap_lock);
+#endif
     do_munmap(pTask->mm, (unsigned long)pv, cb, 0); /* should it be 1 or 0? */
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0)
     up_write(&pTask->mm->mmap_sem);
 #else
+    up_write(&pTask->mm->mmap_lock);
+#endif
+#else
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0)
     down_write(&pTask->mm->mmap_sem);
+#else
+    down_write(&pTask->mm->mmap_lock);
+#endif
     do_munmap(pTask->mm, (unsigned long)pv, cb);
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0)
     up_write(&pTask->mm->mmap_sem);
+#else
+    up_write(&pTask->mm->mmap_lock);
+#endif
 #endif
 }
 
@@ -591,7 +623,11 @@
                 size_t              iPage;
                 Assert(pTask);
                 if (pTask && pTask->mm)
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0)
                     down_read(&pTask->mm->mmap_sem);
+#else
+                    down_read(&pTask->mm->mmap_lock);
+#endif
 
                 iPage = pMemLnx->cPages;
                 while (iPage-- > 0)
@@ -606,7 +642,11 @@
                 }
 
                 if (pTask && pTask->mm)
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0)
                     up_read(&pTask->mm->mmap_sem);
+#else
+                    up_read(&pTask->mm->mmap_lock);
+#endif
             }
             /* else: kernel memory - nothing to do here. */
             break;
@@ -1073,7 +1113,11 @@
     papVMAs = (struct vm_area_struct **)RTMemAlloc(sizeof(*papVMAs) * cPages);
     if (papVMAs)
     {
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0)
         down_read(&pTask->mm->mmap_sem);
+#else
+        down_read(&pTask->mm->mmap_lock);
+#endif
 
         /*
          * Get user pages.
@@ -1098,7 +1142,9 @@
          */
         else
             rc = get_user_pages_remote(
+# if GET_USER_PAGES_API < KERNEL_VERSION(5, 9, 0)
                                 pTask,                  /* Task for fault accounting. */
+# endif
                                 pTask->mm,              /* Whose pages. */
                                 R3Ptr,                  /* Where from. */
                                 cPages,                 /* How many pages. */
@@ -1158,7 +1204,11 @@
                 papVMAs[rc]->vm_flags |= (VM_DONTCOPY | VM_LOCKED);
             }
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0)
             up_read(&pTask->mm->mmap_sem);
+#else
+            up_read(&pTask->mm->mmap_lock);
+#endif
 
             RTMemFree(papVMAs);
 
@@ -1185,7 +1235,11 @@
 #endif
         }
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0)
         up_read(&pTask->mm->mmap_sem);
+#else
+        up_read(&pTask->mm->mmap_lock);
+#endif
 
         RTMemFree(papVMAs);
         rc = VERR_LOCK_FAILED;
@@ -1595,7 +1649,11 @@
             const size_t    cPages = pMemLnxToMap->Core.cb >> PAGE_SHIFT;
             size_t          iPage;
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0)
             down_write(&pTask->mm->mmap_sem);
+#else
+            down_write(&pTask->mm->mmap_lock);
+#endif
 
             rc = VINF_SUCCESS;
             if (pMemLnxToMap->cPages)
@@ -1712,7 +1770,11 @@
             }
 #endif /* CONFIG_NUMA_BALANCING */
 
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0)
             up_write(&pTask->mm->mmap_sem);
+#else
+            up_write(&pTask->mm->mmap_lock);
+#endif
 
             if (RT_SUCCESS(rc))
             {
diff -Naur a/src/vboxhost/vboxdrv/r0drv/linux/the-linux-kernel.h b/src/vboxhost/vboxdrv/r0drv/linux/the-linux-kernel.h
--- a/src/vboxhost/vboxdrv/r0drv/linux/the-linux-kernel.h	2020-05-11 18:38:20.000000000 +0200
+++ b/src/vboxhost/vboxdrv/r0drv/linux/the-linux-kernel.h	2020-10-09 15:55:15.996651850 +0200
@@ -128,7 +128,11 @@
 #include <linux/interrupt.h>
 #include <linux/completion.h>
 #include <linux/compiler.h>
-#ifndef HAVE_UNLOCKED_IOCTL /* linux/fs.h defines this */
+/* linux/fs.h defines HAVE_UNLOCKED_IOCTL from 2.6.11 till 5.9, but its meaning remains valid */
+#if RTLNX_VER_MIN(5,9,0)
+# define HAVE_UNLOCKED_IOCTL 1
+#endif
+#if !defined(HAVE_UNLOCKED_IOCTL) && RTLNX_VER_MAX(2,6,38)
 # include <linux/smp_lock.h>
 #endif
 /* For the shared folders module */
diff -Naur a/src/vboxhost/vboxdrv/r0drv/linux/thread2-r0drv-linux.c b/src/vboxhost/vboxdrv/r0drv/linux/thread2-r0drv-linux.c
--- a/src/vboxhost/vboxdrv/r0drv/linux/thread2-r0drv-linux.c	2019-11-06 18:42:50.000000000 +0100
+++ b/src/vboxhost/vboxdrv/r0drv/linux/thread2-r0drv-linux.c	2020-10-09 16:02:09.449983265 +0200
@@ -54,51 +54,47 @@
 
 DECLHIDDEN(int) rtThreadNativeSetPriority(PRTTHREADINT pThread, RTTHREADTYPE enmType)
 {
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 11)
-    /* See comment near MAX_RT_PRIO in linux/sched.h for details on
-       sched_priority. */
-    int                 iSchedClass = SCHED_NORMAL;
-    struct sched_param  Param       = { .sched_priority = MAX_PRIO - 1 };
+    int                 iSchedClass = SCHED_FIFO;
+    int                 rc = VINF_SUCCESS;
+    struct sched_param  Param = { 0 };
+
+    RT_NOREF_PV(pThread);
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,9,0)
+    RT_NOREF_PV(iSchedClass);
+    RT_NOREF_PV(Param);
+#endif
     switch (enmType)
     {
-        case RTTHREADTYPE_INFREQUENT_POLLER:
-            Param.sched_priority = MAX_RT_PRIO + 5;
-            break;
-
-        case RTTHREADTYPE_EMULATION:
-            Param.sched_priority = MAX_RT_PRIO + 4;
-            break;
-
-        case RTTHREADTYPE_DEFAULT:
-            Param.sched_priority = MAX_RT_PRIO + 3;
-            break;
-
-        case RTTHREADTYPE_MSG_PUMP:
-            Param.sched_priority = MAX_RT_PRIO + 2;
-            break;
-
         case RTTHREADTYPE_IO:
-            iSchedClass = SCHED_FIFO;
-            Param.sched_priority = MAX_RT_PRIO - 1;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,9,0)
+            /* Set max. priority to preempt all other threads on this CPU. */
+             Param.sched_priority = MAX_RT_PRIO - 1;
+#else
+            /* Effectively changes prio to 50 */
+            sched_set_fifo(current);
+#endif
             break;
 
         case RTTHREADTYPE_TIMER:
-            iSchedClass = SCHED_FIFO;
-            Param.sched_priority = 1; /* not 0 just in case */
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,9,0)
+             Param.sched_priority = 1; /* not 0 just in case */
+#else
+            /* Just one above SCHED_NORMAL class */
+            sched_set_fifo_low(current);
+#endif
             break;
 
         default:
-            AssertMsgFailed(("enmType=%d\n", enmType));
-            return VERR_INVALID_PARAMETER;
+            /* pretend success instead of VERR_NOT_SUPPORTED */
+            return rc;
+    }
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,9,0)
+    if ((sched_setscheduler(current, iSchedClass, &Param)) != 0) {
+        rc = VERR_GENERAL_FAILURE;
     }
 
-    sched_setscheduler(current, iSchedClass, &Param);
-#else
-    RT_NOREF_PV(enmType);
 #endif
-    RT_NOREF_PV(pThread);
-
-    return VINF_SUCCESS;
+    return rc;
 }
 
 
diff -Naur a/src/vboxhost/vboxnetadp/r0drv/linux/the-linux-kernel.h b/src/vboxhost/vboxnetadp/r0drv/linux/the-linux-kernel.h
--- a/src/vboxhost/vboxnetadp/r0drv/linux/the-linux-kernel.h	2020-05-11 18:38:20.000000000 +0200
+++ b/src/vboxhost/vboxnetadp/r0drv/linux/the-linux-kernel.h	2020-10-09 15:55:15.996651850 +0200
@@ -128,7 +128,11 @@
 #include <linux/interrupt.h>
 #include <linux/completion.h>
 #include <linux/compiler.h>
-#ifndef HAVE_UNLOCKED_IOCTL /* linux/fs.h defines this */
+/* linux/fs.h defines HAVE_UNLOCKED_IOCTL from 2.6.11 till 5.9, but its meaning remains valid */
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,9,0)
+# define HAVE_UNLOCKED_IOCTL 1
+#endif
+#if !defined(HAVE_UNLOCKED_IOCTL) && RTLNX_VER_MAX(2,6,38)
 # include <linux/smp_lock.h>
 #endif
 /* For the shared folders module */
diff -Naur a/src/vboxhost/vboxnetflt/r0drv/linux/the-linux-kernel.h b/src/vboxhost/vboxnetflt/r0drv/linux/the-linux-kernel.h
--- a/src/vboxhost/vboxnetflt/r0drv/linux/the-linux-kernel.h	2020-05-11 18:38:20.000000000 +0200
+++ b/src/vboxhost/vboxnetflt/r0drv/linux/the-linux-kernel.h	2020-10-09 15:55:15.996651850 +0200
@@ -128,7 +128,11 @@
 #include <linux/interrupt.h>
 #include <linux/completion.h>
 #include <linux/compiler.h>
-#ifndef HAVE_UNLOCKED_IOCTL /* linux/fs.h defines this */
+/* linux/fs.h defines HAVE_UNLOCKED_IOCTL from 2.6.11 till 5.9, but its meaning remains valid */
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,9,0)
+# define HAVE_UNLOCKED_IOCTL 1
+#endif
+#if !defined(HAVE_UNLOCKED_IOCTL) && LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,38)
 # include <linux/smp_lock.h>
 #endif
 /* For the shared folders module */
diff -Naur a/src/vboxhost/vboxpci/r0drv/linux/the-linux-kernel.h b/src/vboxhost/vboxpci/r0drv/linux/the-linux-kernel.h
--- a/src/vboxhost/vboxpci/r0drv/linux/the-linux-kernel.h	2020-05-11 18:38:20.000000000 +0200
+++ b/src/vboxhost/vboxpci/r0drv/linux/the-linux-kernel.h	2020-10-09 15:55:15.996651850 +0200
@@ -128,7 +128,11 @@
 #include <linux/interrupt.h>
 #include <linux/completion.h>
 #include <linux/compiler.h>
-#ifndef HAVE_UNLOCKED_IOCTL /* linux/fs.h defines this */
+/* linux/fs.h defines HAVE_UNLOCKED_IOCTL from 2.6.11 till 5.9, but its meaning remains valid */
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5,9,0)
+# define HAVE_UNLOCKED_IOCTL 1
+#endif
+#if !defined(HAVE_UNLOCKED_IOCTL) && LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,38)
 # include <linux/smp_lock.h>
 #endif
 /* For the shared folders module */
