From 5446c52c430b840b3834211fe5442883d4ffe01a Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Tue, 2 Oct 2018 16:27:35 +0200 Subject: [PATCH] base: make Entrypoint placeable on specific cpu Fixes #3008 --- repos/base/include/base/entrypoint.h | 9 ++++++--- repos/base/lib/symbols/ld | 4 ++-- repos/base/src/lib/base/entrypoint.cc | 10 ++++++---- repos/base/src/lib/base/root_proxy.cc | 2 +- repos/base/src/test/rm_nested/main.cc | 3 ++- repos/dde_linux/src/lib/lxip/socket_handler.cc | 3 ++- repos/libports/src/app/qt5/qt_launchpad/main.cpp | 3 ++- .../libports/src/test/mesa_demo/eglut/eglut_genode.cc | 3 ++- repos/os/src/test/input_filter/main.cc | 3 ++- repos/os/src/test/signal/main.cc | 5 +++-- repos/os/src/test/timeout/main.cc | 2 +- repos/ports/src/app/gdb_monitor/app_child.h | 2 +- 12 files changed, 30 insertions(+), 19 deletions(-) diff --git a/repos/base/include/base/entrypoint.h b/repos/base/include/base/entrypoint.h index cf3b69d1c..f2d132540 100644 --- a/repos/base/include/base/entrypoint.h +++ b/repos/base/include/base/entrypoint.h @@ -57,9 +57,11 @@ class Genode::Entrypoint : Noncopyable { enum { STACK_SIZE = 2*1024*sizeof(long) }; Entrypoint &ep; - Signal_proxy_thread(Env &env, Entrypoint &ep) + Signal_proxy_thread(Env &env, Entrypoint &ep, Location location, + Weight weight, Cpu_session &cpu_session) : - Thread(env, "signal_proxy", STACK_SIZE), + Thread(env, "signal_proxy", STACK_SIZE, location, + weight, cpu_session), ep(ep) { start(); } @@ -136,7 +138,8 @@ class Genode::Entrypoint : Noncopyable public: - Entrypoint(Env &env, size_t stack_size, char const *name); + Entrypoint(Env &env, size_t stack_size, char const *name, + Affinity::Location); ~Entrypoint() { diff --git a/repos/base/lib/symbols/ld b/repos/base/lib/symbols/ld index 5109b66a5..a1e553f5c 100644 --- a/repos/base/lib/symbols/ld +++ b/repos/base/lib/symbols/ld @@ -64,8 +64,8 @@ _ZN6Genode10Entrypoint6manageERNS_22Signal_dispatcher_baseE T _ZN6Genode10Entrypoint8dissolveERNS_22Signal_dispatcher_baseE T _ZN6Genode10EntrypointC1ERNS_3EnvE T _ZN6Genode10EntrypointC1ERNS_3EnvEmPKc T -_ZN6Genode10EntrypointC2ERNS_3EnvE T -_ZN6Genode10EntrypointC2ERNS_3EnvEmPKc T +_ZN6Genode10EntrypointC1ERNS_3EnvEmPKcNS_8Affinity8LocationE T +_ZN6Genode10EntrypointC2ERNS_3EnvEmPKcNS_8Affinity8LocationE T _ZN6Genode10Ipc_serverC1Ev T _ZN6Genode10Ipc_serverC2Ev T _ZN6Genode10Ipc_serverD1Ev T diff --git a/repos/base/src/lib/base/entrypoint.cc b/repos/base/src/lib/base/entrypoint.cc index b5d7708e6..54466c57e 100644 --- a/repos/base/src/lib/base/entrypoint.cc +++ b/repos/base/src/lib/base/entrypoint.cc @@ -329,12 +329,14 @@ Entrypoint::Entrypoint(Env &env) _process_incoming_signals(); } - -Entrypoint::Entrypoint(Env &env, size_t stack_size, char const *name) +Entrypoint::Entrypoint(Env &env, size_t stack_size, char const *name, + Affinity::Location location) : _env(env), - _rpc_ep(&env.pd(), stack_size, name), _signalling_initialized(true) + _rpc_ep(&env.pd(), stack_size, name, true, location), + _signalling_initialized(true) { - _signal_proxy_thread.construct(env, *this); + _signal_proxy_thread.construct(env, *this, location, + Thread::Weight(), env.cpu()); } diff --git a/repos/base/src/lib/base/root_proxy.cc b/repos/base/src/lib/base/root_proxy.cc index a4a5d8d48..c7e2bafdd 100644 --- a/repos/base/src/lib/base/root_proxy.cc +++ b/repos/base/src/lib/base/root_proxy.cc @@ -116,7 +116,7 @@ namespace { Id_space _id_space { }; - Entrypoint _ep { _env, 2*1024*sizeof(long), "root" }; + Entrypoint _ep { _env, 2*1024*sizeof(long), "root", Affinity::Location() }; Attached_rom_dataspace _session_requests { _env, "session_requests" }; diff --git a/repos/base/src/test/rm_nested/main.cc b/repos/base/src/test/rm_nested/main.cc index 440f2568d..695ea6498 100644 --- a/repos/base/src/test/rm_nested/main.cc +++ b/repos/base/src/test/rm_nested/main.cc @@ -66,7 +66,8 @@ class Local_fault_handler : public Entrypoint public: Local_fault_handler(Genode::Env & env, Region_map ®ion_map) - : Entrypoint(env, sizeof(addr_t)*2048, "local_fault_handler"), + : Entrypoint(env, sizeof(addr_t)*2048, "local_fault_handler", + Affinity::Location()), _env(env), _region_map(region_map), _handler(*this, *this, &Local_fault_handler::_handle_fault) diff --git a/repos/dde_linux/src/lib/lxip/socket_handler.cc b/repos/dde_linux/src/lib/lxip/socket_handler.cc index 6ffcab227..5cb1f87a0 100644 --- a/repos/dde_linux/src/lib/lxip/socket_handler.cc +++ b/repos/dde_linux/src/lib/lxip/socket_handler.cc @@ -410,7 +410,8 @@ class Net::Socketcall : public Lxip::Socketcall, Socketcall(Genode::Env &env) : - Entrypoint(env, 64 * 1024 * sizeof(long), "socketcall") + Entrypoint(env, 64 * 1024 * sizeof(long), "socketcall", + Genode::Affinity::Location()) { } /************************** diff --git a/repos/libports/src/app/qt5/qt_launchpad/main.cpp b/repos/libports/src/app/qt5/qt_launchpad/main.cpp index 518f379fe..f038ec346 100644 --- a/repos/libports/src/app/qt5/qt_launchpad/main.cpp +++ b/repos/libports/src/app/qt5/qt_launchpad/main.cpp @@ -26,7 +26,8 @@ struct Qt_launchpad_namespace::Local_env : Genode::Env Genode::Entrypoint local_ep { genode_env, 2*1024*sizeof(addr_t), - "qt_launchpad_ep" }; + "qt_launchpad_ep", + Affinity::Location() }; Local_env(Env &genode_env) : genode_env(genode_env) { } diff --git a/repos/libports/src/test/mesa_demo/eglut/eglut_genode.cc b/repos/libports/src/test/mesa_demo/eglut/eglut_genode.cc index 9a36c4a8b..d98d5ff9b 100644 --- a/repos/libports/src/test/mesa_demo/eglut/eglut_genode.cc +++ b/repos/libports/src/test/mesa_demo/eglut/eglut_genode.cc @@ -173,6 +173,7 @@ extern "C" int eglut_main(int argc, char *argv[]); void Libc::Component::construct(Libc::Env &env) { genode_env = &env; - signal_ep.construct(env, 1024*sizeof(long), "eglut_signal_ep"); + signal_ep.construct(env, 1024*sizeof(long), "eglut_signal_ep", + Genode::Affinity::Location()); Libc::with_libc([] () { eglut_main(1, nullptr); }); } diff --git a/repos/os/src/test/input_filter/main.cc b/repos/os/src/test/input_filter/main.cc index ab3d286b5..f9d99d013 100644 --- a/repos/os/src/test/input_filter/main.cc +++ b/repos/os/src/test/input_filter/main.cc @@ -145,7 +145,8 @@ class Test::Input_to_filter */ enum { STACK_SIZE = 4*1024*sizeof(long) }; - Entrypoint _ep { _env, STACK_SIZE, "input_server_ep" }; + Entrypoint _ep { _env, STACK_SIZE, "input_server_ep", + Affinity::Location() }; /* * Input supplied to the input_filter diff --git a/repos/os/src/test/signal/main.cc b/repos/os/src/test/signal/main.cc index 80e5daa77..2277f374d 100644 --- a/repos/os/src/test/signal/main.cc +++ b/repos/os/src/test/signal/main.cc @@ -456,7 +456,7 @@ struct Nested_test : Signal_test }; Env &env; - Entrypoint ep { env, 2048 * sizeof(long), "wait_dispatch_ep" }; + Entrypoint ep { env, 2048 * sizeof(long), "wait_dispatch_ep", Affinity::Location() }; Signal_handler app_handler { ep, *this, &Nested_test::handle_app }; Signal_handler nop_handler { ep, *this, &Nested_test::handle_nop }; @@ -559,7 +559,8 @@ struct Nested_stress_test : Signal_test Io_signal_handler handler { ep, *this, &Receiver::handle }; Receiver(Env &env, char const *name) - : ep(env, 3 * 1024 * sizeof(long), name), name(name) { } + : ep(env, 3 * 1024 * sizeof(long), name, Affinity::Location()), + name(name) { } void handle() { diff --git a/repos/os/src/test/timeout/main.cc b/repos/os/src/test/timeout/main.cc index f1730657f..3b73bf904 100644 --- a/repos/os/src/test/timeout/main.cc +++ b/repos/os/src/test/timeout/main.cc @@ -804,7 +804,7 @@ struct Fast_polling : Test unsigned id) : Test(env, error_cnt, done, id, brief), - main_ep(env, STACK_SIZE, "fast_polling_ep"), + main_ep(env, STACK_SIZE, "fast_polling_ep", Affinity::Location()), main_handler(main_ep, *this, &Fast_polling::main) { if (precise_time(config.xml())) { diff --git a/repos/ports/src/app/gdb_monitor/app_child.h b/repos/ports/src/app/gdb_monitor/app_child.h index 410c52954..76074bfcb 100644 --- a/repos/ports/src/app/gdb_monitor/app_child.h +++ b/repos/ports/src/app/gdb_monitor/app_child.h @@ -58,7 +58,7 @@ class Gdb_monitor::App_child : public Child_policy, Genode::Env &genode_env; Genode::Entrypoint local_ep { - genode_env, 4*1024*sizeof(addr_t), "target_ep" }; + genode_env, 4*1024*sizeof(addr_t), "target_ep", Affinity::Location() }; Local_env(Env &genode_env) : genode_env(genode_env) { }