diff --git a/repos/libports/lib/symbols/libc b/repos/libports/lib/symbols/libc index 9c55aab9c6..9f24db73d9 100644 --- a/repos/libports/lib/symbols/libc +++ b/repos/libports/lib/symbols/libc @@ -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 diff --git a/repos/libports/src/lib/libc/internal/kernel.h b/repos/libports/src/lib/libc/internal/kernel.h index 4f1a053af7..4e4a02bc73 100644 --- a/repos/libports/src/lib/libc/internal/kernel.h +++ b/repos/libports/src/lib/libc/internal/kernel.h @@ -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 - { - 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_cap = - _env.ep().rpc_ep().manage(&resumer); - - resumer_cap.call(); - - _env.ep().rpc_ep().dissolve(&resumer); - } - /** * Return if main is currently suspended */ diff --git a/repos/libports/src/lib/libc/internal/legacy.h b/repos/libports/src/lib/libc/internal/legacy.h index cea751316d..3078aa53f9 100644 --- a/repos/libports/src/lib/libc/internal/legacy.h +++ b/repos/libports/src/lib/libc/internal/legacy.h @@ -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_ */ diff --git a/repos/libports/src/lib/libc/kernel.cc b/repos/libports/src/lib/libc/kernel.cc index b1bca7c80f..f1886e3e50 100644 --- a/repos/libports/src/lib/libc/kernel.cc +++ b/repos/libports/src/lib/libc/kernel.cc @@ -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()); diff --git a/repos/libports/src/lib/libc/legacy.cc b/repos/libports/src/lib/libc/legacy.cc index 19f518cb23..c42d1fa092 100644 --- a/repos/libports/src/lib/libc/legacy.cc +++ b/repos/libports/src/lib/libc/legacy.cc @@ -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); -}