diff --git a/vboxdrv/r0drv/linux/mp-r0drv-linux.c b/vboxdrv/r0drv/linux/mp-r0drv-linux.c index ee219b7..eff4f2c 100644 --- a/vboxdrv/r0drv/linux/mp-r0drv-linux.c +++ b/vboxdrv/r0drv/linux/mp-r0drv-linux.c @@ -283,12 +283,15 @@ RTDECL(int) RTMpOnAll(PFNRTMPWORKER pfnWorker, void *pvUser1, void *pvUser2) if (RTCpuSetCount(&OnlineSet) > 1) { /* Fire the function on all other CPUs without waiting for completion. */ -# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27) +# if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0) + NOREF(smp_call_function(rtmpLinuxAllWrapper, &Args, 0 /* wait */)); +# elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27) int rc = smp_call_function(rtmpLinuxAllWrapper, &Args, 0 /* wait */); + Assert(!rc); NOREF(rc); # else int rc = smp_call_function(rtmpLinuxAllWrapper, &Args, 0 /* retry */, 0 /* wait */); -# endif Assert(!rc); NOREF(rc); +# endif } #endif @@ -337,14 +340,19 @@ RTDECL(int) RTMpOnOthers(PFNRTMPWORKER pfnWorker, void *pvUser1, void *pvUser2) Args.cHits = 0; RTThreadPreemptDisable(&PreemptState); -# if LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27) +# if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0) + NOREF(smp_call_function(rtmpLinuxWrapper, &Args, 1 /* wait */)); +# elif LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27) /* older kernels */ rc = smp_call_function(rtmpLinuxWrapper, &Args, 1 /* wait */); -# else /* older kernels */ +# else rc = smp_call_function(rtmpLinuxWrapper, &Args, 0 /* retry */, 1 /* wait */); # endif /* older kernels */ RTThreadPreemptRestore(&PreemptState); +# if LINUX_VERSION_CODE < KERNEL_VERSION(5, 3, 0) Assert(rc == 0); NOREF(rc); +# endif + IPRT_LINUX_RESTORE_EFL_AC(); #else RT_NOREF(pfnWorker, pvUser1, pvUser2); diff --git a/vboxnetflt/linux/VBoxNetFlt-linux.c b/vboxnetflt/linux/VBoxNetFlt-linux.c index 0068f04..93845d0 100644 --- a/vboxnetflt/linux/VBoxNetFlt-linux.c +++ b/vboxnetflt/linux/VBoxNetFlt-linux.c @@ -2107,6 +2107,10 @@ static int vboxNetFltLinuxEnumeratorCallback(struct notifier_block *self, unsign struct in_device *in_dev; struct inet6_dev *in6_dev; +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0) + const struct in_ifaddr *ifa; +#endif + if (ulEventType != NETDEV_REGISTER) return NOTIFY_OK; @@ -2123,7 +2127,12 @@ static int vboxNetFltLinuxEnumeratorCallback(struct notifier_block *self, unsign #endif if (in_dev != NULL) { +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0) + rcu_read_lock(); + in_dev_for_each_ifa_rcu(ifa, in_dev) { +#else for_ifa(in_dev) { +#endif if (VBOX_IPV4_IS_LOOPBACK(ifa->ifa_address)) return NOTIFY_OK; @@ -2137,7 +2146,11 @@ static int vboxNetFltLinuxEnumeratorCallback(struct notifier_block *self, unsign pThis->pSwitchPort->pfnNotifyHostAddress(pThis->pSwitchPort, /* :fAdded */ true, kIntNetAddrType_IPv4, &ifa->ifa_address); +#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 3, 0) + } rcu_read_unlock(); +#else } endfor_ifa(in_dev); +#endif } /*