vbox5: use sched_yield instead of pthread_yield

Fixes #2551
This commit is contained in:
Alexander Boettcher 2017-10-27 11:39:02 +02:00 committed by Christian Helmuth
parent 73f1fa9a1f
commit e532fc83b6
4 changed files with 13 additions and 19 deletions

View File

@ -1 +1 @@
e060302687a8d4233ce5b0304a30a7ee59e8d0af
c916354430e16892bbc739aaecd86b9451860326

View File

@ -28,6 +28,8 @@
/* Libc include */
#include <pthread.h>
#include <sched.h> /* sched_yield */
/* VirtualBox SUPLib interface */
@ -130,7 +132,11 @@ HRESULT genode_setup_machine(ComObjPtr<Machine> machine)
}
extern "C" void pthread_yield() { Genode::warning(__func__, " unimplemented"); }
extern "C" int sched_yield(void)
{
Genode::warning(__func__, " unimplemented");
return -1;
}
int SUPR3PageAllocEx(::size_t cPages, uint32_t fFlags, void **ppvPages,
PRTR0PTR pR0Ptr, PSUPPAGE paPages)

View File

@ -1057,21 +1057,6 @@ index a717aff..3d52b9f 100644
int rc = RTLogGroupSettings(RTLogRelGetDefaultInstance(), useLoggingLevel.c_str());
// If failed and not the default logging level - try to use the default logging level.
if (RT_FAILURE(rc))
--- a/src/app/virtualbox/src/VBox/Runtime/r3/posix/semevent-posix.cpp
+++ b/src/app/virtualbox/src/VBox/Runtime/r3/posix/semevent-posix.cpp
@@ -49,10 +49,12 @@
# define pthread_yield() pthread_yield_np()
#endif
+#if 0
#if defined(RT_OS_SOLARIS) || defined(RT_OS_HAIKU) || defined(RT_OS_FREEBSD) || defined(RT_OS_NETBSD)
# include <sched.h>
# define pthread_yield() sched_yield()
#endif
+#endif
/*********************************************************************************************************************************
--- a/src/app/virtualbox/src/VBox/Main/src-client/BusAssignmentManager.cpp
+++ b/src/app/virtualbox/src/VBox/Main/src-client/BusAssignmentManager.cpp
@@ -71,6 +71,8 @@

View File

@ -41,6 +41,9 @@
/* libc memory allocator */
#include <libc_mem_alloc.h>
/* libc */
#include <sched.h> /* sched_yield */
#include "mm.h"
@ -753,9 +756,9 @@ bool PGMUnmapMemoryGenode(void * vmm_local, ::size_t size)
}
extern "C" void pthread_yield(void)
extern "C" int sched_yield(void)
{
Nova::ec_ctrl(Nova::EC_YIELD);
return (Nova::ec_ctrl(Nova::EC_YIELD) == Nova::NOVA_OK) ? 0 : -1;
}