git: c64a29abe541 - main - emulators/virtualbox-ose-kmod-legacy: Catch up with FreeBSD KPI changes

From: Mark Johnston <markj_at_FreeBSD.org>
Date: Mon, 29 Jul 2024 23:57:25 UTC
The branch main has been updated by markj:

URL: https://cgit.FreeBSD.org/ports/commit/?id=c64a29abe541511b0875d568832d59347830d198

commit c64a29abe541511b0875d568832d59347830d198
Author:     Mark Johnston <markj@FreeBSD.org>
AuthorDate: 2024-07-29 17:57:13 +0000
Commit:     Mark Johnston <markj@FreeBSD.org>
CommitDate: 2024-07-29 23:57:11 +0000

    emulators/virtualbox-ose-kmod-legacy: Catch up with FreeBSD KPI changes
    
    After 1500021, kick_proc0() doesn't exist.
    
    PR:             280495
    Approved by:    vvd (maintainer)
---
 ...untime-r0drv-freebsd-sleepqueue-r0drv-freebsd.h | 35 +++++++++++++++++-----
 1 file changed, 27 insertions(+), 8 deletions(-)

diff --git a/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-sleepqueue-r0drv-freebsd.h b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-sleepqueue-r0drv-freebsd.h
index 8c4376c342e7..127966b91f56 100644
--- a/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-sleepqueue-r0drv-freebsd.h
+++ b/emulators/virtualbox-ose-legacy/files/patch-src-VBox-Runtime-r0drv-freebsd-sleepqueue-r0drv-freebsd.h
@@ -1,13 +1,15 @@
-Without this patch any waits for periods shorter than a single tick return
-immediately leading to a lot of unnecessary spinning. For example, I observe that
-my guest's idle loop does a lot of sleeps with periods slightly shorter than 1 ms
-(1/hz), e.g. 900us.  All that waiting turns into pure spinning and VirtualBox eats
-100% of a core.
-The patch improves the situation significantly. Also, it (approximately) follows
-what tvtohz does.
+Without the first part of this patch, any waits for periods shorter than a
+single tick return immediately leading to a lot of unnecessary spinning. For
+example, I observe that my guest's idle loop does a lot of sleeps with periods
+slightly shorter than 1 ms (1/hz), e.g. 900us.  All that waiting turns into pure
+spinning and VirtualBox eats 100% of a core.
+
+The clamping improves the situation significantly. Also, it (approximately)
+follows what tvtohz does.  The rest of the patch just chases an upstream
+KPI change.
 
 Submitted by:	Andriy Gapon <avg@FreeBSD.org>
---- src/VBox/Runtime/r0drv/freebsd/sleepqueue-r0drv-freebsd.h.orig	2020-05-13 19:44:32 UTC
+--- src/VBox/Runtime/r0drv/freebsd/sleepqueue-r0drv-freebsd.h.orig	2020-07-09 16:57:38 UTC
 +++ src/VBox/Runtime/r0drv/freebsd/sleepqueue-r0drv-freebsd.h
 @@ -82,6 +82,8 @@ DECLINLINE(uint32_t) rtR0SemBsdWaitUpdateTimeout(PRTR0
      uint64_t cTicks = ASMMultU64ByU32DivByU32(uTimeout, hz, UINT32_C(1000000000));
@@ -18,3 +20,20 @@ Submitted by:	Andriy Gapon <avg@FreeBSD.org>
      else
          pWait->iTimeout     = (int)cTicks;
  #endif
+@@ -298,10 +300,16 @@ DECLINLINE(void) rtR0SemBsdSignal(void *pvWaitChan)
+ DECLINLINE(void) rtR0SemBsdSignal(void *pvWaitChan)
+ {
+     sleepq_lock(pvWaitChan);
++#if __FreeBSD_version < 1500022
+     int fWakeupSwapProc = sleepq_signal(pvWaitChan, SLEEPQ_CONDVAR, 0, 0);
++#else
++    sleepq_signal(pvWaitChan, SLEEPQ_CONDVAR, 0, 0);
++#endif
+     sleepq_release(pvWaitChan);
++#if __FreeBSD_version < 1500022
+     if (fWakeupSwapProc)
+         kick_proc0();
++#endif
+ }
+ 
+ /**