From 07881f90a985108d636a5574643bdb391e479d99 Mon Sep 17 00:00:00 2001 From: Sebastian Sumpf Date: Wed, 22 Sep 2021 16:04:37 +0200 Subject: [PATCH] mesa/libdrm: remove signal EP This is a left over from Mesa-11 and we exchanged it with a 'wait_and_dispatch_one_io_signal' for synchronous signal waits. issue #4260 --- repos/libports/src/lib/libdrm/ioctl_iris.cc | 21 +++++++++++-------- repos/libports/src/lib/mesa/iris/drm_init.cc | 5 ++--- .../src/test/mesa_demo/eglut/eglut_genode.cc | 10 --------- 3 files changed, 14 insertions(+), 22 deletions(-) diff --git a/repos/libports/src/lib/libdrm/ioctl_iris.cc b/repos/libports/src/lib/libdrm/ioctl_iris.cc index 88dc13bb7d..ef4ae5598a 100644 --- a/repos/libports/src/lib/libdrm/ioctl_iris.cc +++ b/repos/libports/src/lib/libdrm/ioctl_iris.cc @@ -160,8 +160,8 @@ class Drm_call Genode::Heap _heap { _env.ram(), _env.rm() }; Gpu::Connection _gpu_session { _env }; Gpu::Info _gpu_info { _gpu_session.info() }; - Genode::Blockade _completion_lock { }; size_t _available_gtt_size { _gpu_info.aperture_size }; + bool _complete { false }; using Offset = unsigned long; @@ -391,7 +391,7 @@ class Drm_call void _handle_completion() { /* wake up possible waiters */ - _completion_lock.wakeup(); + _complete = true; } Genode::Io_signal_handler _completion_sigh { @@ -1052,9 +1052,8 @@ class Drm_call public: - Drm_call(Genode::Env &env, Genode::Entrypoint &signal_ep) - : _env(env), - _completion_sigh(signal_ep, *this, &Drm_call::_handle_completion) + Drm_call(Genode::Env &env) + : _env(env) { /* make handle id 0 unavailable, handled as invalid by iris */ drm_syncobj_create reserve_id_0 { }; @@ -1141,8 +1140,12 @@ class Drm_call : _generic_ioctl(command_number(request), arg); } - void wait_for_completion() { - _completion_lock.block(); + void wait_for_completion() + { + _complete = false; + + while (_complete == false) + _env.ep().wait_and_dispatch_one_io_signal(); /* make done buffer objects */ Gpu::Info gpu_info { _gpu_session.info() }; @@ -1166,9 +1169,9 @@ class Drm_call static Genode::Constructible _call; -void drm_init(Genode::Env &env, Genode::Entrypoint &signal_ep) +void drm_init(Genode::Env &env) { - _call.construct(env, signal_ep); + _call.construct(env); } diff --git a/repos/libports/src/lib/mesa/iris/drm_init.cc b/repos/libports/src/lib/mesa/iris/drm_init.cc index 229161cf0c..01a640851c 100644 --- a/repos/libports/src/lib/mesa/iris/drm_init.cc +++ b/repos/libports/src/lib/mesa/iris/drm_init.cc @@ -18,10 +18,9 @@ extern "C" { #include } -extern Genode::Entrypoint &genode_entrypoint(); -extern void drm_init(Genode::Env &env, Genode::Entrypoint &ep); +extern void drm_init(Genode::Env &env); void genode_drm_init() { - drm_init(*genode_env, genode_entrypoint()); + drm_init(*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 fb71b5ded8..86a8e51407 100644 --- a/repos/libports/src/test/mesa_demo/eglut/eglut_genode.cc +++ b/repos/libports/src/test/mesa_demo/eglut/eglut_genode.cc @@ -41,14 +41,6 @@ extern "C" { Genode::Env *genode_env; -static Genode::Constructible signal_ep; - -Genode::Entrypoint &genode_entrypoint() -{ - return *signal_ep; -} - - struct Window : Genode_egl_window { using View_handle = Gui::Session::View_handle; @@ -183,7 +175,5 @@ static void construct_component(Libc::Env &env) void Libc::Component::construct(Libc::Env &env) { genode_env = &env; - signal_ep.construct(env, 1024*sizeof(long), "eglut_signal_ep", - Genode::Affinity::Location()); Libc::with_libc([&] () { construct_component(env); }); }