From cec3ca6a70b9a429143c95d938f433fddca2e784 Mon Sep 17 00:00:00 2001 From: Alexander Boettcher Date: Fri, 8 Jan 2016 18:11:23 +0100 Subject: [PATCH] x86: use slave label to differentiate device PDs Issue #1848 --- .../os/src/drivers/platform/spec/x86/device_pd.h | 5 +++-- .../drivers/platform/spec/x86/device_pd/main.cc | 7 +++---- .../platform/spec/x86/pci_session_component.h | 15 +++++++++------ 3 files changed, 15 insertions(+), 12 deletions(-) diff --git a/repos/os/src/drivers/platform/spec/x86/device_pd.h b/repos/os/src/drivers/platform/spec/x86/device_pd.h index 88e1ebec0..f3e0bee28 100644 --- a/repos/os/src/drivers/platform/spec/x86/device_pd.h +++ b/repos/os/src/drivers/platform/spec/x86/device_pd.h @@ -41,9 +41,10 @@ class Platform::Device_pd_policy : public Genode::Slave_policy Device_pd_policy(Genode::Rpc_entrypoint &slave_ep, Genode::Ram_session_capability ram_ref_cap, - Genode::addr_t device_pd_ram_quota) + Genode::addr_t device_pd_ram_quota, + const char * label) : - Slave_policy("device_pd", slave_ep), + Slave_policy(label, slave_ep, nullptr, "device_pd"), _lock(Genode::Lock::LOCKED), _ram_ref_cap(ram_ref_cap), _device_pd_slave(slave_ep, *this, device_pd_ram_quota, ram_ref_cap) diff --git a/repos/os/src/drivers/platform/spec/x86/device_pd/main.cc b/repos/os/src/drivers/platform/spec/x86/device_pd/main.cc index 8d4f206f9..3ad0cb3a1 100644 --- a/repos/os/src/drivers/platform/spec/x86/device_pd/main.cc +++ b/repos/os/src/drivers/platform/spec/x86/device_pd/main.cc @@ -147,6 +147,9 @@ void Platform::Device_pd_component::assign_pci(Genode::Io_mem_dataspace_capabili PERR("assignment of PCI device %x:%x.%x failed phys=%lx virt=%lx", rid >> 8, (rid >> 3) & 0x1f, rid & 0x7, ds_client.phys_addr(), page); + else + PINF("assignment of %x:%x.%x succeeded", + rid >> 8, (rid >> 3) & 0x1f, rid & 0x7); /* we don't need the mapping anymore */ rm_session()->detach(page); @@ -156,8 +159,6 @@ int main(int argc, char **argv) { using namespace Genode; - Genode::printf("Device protection domain starting ...\n"); - /* * Initialize server entry point */ @@ -177,8 +178,6 @@ int main(int argc, char **argv) env()->parent()->announce(ep.manage(&root)); - printf("Device protection domain started\n"); - Genode::sleep_forever(); return 0; } diff --git a/repos/os/src/drivers/platform/spec/x86/pci_session_component.h b/repos/os/src/drivers/platform/spec/x86/pci_session_component.h index acca4edc8..b5beed2ef 100644 --- a/repos/os/src/drivers/platform/spec/x86/pci_session_component.h +++ b/repos/os/src/drivers/platform/spec/x86/pci_session_component.h @@ -145,7 +145,8 @@ namespace Platform { Devicepd (Genode::Rpc_entrypoint &ep, Genode::Allocator_guard &md_alloc, - Genode::Ram_session_capability ram_ref_cap) + Genode::Ram_session_capability ram_ref_cap, + const char * label) : policy(nullptr), child(Genode::reinterpret_cap_cast(Genode::Native_capability())), @@ -161,7 +162,7 @@ namespace Platform { } try { - policy = new (md_alloc) Device_pd_policy(ep, ram_ref_cap, DEVICE_PD_RAM_QUOTA); + policy = new (md_alloc) Device_pd_policy(ep, ram_ref_cap, DEVICE_PD_RAM_QUOTA, label); using Genode::Session_capability; using Genode::Affinity; @@ -199,11 +200,11 @@ namespace Platform { bool valid() { return policy && policy->root().valid() && child.valid(); } }; - Genode::Lazy_volatile_object _device_pd; - Genode::Session_label _label; Genode::Session_policy _policy; + Genode::Lazy_volatile_object _device_pd; + enum { MAX_PCI_DEVICES = Device_config::MAX_BUSES * Device_config::MAX_DEVICES * Device_config::MAX_FUNCTIONS }; @@ -745,7 +746,8 @@ namespace Platform { if (!_device_pd.is_constructed()) _device_pd.construct(_device_pd_ep, _md_alloc, - _resources.ram().cap()); + _resources.ram().cap(), + _label.string()); if (!_device_pd->valid()) return; @@ -772,7 +774,8 @@ namespace Platform { { if (!_device_pd.is_constructed()) _device_pd.construct(_device_pd_ep, _md_alloc, - _resources.ram().cap()); + _resources.ram().cap(), + _label.string()); if (!_md_alloc.withdraw(size)) throw Out_of_metadata();