Hi,

I've same issue here. Thanks Anthony for the VB link.

Package: virtualbox-dkms
Version: 6.1.4-dfsg-2

Issue with kernel linux-image-5.6.0-1-amd64, version 5.6.7-1.


According to https://www.virtualbox.org/ticket/19312 , there are 2 issues:
- one into "memobj-r0drv-linux.c"
- the other into "time.h" and "time-r0drv-linux.c", related with time64
kernel function.


I attach log files for 2 issues, and 3 patchs from VB web site.

Once files patched, dkms vb modules compilation does not fail anymore.


Be carefull, according to
https://www.virtualbox.org/attachment/ticket/19312/timet.patch , "The
patch is working for 5.6-rc3+, but will break older versions :( "

But on my computer, I was able to compile DKMS modules and run
virtualbox guests on both 5.5 and 5.6 host linux kernels


        Thanks for your help !

                                        Olivier
DKMS make.log for virtualbox-6.1.4 for kernel 5.6.0-1-amd64 (x86_64)
dimanche 10 mai 2020, 16:12:51 (UTC+0200)
make : on entre dans le répertoire « /usr/src/linux-headers-5.6.0-1-amd64 »
  CC [M]  /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/linux/SUPDrv-linux.o
  CC [M]  /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/SUPDrv.o
  CC [M]  /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/SUPDrvGip.o
  CC [M]  /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/SUPDrvSem.o
  CC [M]  /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/SUPDrvTracer.o
  CC [M]  /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/SUPLibAll.o
/var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/SUPDrvTracer.o: warning: objtool: .text+0x7: indirect jump found in RETPOLINE build
/var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/SUPDrvTracer.o: warning: objtool: supdrvTracerProbeFireStub() is missing an ELF size annotation
  CC [M]  /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/r0drv/alloc-r0drv.o
  CC [M]  /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/r0drv/initterm-r0drv.o
  CC [M]  /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/r0drv/memobj-r0drv.o
  CC [M]  /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/r0drv/mpnotification-r0drv.o
  CC [M]  /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/r0drv/powernotification-r0drv.o
  CC [M]  /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/r0drv/linux/assert-r0drv-linux.o
  CC [M]  /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/r0drv/linux/alloc-r0drv-linux.o
  CC [M]  /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/r0drv/linux/initterm-r0drv-linux.o
  CC [M]  /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/r0drv/linux/memobj-r0drv-linux.o
  CC [M]  /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/r0drv/linux/memuserkernel-r0drv-linux.o
  CC [M]  /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/r0drv/linux/mp-r0drv-linux.o
  CC [M]  /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/r0drv/linux/mpnotification-r0drv-linux.o
/var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/r0drv/linux/memuserkernel-r0drv-linux.o: warning: objtool: rtR0MemKernelCopyLnxWorker.part.0()+0xe: redundant CLD
  CC [M]  /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/r0drv/linux/process-r0drv-linux.o
  CC [M]  /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/r0drv/linux/rtStrFormatKernelAddress-r0drv-linux.o
  CC [M]  /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/r0drv/linux/semevent-r0drv-linux.o
  CC [M]  /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/r0drv/linux/semeventmulti-r0drv-linux.o
In file included from /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/r0drv/linux/waitqueue-r0drv-linux.h:38,
                 from /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/r0drv/linux/semevent-r0drv-linux.c:42:
/var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/include/iprt/time.h: In function ‘RTTimeSpecGetTimeval’:
/var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/include/iprt/time.h:379:13: error: dereferencing pointer to incomplete type ‘struct timeval’
  379 |     pTimeval->tv_sec = (time_t)i64;
      |             ^~
/var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/include/iprt/time.h:379:25: error: ‘time_t’ undeclared (first use in this function); did you mean ‘ktime_t’?
  379 |     pTimeval->tv_sec = (time_t)i64;
      |                         ^~~~~~
      |                         ktime_t
/var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/include/iprt/time.h:379:25: note: each undeclared identifier is reported only once for each function it appears in
/var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/include/iprt/time.h:379:32: error: expected ‘;’ before ‘i64’
  379 |     pTimeval->tv_sec = (time_t)i64;
      |                                ^~~
      |                                ;
/var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/include/iprt/time.h: In function ‘RTTimeSpecSetTimeval’:
/var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/include/iprt/time.h:393:67: error: dereferencing pointer to incomplete type ‘const struct timeval’
  393 |     return RTTimeSpecAddMicro(RTTimeSpecSetSeconds(pTime, pTimeval->tv_sec), pTimeval->tv_usec);
      |                                                                   ^~
  CC [M]  /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/r0drv/linux/semfastmutex-r0drv-linux.o
make[3]: *** [/usr/src/linux-headers-5.6.0-1-common/scripts/Makefile.build:273: /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/r0drv/linux/semevent-r0drv-linux.o] Error 1
make[3]: *** Attente des tâches non terminées....
In file included from /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/r0drv/linux/waitqueue-r0drv-linux.h:38,
                 from /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/r0drv/linux/semeventmulti-r0drv-linux.c:42:
/var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/include/iprt/time.h: In function ‘RTTimeSpecGetTimeval’:
/var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/include/iprt/time.h:379:13: error: dereferencing pointer to incomplete type ‘struct timeval’
  379 |     pTimeval->tv_sec = (time_t)i64;
      |             ^~
/var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/include/iprt/time.h:379:25: error: ‘time_t’ undeclared (first use in this function); did you mean ‘ktime_t’?
  379 |     pTimeval->tv_sec = (time_t)i64;
      |                         ^~~~~~
      |                         ktime_t
/var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/include/iprt/time.h:379:25: note: each undeclared identifier is reported only once for each function it appears in
/var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/include/iprt/time.h:379:32: error: expected ‘;’ before ‘i64’
  379 |     pTimeval->tv_sec = (time_t)i64;
      |                                ^~~
      |                                ;
/var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/include/iprt/time.h: In function ‘RTTimeSpecSetTimeval’:
/var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/include/iprt/time.h:393:67: error: dereferencing pointer to incomplete type ‘const struct timeval’
  393 |     return RTTimeSpecAddMicro(RTTimeSpecSetSeconds(pTime, pTimeval->tv_sec), pTimeval->tv_usec);
      |                                                                   ^~
make[3]: *** [/usr/src/linux-headers-5.6.0-1-common/scripts/Makefile.build:273: /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/r0drv/linux/semeventmulti-r0drv-linux.o] Error 1
make[2]: *** [/usr/src/linux-headers-5.6.0-1-common/scripts/Makefile.build:510: /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv] Error 2
make[1]: *** [/usr/src/linux-headers-5.6.0-1-common/Makefile:1696: /var/lib/dkms/virtualbox/6.1.4/build] Error 2
make: *** [/usr/src/linux-headers-5.6.0-1-common/Makefile:180: sub-make] Error 2
make : on quitte le répertoire « /usr/src/linux-headers-5.6.0-1-amd64 »
DKMS make.log for virtualbox-6.1.4 for kernel 5.6.0-1-amd64 (x86_64)
dimanche 10 mai 2020, 16:07:35 (UTC+0200)
make : on entre dans le répertoire « /usr/src/linux-headers-5.6.0-1-amd64 »
  CC [M]  /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/linux/SUPDrv-linux.o
  CC [M]  /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/SUPDrv.o
  CC [M]  /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/SUPDrvGip.o
  CC [M]  /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/SUPDrvSem.o
  CC [M]  /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/SUPDrvTracer.o
/var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/SUPDrvTracer.o: warning: objtool: .text+0x7: indirect jump found in RETPOLINE build
/var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/SUPDrvTracer.o: warning: objtool: supdrvTracerProbeFireStub() is missing an ELF size annotation
  CC [M]  /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/SUPLibAll.o
  CC [M]  /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/r0drv/alloc-r0drv.o
  CC [M]  /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/r0drv/initterm-r0drv.o
  CC [M]  /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/r0drv/memobj-r0drv.o
  CC [M]  /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/r0drv/mpnotification-r0drv.o
  CC [M]  /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/r0drv/powernotification-r0drv.o
  CC [M]  /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/r0drv/linux/assert-r0drv-linux.o
  CC [M]  /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/r0drv/linux/alloc-r0drv-linux.o
  CC [M]  /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/r0drv/linux/initterm-r0drv-linux.o
  CC [M]  /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/r0drv/linux/memobj-r0drv-linux.o
  CC [M]  /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/r0drv/linux/memuserkernel-r0drv-linux.o
/var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/r0drv/linux/memobj-r0drv-linux.c: In function ‘rtR0MemObjNativeMapKernel’:
/var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/r0drv/linux/memobj-r0drv-linux.c:1465:32: error: implicit declaration of function ‘ioremap_nocache’; did you mean ‘ioremap_cache’? [-Werror=implicit-function-declaration]
 1465 |                              ? ioremap_nocache(pMemLnxToMap->Core.u.Phys.PhysBase + offSub, cbSub)
      |                                ^~~~~~~~~~~~~~~
      |                                ioremap_cache
/var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/r0drv/linux/memobj-r0drv-linux.c:1466:30: warning: pointer/integer type mismatch in conditional expression
 1466 |                              : ioremap(pMemLnxToMap->Core.u.Phys.PhysBase + offSub, cbSub);
      |                              ^
  CC [M]  /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/r0drv/linux/mp-r0drv-linux.o
  CC [M]  /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/r0drv/linux/mpnotification-r0drv-linux.o
cc1: some warnings being treated as errors
make[3]: *** [/usr/src/linux-headers-5.6.0-1-common/scripts/Makefile.build:273: /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/r0drv/linux/memobj-r0drv-linux.o] Error 1
make[3]: *** Attente des tâches non terminées....
/var/lib/dkms/virtualbox/6.1.4/build/vboxdrv/r0drv/linux/memuserkernel-r0drv-linux.o: warning: objtool: rtR0MemKernelCopyLnxWorker.part.0()+0xe: redundant CLD
make[2]: *** [/usr/src/linux-headers-5.6.0-1-common/scripts/Makefile.build:510: /var/lib/dkms/virtualbox/6.1.4/build/vboxdrv] Error 2
make[1]: *** [/usr/src/linux-headers-5.6.0-1-common/Makefile:1696: /var/lib/dkms/virtualbox/6.1.4/build] Error 2
make: *** [/usr/src/linux-headers-5.6.0-1-common/Makefile:180: sub-make] Error 2
make : on quitte le répertoire « /usr/src/linux-headers-5.6.0-1-amd64 »
*** /usr/src/virtualbox-6.1.4/r0drv/linux/time-r0drv-linux.c.2020-05-10	2020-05-10 16:30:53.360893292 +0200
--- /usr/src/virtualbox-6.1.4/r0drv/linux/time-r0drv-linux.c	2020-05-10 16:31:28.743744940 +0200
*************** DECLINLINE(uint64_t) rtTimeGetSystemNano
*** 43,50 ****
       * Use ktime_get_ts, this is also what clock_gettime(CLOCK_MONOTONIC,) is using.
       */
      uint64_t u64;
!     struct timespec Ts;
!     ktime_get_ts(&Ts);
      u64 = Ts.tv_sec * RT_NS_1SEC_64 + Ts.tv_nsec;
      return u64;
  
--- 43,50 ----
       * Use ktime_get_ts, this is also what clock_gettime(CLOCK_MONOTONIC,) is using.
       */
      uint64_t u64;
!     struct timespec64 Ts;
!     ktime_get_ts64(&Ts);
      u64 = Ts.tv_sec * RT_NS_1SEC_64 + Ts.tv_nsec;
      return u64;
  
*** /usr/src/virtualbox-6.1.4/include/iprt/time.h.2020-05-10	2020-05-10 16:25:29.451382494 +0200
--- /usr/src/virtualbox-6.1.4/include/iprt/time.h	2020-05-10 16:30:25.957782382 +0200
*************** DECLINLINE(void) RTTimeSpecGetSecondsAnd
*** 366,371 ****
--- 366,372 ----
   * @param   pTime       The time spec to interpret.
   * @param   pTimeval    Where to store the time as POSIX timeval.
   */
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(5, 5, 99) 
  DECLINLINE(struct timeval *) RTTimeSpecGetTimeval(PCRTTIMESPEC pTime, struct timeval *pTimeval)
  {
      int64_t i64 = RTTimeSpecGetMicro(pTime);
*************** DECLINLINE(PRTTIMESPEC) RTTimeSpecSetTim
*** 392,403 ****
--- 393,406 ----
  {
      return RTTimeSpecAddMicro(RTTimeSpecSetSeconds(pTime, pTimeval->tv_sec), pTimeval->tv_usec);
  }
+ #endif
  #endif /* various ways of detecting struct timeval */
  
  
  /* PORTME: Add struct timespec guard macro here. */
  #if defined(RTTIME_INCL_TIMESPEC) || defined(_STRUCT_TIMESPEC) || defined(_SYS__TIMESPEC_H_) || defined(TIMEVAL_TO_TIMESPEC) || defined(_TIMESPEC) \
   || (defined(RT_OS_NETBSD) && defined(_SYS_TIME_H_))
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(5, 5, 99) 
  /**
   * Gets the time as POSIX timespec.
   *
*************** DECLINLINE(PRTTIMESPEC) RTTimeSpecSetTim
*** 431,445 ****
  {
      return RTTimeSpecAddNano(RTTimeSpecSetSeconds(pTime, pTimespec->tv_sec), pTimespec->tv_nsec);
  }
  
  
  # ifdef _LINUX_TIME64_H
  DECLINLINE(PRTTIMESPEC) RTTimeSpecSetTimespec64(PRTTIMESPEC pTime, const struct timespec64 *pTimeval)
  {
      return RTTimeSpecAddNano(RTTimeSpecSetSeconds(pTime, pTimeval->tv_sec), pTimeval->tv_nsec);
  }
! # endif
! #endif /* various ways of detecting struct timespec */
  
  
  
--- 434,450 ----
  {
      return RTTimeSpecAddNano(RTTimeSpecSetSeconds(pTime, pTimespec->tv_sec), pTimespec->tv_nsec);
  }
+ #endif 
  
  
+ #endif /* various ways of detecting struct timespec */ 
+ 
  # ifdef _LINUX_TIME64_H
  DECLINLINE(PRTTIMESPEC) RTTimeSpecSetTimespec64(PRTTIMESPEC pTime, const struct timespec64 *pTimeval)
  {
      return RTTimeSpecAddNano(RTTimeSpecSetSeconds(pTime, pTimeval->tv_sec), pTimeval->tv_nsec);
  }
! #endif
  
  
  
*** /usr/src/virtualbox-6.1.4/r0drv/linux/memobj-r0drv-linux.c.2020-05-08	2020-05-08 16:33:22.534231284 +0200
--- /usr/src/virtualbox-6.1.4/r0drv/linux/memobj-r0drv-linux.c	2020-05-10 16:12:13.645207042 +0200
*************** DECLHIDDEN(int) rtR0MemObjNativeMapKerne
*** 1461,1469 ****
--- 1461,1473 ----
               * MMIO / physical memory.
               */
              Assert(pMemLnxToMap->Core.enmType == RTR0MEMOBJTYPE_PHYS && !pMemLnxToMap->Core.u.Phys.fAllocated);
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 6, 0) 
+ 	    pMemLnx->Core.pv = ioremap(pMemLnxToMap->Core.u.Phys.PhysBase + offSub, cbSub);
+ #else 
              pMemLnx->Core.pv = pMemLnxToMap->Core.u.Phys.uCachePolicy == RTMEM_CACHE_POLICY_MMIO
                               ? ioremap_nocache(pMemLnxToMap->Core.u.Phys.PhysBase + offSub, cbSub)
                               : ioremap(pMemLnxToMap->Core.u.Phys.PhysBase + offSub, cbSub);
+ #endif 
              if (pMemLnx->Core.pv)
              {
                  /** @todo fix protection. */

Reply via email to