From d7b9cd065429d8063e20ec995dbfe180ed3ac77d Mon Sep 17 00:00:00 2001 From: Johannes Schlatow Date: Thu, 7 Sep 2023 16:58:24 +0200 Subject: [PATCH] platform_drv: move add_range calls from base class The virtual add_range()-method must not be called from the base-class constructor since the derived class is not be fully initialized at this point. genodelabs/genode#5002 --- repos/os/src/drivers/platform/device_pd.cc | 3 +++ repos/os/src/drivers/platform/io_mmu.h | 9 ++------- 2 files changed, 5 insertions(+), 7 deletions(-) diff --git a/repos/os/src/drivers/platform/device_pd.cc b/repos/os/src/drivers/platform/device_pd.cc index 3266942249..2d3a730c3f 100644 --- a/repos/os/src/drivers/platform/device_pd.cc +++ b/repos/os/src/drivers/platform/device_pd.cc @@ -154,4 +154,7 @@ Device_pd::Device_pd(Env & env, _address_space(env, _pd, ram_guard, cap_guard) { _pd.ref_account(env.pd_session_cap()); + + buffer_registry.for_each([&] (Dma_buffer const & buf) { + add_range({ buf.dma_addr, buf.size }, buf.cap); }); } diff --git a/repos/os/src/drivers/platform/io_mmu.h b/repos/os/src/drivers/platform/io_mmu.h index c2f5f0fcae..821c4e7f9a 100644 --- a/repos/os/src/drivers/platform/io_mmu.h +++ b/repos/os/src/drivers/platform/io_mmu.h @@ -88,15 +88,10 @@ class Driver::Io_mmu : private Io_mmu_devices::Element virtual void remove_range(Range const &) = 0; Domain(Io_mmu & io_mmu, - Allocator & md_alloc, - Registry const & buffer_registry) + Allocator & md_alloc) : Registry::Element(io_mmu._domains, *this), _io_mmu(io_mmu), _md_alloc(md_alloc) - { - /* we always need to add existing buffers when creating a new domain */ - buffer_registry.for_each([&] (Dma_buffer const & buf) { - add_range({ buf.dma_addr, buf.size }, buf.cap); }); - } + { } virtual ~Domain() { } };