libc: remove residues of noux fork support

This commit is contained in:
Christian Helmuth 2020-09-01 08:50:56 +02:00
parent 0977574372
commit ab953a534c
5 changed files with 1 additions and 125 deletions

View File

@ -983,7 +983,6 @@ _ZN4Libc14pthread_createEPP7pthreadRN6Genode6ThreadE T
#
# Libc plugin interface
#
_ZN4Libc16schedule_suspendEPFvvE T
_ZN4Libc25File_descriptor_allocator15find_by_libc_fdEi T
_ZN4Libc25File_descriptor_allocator4freeEPNS_15File_descriptorE T
_ZN4Libc25File_descriptor_allocator5allocEPNS_6PluginEPNS_14Plugin_contextEi T

View File

@ -233,7 +233,6 @@ struct Libc::Kernel final : Vfs::Io_response_handler,
bool _app_returned = false;
bool _resume_main_once = false;
bool _suspend_scheduled = false;
Select_handler_base *_scheduled_select_handler = nullptr;
@ -297,20 +296,6 @@ struct Libc::Kernel final : Vfs::Io_response_handler,
Absolute_path _cwd { "/" };
struct Resumer
{
GENODE_RPC(Rpc_resume, void, resume);
GENODE_RPC_INTERFACE(Rpc_resume);
};
struct Resumer_component : Rpc_object<Resumer, Resumer_component>
{
Kernel &_kernel;
Resumer_component(Kernel &kernel) : _kernel(kernel) { }
void resume() { _kernel.run_after_resume(); }
};
/**
* Trampoline to application (user) code
@ -447,7 +432,7 @@ struct Libc::Kernel final : Vfs::Io_response_handler,
/* _setjmp() returned after _longjmp() - user context suspended */
while ((!_app_returned) && (!_suspend_scheduled)) {
while ((!_app_returned)) {
if (_kernel_routine) {
Kernel_routine &routine = *_kernel_routine;
@ -479,25 +464,6 @@ struct Libc::Kernel final : Vfs::Io_response_handler,
if (!_kernel_routine && _resume_main_once && !_setjmp(_kernel_context))
_switch_to_user();
}
_suspend_scheduled = false;
}
/*
* Run libc application main context after suspend and resume
*/
void run_after_resume()
{
if (!_setjmp(_kernel_context))
_switch_to_user();
while ((!_app_returned) && (!_suspend_scheduled)) {
_env.ep().wait_and_dispatch_one_io_signal();
if (_resume_main_once && !_setjmp(_kernel_context))
_switch_to_user();
}
_suspend_scheduled = false;
}
/**
@ -590,11 +556,6 @@ struct Libc::Kernel final : Vfs::Io_response_handler,
return _timer_accessor.timer().curr_time();
}
/**
* Called from the main context (by fork)
*/
void schedule_suspend(void(*original_suspended_callback) ());
/**
* Select interface
*/
@ -611,33 +572,6 @@ struct Libc::Kernel final : Vfs::Io_response_handler,
_scheduled_select_handler = nullptr;
}
/**
* Called from the context of the initial thread (on fork)
*/
void entrypoint_suspended()
{
_resume_main_handler.destruct();
_original_suspended_callback();
}
/**
* Called from the context of the initial thread (after fork)
*/
void entrypoint_resumed()
{
_resume_main_handler.construct(_env.ep(), *this, &Kernel::_resume_main);
Resumer_component resumer { *this };
Capability<Resumer> resumer_cap =
_env.ep().rpc_ep().manage(&resumer);
resumer_cap.call<Resumer::Rpc_resume>();
_env.ep().rpc_ep().dissolve(&resumer);
}
/**
* Return if main is currently suspended
*/

View File

@ -26,11 +26,6 @@ namespace Libc {
* XXX called only by 'Libc::Vfs_plugin::read'
*/
void dispatch_pending_io_signals();
/*
* XXX this function is solely needed to support noux fork mechanism
*/
void schedule_suspend(void (*) ());
}
#endif /* _LIBC__INTERNAL__LEGACY_H_ */

View File

@ -40,28 +40,6 @@ inline void Libc::Main_blockade::wakeup()
}
/**
* Main context execution was suspended (on fork)
*
* This function is executed in the context of the initial thread.
*/
static void suspended_callback()
{
Libc::Kernel::kernel().entrypoint_suspended();
}
/**
* Resume main context execution (after fork)
*
* This function is executed in the context of the initial thread.
*/
static void resumed_callback()
{
Libc::Kernel::kernel().entrypoint_resumed();
}
size_t Libc::Kernel::_user_stack_size()
{
size_t size = Component::stack_size();
@ -75,31 +53,6 @@ size_t Libc::Kernel::_user_stack_size()
}
void Libc::Kernel::schedule_suspend(void(*original_suspended_callback) ())
{
if (_state != USER) {
error(__PRETTY_FUNCTION__, " called from non-user context");
return;
}
/*
* We hook into suspend-resume callback chain to destruct and
* reconstruct parts of the kernel from the context of the initial
* thread, i.e., without holding any object locks.
*/
_original_suspended_callback = original_suspended_callback;
_env.ep().schedule_suspend(suspended_callback, resumed_callback);
if (!_setjmp(_user_context)) {
_valid_user_context = true;
_suspend_scheduled = true;
_switch_to_kernel();
} else {
_valid_user_context = false;
}
}
void Libc::Kernel::reset_malloc_heap()
{
_malloc_ram.construct(_heap, _env.ram());

View File

@ -24,8 +24,3 @@ void Libc::dispatch_pending_io_signals()
Kernel::kernel().dispatch_pending_io_signals();
}
void Libc::schedule_suspend(void (*suspended) ())
{
Kernel::kernel().schedule_suspend(suspended);
}