diff --git a/repos/base-foc/src/core/include/vm_session_component.h b/repos/base-foc/src/core/include/vm_session_component.h index 3ab566029..8757aa98f 100644 --- a/repos/base-foc/src/core/include/vm_session_component.h +++ b/repos/base-foc/src/core/include/vm_session_component.h @@ -25,6 +25,8 @@ #include #include +#include + namespace Genode { class Vm_session_component; struct Vcpu; } struct Genode::Vcpu : Genode::List::Element @@ -83,7 +85,8 @@ class Genode::Vm_session_component using Cap_quota_guard::upgrade; Vm_session_component(Rpc_entrypoint &, Resources, Label const &, - Diag, Ram_allocator &ram, Region_map &, unsigned); + Diag, Ram_allocator &ram, Region_map &, unsigned, + Trace::Source_registry &); ~Vm_session_component(); /********************************* diff --git a/repos/base-foc/src/core/spec/x86/platform_services.cc b/repos/base-foc/src/core/spec/x86/platform_services.cc index b14141672..e84c36677 100644 --- a/repos/base-foc/src/core/spec/x86/platform_services.cc +++ b/repos/base-foc/src/core/spec/x86/platform_services.cc @@ -20,12 +20,13 @@ /* * Add x86 specific services */ -void Genode::platform_add_local_services(Rpc_entrypoint &ep, - Sliced_heap &heap, - Registry &services) +void Genode::platform_add_local_services(Rpc_entrypoint &ep, + Sliced_heap &heap, + Registry &services, + Trace::Source_registry &trace_sources) { static Vm_root vm_root(ep, heap, core_env().ram_allocator(), - core_env().local_rm()); + core_env().local_rm(), trace_sources); static Core_service vm(services, vm_root); static Io_port_root io_root(*core_env().pd_session(), diff --git a/repos/base-foc/src/core/vm_session_component.cc b/repos/base-foc/src/core/vm_session_component.cc index c268a4553..3847c8edb 100644 --- a/repos/base-foc/src/core/vm_session_component.cc +++ b/repos/base-foc/src/core/vm_session_component.cc @@ -34,7 +34,8 @@ Vm_session_component::Vm_session_component(Rpc_entrypoint &ep, Diag, Ram_allocator &ram, Region_map &local_rm, - unsigned) + unsigned, + Trace::Source_registry &) : Ram_quota_guard(resources.ram_quota), Cap_quota_guard(resources.cap_quota), diff --git a/repos/base-hw/src/core/spec/arm_v7/trustzone/vm_session_component.cc b/repos/base-hw/src/core/spec/arm_v7/trustzone/vm_session_component.cc index 1d52e3229..2ceff5179 100644 --- a/repos/base-hw/src/core/spec/arm_v7/trustzone/vm_session_component.cc +++ b/repos/base-hw/src/core/spec/arm_v7/trustzone/vm_session_component.cc @@ -34,7 +34,7 @@ Vm_session_component::Vm_session_component(Rpc_entrypoint &ds_ep, Diag, Ram_allocator &ram_alloc, Region_map ®ion_map, - unsigned) + unsigned, Trace::Source_registry &) : Ram_quota_guard(resources.ram_quota), Cap_quota_guard(resources.cap_quota), diff --git a/repos/base-hw/src/core/spec/arm_v7/trustzone/vm_session_component.h b/repos/base-hw/src/core/spec/arm_v7/trustzone/vm_session_component.h index f71fd6975..4f778d842 100644 --- a/repos/base-hw/src/core/spec/arm_v7/trustzone/vm_session_component.h +++ b/repos/base-hw/src/core/spec/arm_v7/trustzone/vm_session_component.h @@ -19,6 +19,7 @@ #include #include #include +#include /* Core includes */ #include @@ -68,7 +69,7 @@ class Genode::Vm_session_component Vm_session_component(Rpc_entrypoint &, Resources, Label const &, Diag, Ram_allocator &ram, Region_map &, - unsigned priority); + unsigned priority, Trace::Source_registry &); ~Vm_session_component(); /************************** diff --git a/repos/base-hw/src/core/spec/arm_v7/virtualization/vm_session_component.cc b/repos/base-hw/src/core/spec/arm_v7/virtualization/vm_session_component.cc index f2313cc6d..35cf28b83 100644 --- a/repos/base-hw/src/core/spec/arm_v7/virtualization/vm_session_component.cc +++ b/repos/base-hw/src/core/spec/arm_v7/virtualization/vm_session_component.cc @@ -93,7 +93,8 @@ Vm_session_component::Vm_session_component(Rpc_entrypoint &ds_ep, Diag, Ram_allocator &ram_alloc, Region_map ®ion_map, - unsigned) + unsigned, + Trace::Source_registry &) : Ram_quota_guard(resources.ram_quota), Cap_quota_guard(resources.cap_quota), diff --git a/repos/base-hw/src/core/spec/arm_v7/virtualization/vm_session_component.h b/repos/base-hw/src/core/spec/arm_v7/virtualization/vm_session_component.h index caf9e190c..58a627737 100644 --- a/repos/base-hw/src/core/spec/arm_v7/virtualization/vm_session_component.h +++ b/repos/base-hw/src/core/spec/arm_v7/virtualization/vm_session_component.h @@ -28,6 +28,8 @@ #include #include +#include + namespace Genode { class Vm_session_component; } @@ -86,7 +88,8 @@ class Genode::Vm_session_component using Rpc_object::cap; Vm_session_component(Rpc_entrypoint &, Resources, Label const &, - Diag, Ram_allocator &ram, Region_map &, unsigned); + Diag, Ram_allocator &ram, Region_map &, unsigned, + Trace::Source_registry &); ~Vm_session_component(); /********************************* diff --git a/repos/base-hw/src/core/spec/arndale/platform_services.cc b/repos/base-hw/src/core/spec/arndale/platform_services.cc index 8750ab95b..43e3757a8 100644 --- a/repos/base-hw/src/core/spec/arndale/platform_services.cc +++ b/repos/base-hw/src/core/spec/arndale/platform_services.cc @@ -29,9 +29,10 @@ extern Genode::addr_t hypervisor_exception_vector; /* * Add ARM virtualization specific vm service */ -void Genode::platform_add_local_services(Rpc_entrypoint &ep, - Sliced_heap &sh, - Registry &services) +void Genode::platform_add_local_services(Rpc_entrypoint &ep, + Sliced_heap &sh, + Registry &services, + Trace::Source_registry &trace_sources) { using namespace Genode; @@ -40,6 +41,6 @@ void Genode::platform_add_local_services(Rpc_entrypoint &ep, Hw::PAGE_FLAGS_KERN_TEXT); static Vm_root vm_root(ep, sh, core_env().ram_allocator(), - core_env().local_rm()); + core_env().local_rm(), trace_sources); static Core_service vm_service(services, vm_root); } diff --git a/repos/base-hw/src/core/spec/imx53/trustzone/platform_services.cc b/repos/base-hw/src/core/spec/imx53/trustzone/platform_services.cc index 6d6243e46..5b1a5db06 100644 --- a/repos/base-hw/src/core/spec/imx53/trustzone/platform_services.cc +++ b/repos/base-hw/src/core/spec/imx53/trustzone/platform_services.cc @@ -28,15 +28,16 @@ extern int monitor_mode_exception_vector; /* * Add TrustZone specific vm service */ -void Genode::platform_add_local_services(Rpc_entrypoint &ep, - Sliced_heap &sliced_heap, - Registry &local_services) +void Genode::platform_add_local_services(Rpc_entrypoint &ep, + Sliced_heap &sliced_heap, + Registry &local_services, + Trace::Source_registry &trace_sources) { static addr_t const phys_base = Platform::core_phys_addr((addr_t)&monitor_mode_exception_vector); map_local(phys_base, Hw::Mm::system_exception_vector().base, 1, Hw::PAGE_FLAGS_KERN_TEXT); static Vm_root vm_root(ep, sliced_heap, core_env().ram_allocator(), - core_env().local_rm()); + core_env().local_rm(), trace_sources); static Core_service vm_service(local_services, vm_root); } diff --git a/repos/base-hw/src/core/spec/x86_64/muen/platform_services.cc b/repos/base-hw/src/core/spec/x86_64/muen/platform_services.cc index aa4ccaeee..36d6f6e08 100644 --- a/repos/base-hw/src/core/spec/x86_64/muen/platform_services.cc +++ b/repos/base-hw/src/core/spec/x86_64/muen/platform_services.cc @@ -24,12 +24,13 @@ /* * Add I/O port service and virtualization specific vm service */ -void Genode::platform_add_local_services(Rpc_entrypoint &ep, - Sliced_heap &sliced_heap, - Registry &services) +void Genode::platform_add_local_services(Rpc_entrypoint &ep, + Sliced_heap &sliced_heap, + Registry &services, + Trace::Source_registry &trace_sources) { static Vm_root vm_root(ep, sliced_heap, core_env().ram_allocator(), - core_env().local_rm()); + core_env().local_rm(), trace_sources); static Core_service vm_ls(services, vm_root); static Io_port_root io_port_root(*core_env().pd_session(), diff --git a/repos/base-hw/src/core/spec/x86_64/muen/vm_session_component.h b/repos/base-hw/src/core/spec/x86_64/muen/vm_session_component.h index f5e17182f..ee1774248 100644 --- a/repos/base-hw/src/core/spec/x86_64/muen/vm_session_component.h +++ b/repos/base-hw/src/core/spec/x86_64/muen/vm_session_component.h @@ -19,6 +19,7 @@ #include #include #include +#include /* Core includes */ #include @@ -45,7 +46,8 @@ class Genode::Vm_session_component Vm_session_component(Rpc_entrypoint &, Resources resources, Label const &, Diag, Ram_allocator &, - Region_map &, unsigned) + Region_map &, unsigned, + Trace::Source_registry &) : Ram_quota_guard(resources.ram_quota), Cap_quota_guard(resources.cap_quota), diff --git a/repos/base-nova/src/core/include/vm_session_component.h b/repos/base-nova/src/core/include/vm_session_component.h index 37fcbbb8d..3a9673a8f 100644 --- a/repos/base-nova/src/core/include/vm_session_component.h +++ b/repos/base-nova/src/core/include/vm_session_component.h @@ -17,8 +17,12 @@ /* Genode includes */ #include #include + #include +#include +#include + namespace Genode { class Vm_session_component; } class Genode::Vm_session_component @@ -33,7 +37,12 @@ class Genode::Vm_session_component typedef Constrained_ram_allocator Con_ram_allocator; typedef Allocator_avl_tpl Avl_region; - class Vcpu : public List::Element { + class Vcpu : private List::Element, + public Trace::Source::Info_accessor + { + + friend class List; + friend class Vm_session_component; public: @@ -43,17 +52,23 @@ class Genode::Vm_session_component Constrained_ram_allocator &_ram_alloc; Cap_quota_guard &_cap_alloc; + Trace::Source_registry &_trace_sources; Ram_dataspace_capability _ds_cap { }; addr_t _sel_sm_ec_sc; addr_t _vm_pt_cnt { 0 }; Vcpu_id const _id; State _state { INIT }; + Affinity::Location const _location; + Session_label const &_label; public: Vcpu(Constrained_ram_allocator &ram_alloc, Cap_quota_guard &cap_alloc, - Vcpu_id const id); + Vcpu_id const id, Affinity::Location const, + Session_label const &, + Trace::Control_area &, + Trace::Source_registry &); ~Vcpu(); @@ -70,17 +85,55 @@ class Genode::Vm_session_component void alive() { _state = ALIVE; }; static addr_t invalid() { return ~0UL; } + + /******************************************** + ** Trace::Source::Info_accessor interface ** + ********************************************/ + + Trace::Source::Info trace_source_info() const override; + + private: + + struct Trace_control_slot + { + unsigned index = 0; + Trace::Control_area &_trace_control_area; + + Trace_control_slot(Trace::Control_area &trace_control_area) + : _trace_control_area(trace_control_area) + { + if (!_trace_control_area.alloc(index)) + throw Out_of_ram(); + } + + ~Trace_control_slot() + { + _trace_control_area.free(index); + } + + Trace::Control &control() + { + return *_trace_control_area.at(index); + } + }; + + Trace_control_slot _trace_control_slot; + + Trace::Source _trace_source { *this, _trace_control_slot.control() }; }; - Rpc_entrypoint &_ep; - Con_ram_allocator _constrained_md_ram_alloc; - Sliced_heap _heap; - Avl_region _map { &_heap }; - addr_t _pd_sel { 0 }; - unsigned _id_alloc { 0 }; - unsigned _priority; + Rpc_entrypoint &_ep; + Trace::Control_area _trace_control_area; + Trace::Source_registry &_trace_sources; + Con_ram_allocator _constrained_md_ram_alloc; + Sliced_heap _heap; + Avl_region _map { &_heap }; + addr_t _pd_sel { 0 }; + unsigned _id_alloc { 0 }; + unsigned _priority; + Session_label const _session_label; - List _vcpus { }; + List _vcpus { }; Vcpu * _lookup(Vcpu_id const vcpu_id) { @@ -104,7 +157,8 @@ class Genode::Vm_session_component using Cap_quota_guard::upgrade; Vm_session_component(Rpc_entrypoint &, Resources, Label const &, - Diag, Ram_allocator &ram, Region_map &, unsigned); + Diag, Ram_allocator &ram, Region_map &, unsigned, + Trace::Source_registry &); ~Vm_session_component(); /********************************* diff --git a/repos/base-nova/src/core/platform_services.cc b/repos/base-nova/src/core/platform_services.cc index 21fd9229b..94b42c59d 100644 --- a/repos/base-nova/src/core/platform_services.cc +++ b/repos/base-nova/src/core/platform_services.cc @@ -20,12 +20,13 @@ /* * Add x86 specific services */ -void Genode::platform_add_local_services(Rpc_entrypoint &ep, - Sliced_heap &heap, - Registry &services) +void Genode::platform_add_local_services(Rpc_entrypoint &ep, + Sliced_heap &heap, + Registry &services, + Trace::Source_registry &trace_sources) { static Vm_root vm_root(ep, heap, core_env().ram_allocator(), - core_env().local_rm()); + core_env().local_rm(), trace_sources); static Core_service vm(services, vm_root); static Io_port_root io_root(*core_env().pd_session(), diff --git a/repos/base-nova/src/core/vm_session_component.cc b/repos/base-nova/src/core/vm_session_component.cc index 3cf86bf2c..94aa97693 100644 --- a/repos/base-nova/src/core/vm_session_component.cc +++ b/repos/base-nova/src/core/vm_session_component.cc @@ -37,12 +37,20 @@ enum { CAP_RANGE_LOG2 = 2, CAP_RANGE = 1 << CAP_RANGE_LOG2 }; Vm_session_component::Vcpu::Vcpu(Constrained_ram_allocator &ram_alloc, Cap_quota_guard &cap_alloc, - Vcpu_id const id) + Vcpu_id const id, + Affinity::Location const location, + Session_label const &label, + Trace::Control_area &trace_control_area, + Trace::Source_registry &trace_sources) : _ram_alloc(ram_alloc), _cap_alloc(cap_alloc), + _trace_sources(trace_sources), _sel_sm_ec_sc(invalid()), - _id(id) + _id(id), + _location(location), + _label(label), + _trace_control_slot(trace_control_area) { /* account caps required to setup vCPU */ _cap_alloc.withdraw(Cap_quota{CAP_RANGE}); @@ -63,10 +71,14 @@ Vm_session_component::Vcpu::Vcpu(Constrained_ram_allocator &ram_alloc, cap_map().remove(_sel_sm_ec_sc, CAP_RANGE_LOG2); throw; } + + _trace_sources.insert(&_trace_source); } Vm_session_component::Vcpu::~Vcpu() { + _trace_sources.remove(&_trace_source); + if (_ds_cap.valid()) _ram_alloc.free(_ds_cap); @@ -85,6 +97,19 @@ addr_t Vm_session_component::Vcpu::new_pt_id() return MAX_VM_EXITS * _id.id + _vm_pt_cnt ++; } +Genode::Trace::Source::Info Vm_session_component::Vcpu::trace_source_info() const +{ + Genode::uint64_t sc_time = 0; + + uint8_t res = Nova::sc_ctrl(sc_sel(), sc_time); + if (res != Nova::NOVA_OK) + warning("sc_ctrl failed res=", res); + + return { _label, String<5>("vCPU"), + Trace::Execution_time(sc_time, sc_time), + _location }; +} + static Nova::uint8_t map_async_caps(Nova::Obj_crd const src, Nova::Obj_crd const dst, @@ -132,13 +157,16 @@ void Vm_session_component::_create_vcpu(Thread_capability cap) return; /* lookup vmm pd and cpu location of handler thread in VMM */ - addr_t kernel_cpu_id = 0; + addr_t kernel_cpu_id = 0; + Affinity::Location vcpu_location; + auto lambda = [&] (Cpu_thread_component *ptr) { if (!ptr) return Vcpu::invalid(); Cpu_thread_component &thread = *ptr; + vcpu_location = thread.platform_thread().affinity(); addr_t genode_cpu_id = thread.platform_thread().affinity().xpos(); kernel_cpu_id = platform_specific().kernel_cpu_id(genode_cpu_id); @@ -153,7 +181,11 @@ void Vm_session_component::_create_vcpu(Thread_capability cap) /* allocate vCPU object */ Vcpu &vcpu = *new (_heap) Vcpu(_constrained_md_ram_alloc, _cap_quota_guard(), - Vcpu_id {_id_alloc}); + Vcpu_id {_id_alloc}, + vcpu_location, + _session_label, + _trace_control_area, + _trace_sources); /* we ran out of caps in core */ if (!vcpu.ds_cap().valid()) @@ -273,18 +305,21 @@ Genode::Dataspace_capability Vm_session_component::_cpu_state(Vcpu_id const vcpu Vm_session_component::Vm_session_component(Rpc_entrypoint &ep, Resources resources, - Label const &, + Label const &label, Diag, Ram_allocator &ram, Region_map &local_rm, - unsigned const priority) + unsigned const priority, + Trace::Source_registry &trace_sources) : Ram_quota_guard(resources.ram_quota), Cap_quota_guard(resources.cap_quota), _ep(ep), + _trace_control_area(ram, local_rm), _trace_sources(trace_sources), _constrained_md_ram_alloc(ram, _ram_quota_guard(), _cap_quota_guard()), _heap(_constrained_md_ram_alloc, local_rm), - _priority(scale_priority(priority, "VM session")) + _priority(scale_priority(priority, "VM session")), + _session_label(label) { _cap_quota_guard().withdraw(Cap_quota{1}); diff --git a/repos/base-sel4/src/core/include/vm_session_component.h b/repos/base-sel4/src/core/include/vm_session_component.h index e1739db98..de814b2d8 100644 --- a/repos/base-sel4/src/core/include/vm_session_component.h +++ b/repos/base-sel4/src/core/include/vm_session_component.h @@ -19,6 +19,8 @@ #include #include +#include + namespace Genode { class Vm_session_component; } class Genode::Vm_session_component @@ -96,7 +98,8 @@ class Genode::Vm_session_component using Cap_quota_guard::upgrade; Vm_session_component(Rpc_entrypoint &, Resources, Label const &, - Diag, Ram_allocator &ram, Region_map &, unsigned); + Diag, Ram_allocator &ram, Region_map &, unsigned, + Trace::Source_registry &); ~Vm_session_component(); /********************************* diff --git a/repos/base-sel4/src/core/spec/x86/platform_services.cc b/repos/base-sel4/src/core/spec/x86/platform_services.cc index 2c2ae3ec5..b542eef89 100644 --- a/repos/base-sel4/src/core/spec/x86/platform_services.cc +++ b/repos/base-sel4/src/core/spec/x86/platform_services.cc @@ -20,12 +20,13 @@ /* * Add x86 specific services */ -void Genode::platform_add_local_services(Rpc_entrypoint &ep, - Sliced_heap &heap, - Registry &services) +void Genode::platform_add_local_services(Rpc_entrypoint &ep, + Sliced_heap &heap, + Registry &services, + Trace::Source_registry &trace_sources) { static Vm_root vm_root(ep, heap, core_env().ram_allocator(), - core_env().local_rm()); + core_env().local_rm(), trace_sources); static Core_service vm(services, vm_root); static Io_port_root io_root(*core_env().pd_session(), diff --git a/repos/base-sel4/src/core/spec/x86/vm_session_component.cc b/repos/base-sel4/src/core/spec/x86/vm_session_component.cc index 5ce0836e8..5d74cad99 100644 --- a/repos/base-sel4/src/core/spec/x86/vm_session_component.cc +++ b/repos/base-sel4/src/core/spec/x86/vm_session_component.cc @@ -70,7 +70,8 @@ Vm_session_component::Vm_session_component(Rpc_entrypoint &ep, Diag, Ram_allocator &ram, Region_map &local_rm, - unsigned) + unsigned, + Trace::Source_registry &) try : Ram_quota_guard(resources.ram_quota), diff --git a/repos/base/src/core/include/platform_services.h b/repos/base/src/core/include/platform_services.h index f05c1fd07..4cb70bed3 100644 --- a/repos/base/src/core/include/platform_services.h +++ b/repos/base/src/core/include/platform_services.h @@ -15,6 +15,7 @@ #define _CORE__INCLUDE__PLATFORM_SERVICES_H_ #include +#include namespace Genode { @@ -26,13 +27,15 @@ namespace Genode { * Register platform-specific services at entrypoint, and service * registry * - * \param ep entrypoint used for session components of platform-services - * \param md metadata allocator for session components - * \param reg registry where to add platform-specific services + * \param ep entrypoint used for session components of platform-services + * \param md metadata allocator for session components + * \param reg registry where to add platform-specific services + * \param trace registry where to add trace subjects */ - void platform_add_local_services(Rpc_entrypoint &ep, - Sliced_heap &md, - Registry ®); + void platform_add_local_services(Rpc_entrypoint &ep, + Sliced_heap &md, + Registry ®, + Trace::Source_registry &trace); } #endif /* _CORE__INCLUDE__PLATFORM_SERVICES_H_ */ diff --git a/repos/base/src/core/include/vm_root.h b/repos/base/src/core/include/vm_root.h index 62747139f..eb87c9b87 100644 --- a/repos/base/src/core/include/vm_root.h +++ b/repos/base/src/core/include/vm_root.h @@ -27,8 +27,9 @@ class Genode::Vm_root : public Root_component { private: - Ram_allocator &_ram_allocator; - Region_map &_local_rm; + Ram_allocator &_ram_allocator; + Region_map &_local_rm; + Trace::Source_registry &_trace_sources; protected: @@ -48,7 +49,8 @@ class Genode::Vm_root : public Root_component session_resources_from_args(args), session_label_from_args(args), session_diag_from_args(args), - _ram_allocator, _local_rm, priority); + _ram_allocator, _local_rm, priority, + _trace_sources); } void _upgrade_session(Vm_session_component *vm, const char *args) override @@ -65,13 +67,15 @@ class Genode::Vm_root : public Root_component * \param session_ep entrypoint managing vm_session components * \param md_alloc meta-data allocator to be used by root component */ - Vm_root(Rpc_entrypoint &session_ep, - Allocator &md_alloc, - Ram_allocator &ram_alloc, - Region_map &local_rm) + Vm_root(Rpc_entrypoint &session_ep, + Allocator &md_alloc, + Ram_allocator &ram_alloc, + Region_map &local_rm, + Trace::Source_registry &trace_sources) : Root_component(&session_ep, &md_alloc), _ram_allocator(ram_alloc), - _local_rm(local_rm) + _local_rm(local_rm), + _trace_sources(trace_sources) { } }; diff --git a/repos/base/src/core/main.cc b/repos/base/src/core/main.cc index 834ebb35d..d8b2805c0 100644 --- a/repos/base/src/core/main.cc +++ b/repos/base/src/core/main.cc @@ -277,7 +277,7 @@ int main() static Core_service trace_service (services, trace_root); /* make platform-specific services known to service pool */ - platform_add_local_services(ep, sliced_heap, services); + platform_add_local_services(ep, sliced_heap, services, Trace::sources()); size_t const avail_ram_quota = core_pd.avail_ram().value; size_t const avail_cap_quota = core_pd.avail_caps().value; diff --git a/repos/base/src/core/platform_services.cc b/repos/base/src/core/platform_services.cc index 91d82ce1b..a2cefe0c6 100644 --- a/repos/base/src/core/platform_services.cc +++ b/repos/base/src/core/platform_services.cc @@ -16,4 +16,5 @@ void Genode::platform_add_local_services(Rpc_entrypoint &, Sliced_heap &, - Registry &) { } + Registry &, + Trace::Source_registry &) { } diff --git a/repos/base/src/core/spec/x86/platform_services.cc b/repos/base/src/core/spec/x86/platform_services.cc index db5411645..5bd9f1892 100644 --- a/repos/base/src/core/spec/x86/platform_services.cc +++ b/repos/base/src/core/spec/x86/platform_services.cc @@ -24,9 +24,10 @@ /* * Add x86 specific ioport service */ -void Genode::platform_add_local_services(Rpc_entrypoint &, - Sliced_heap &sliced_heap, - Registry &local_services) +void Genode::platform_add_local_services(Rpc_entrypoint &, + Sliced_heap &sliced_heap, + Registry &local_services, + Trace::Source_registry &) { static Io_port_root io_port_root(*core_env().pd_session(), platform().io_port_alloc(), sliced_heap);