mirror of
https://github.com/genodelabs/genode.git
synced 2025-03-10 22:44:30 +00:00
core: add map method to pd_session interface
The method can be used to trigger the eager insertion of page frames into page tables. Intention: to be used for memory used for DMA. Issue #2209
This commit is contained in:
parent
5f35175644
commit
58e4f6cf9d
@ -23,7 +23,7 @@ SRC_CC += stack_area.cc \
|
|||||||
pager_object.cc \
|
pager_object.cc \
|
||||||
rpc_cap_factory_l4.cc \
|
rpc_cap_factory_l4.cc \
|
||||||
ram_dataspace_factory.cc \
|
ram_dataspace_factory.cc \
|
||||||
pd_assign_pci.cc \
|
pd_session_support.cc \
|
||||||
platform.cc \
|
platform.cc \
|
||||||
platform_pd.cc \
|
platform_pd.cc \
|
||||||
platform_services.cc \
|
platform_services.cc \
|
||||||
@ -60,7 +60,7 @@ vpath rpc_cap_factory_l4.cc $(GEN_CORE_DIR)
|
|||||||
vpath ram_dataspace_factory.cc $(GEN_CORE_DIR)
|
vpath ram_dataspace_factory.cc $(GEN_CORE_DIR)
|
||||||
vpath core_rpc_cap_alloc.cc $(GEN_CORE_DIR)
|
vpath core_rpc_cap_alloc.cc $(GEN_CORE_DIR)
|
||||||
vpath core_region_map.cc $(GEN_CORE_DIR)
|
vpath core_region_map.cc $(GEN_CORE_DIR)
|
||||||
vpath pd_assign_pci.cc $(GEN_CORE_DIR)
|
vpath pd_session_support.cc $(GEN_CORE_DIR)
|
||||||
vpath pd_upgrade_ram_quota.cc $(GEN_CORE_DIR)
|
vpath pd_upgrade_ram_quota.cc $(GEN_CORE_DIR)
|
||||||
vpath region_map_component.cc $(GEN_CORE_DIR)
|
vpath region_map_component.cc $(GEN_CORE_DIR)
|
||||||
vpath io_mem_session_component.cc $(GEN_CORE_DIR)
|
vpath io_mem_session_component.cc $(GEN_CORE_DIR)
|
||||||
|
@ -19,7 +19,7 @@ SRC_CC += stack_area.cc \
|
|||||||
main.cc \
|
main.cc \
|
||||||
pager.cc \
|
pager.cc \
|
||||||
pager_object.cc \
|
pager_object.cc \
|
||||||
pd_assign_pci.cc \
|
pd_session_support.cc \
|
||||||
native_cpu_component.cc \
|
native_cpu_component.cc \
|
||||||
rpc_cap_factory.cc \
|
rpc_cap_factory.cc \
|
||||||
platform.cc \
|
platform.cc \
|
||||||
@ -55,7 +55,7 @@ vpath default_log.cc $(GEN_CORE_DIR)
|
|||||||
vpath io_mem_session_component.cc $(GEN_CORE_DIR)
|
vpath io_mem_session_component.cc $(GEN_CORE_DIR)
|
||||||
vpath io_mem_session_support.cc $(GEN_CORE_DIR)
|
vpath io_mem_session_support.cc $(GEN_CORE_DIR)
|
||||||
vpath main.cc $(GEN_CORE_DIR)
|
vpath main.cc $(GEN_CORE_DIR)
|
||||||
vpath pd_assign_pci.cc $(GEN_CORE_DIR)
|
vpath pd_session_support.cc $(GEN_CORE_DIR)
|
||||||
vpath pd_upgrade_ram_quota.cc $(GEN_CORE_DIR)
|
vpath pd_upgrade_ram_quota.cc $(GEN_CORE_DIR)
|
||||||
vpath pd_session_component.cc $(GEN_CORE_DIR)
|
vpath pd_session_component.cc $(GEN_CORE_DIR)
|
||||||
vpath region_map_component.cc $(GEN_CORE_DIR)
|
vpath region_map_component.cc $(GEN_CORE_DIR)
|
||||||
|
@ -30,7 +30,7 @@ SRC_CC += io_mem_session_support.cc
|
|||||||
SRC_CC += irq_session_component.cc
|
SRC_CC += irq_session_component.cc
|
||||||
SRC_CC += main.cc
|
SRC_CC += main.cc
|
||||||
SRC_CC += native_pd_component.cc
|
SRC_CC += native_pd_component.cc
|
||||||
SRC_CC += pd_assign_pci.cc
|
SRC_CC += pd_session_support.cc
|
||||||
SRC_CC += platform.cc
|
SRC_CC += platform.cc
|
||||||
SRC_CC += platform_pd.cc
|
SRC_CC += platform_pd.cc
|
||||||
SRC_CC += platform_thread.cc
|
SRC_CC += platform_thread.cc
|
||||||
|
@ -14,7 +14,7 @@ SRC_CC = main.cc \
|
|||||||
cpu_session_component.cc \
|
cpu_session_component.cc \
|
||||||
cpu_session_support.cc \
|
cpu_session_support.cc \
|
||||||
cpu_thread_component.cc \
|
cpu_thread_component.cc \
|
||||||
pd_assign_pci.cc \
|
pd_session_support.cc \
|
||||||
dataspace_component.cc \
|
dataspace_component.cc \
|
||||||
native_pd_component.cc \
|
native_pd_component.cc \
|
||||||
native_cpu_component.cc \
|
native_cpu_component.cc \
|
||||||
@ -52,7 +52,7 @@ vpath cpu_session_component.cc $(GEN_CORE_DIR)
|
|||||||
vpath cpu_session_support.cc $(GEN_CORE_DIR)
|
vpath cpu_session_support.cc $(GEN_CORE_DIR)
|
||||||
vpath cpu_thread_component.cc $(GEN_CORE_DIR)
|
vpath cpu_thread_component.cc $(GEN_CORE_DIR)
|
||||||
vpath pd_upgrade_ram_quota.cc $(GEN_CORE_DIR)
|
vpath pd_upgrade_ram_quota.cc $(GEN_CORE_DIR)
|
||||||
vpath pd_assign_pci.cc $(GEN_CORE_DIR)
|
vpath pd_session_support.cc $(GEN_CORE_DIR)
|
||||||
vpath capability_space.cc $(GEN_CORE_DIR)
|
vpath capability_space.cc $(GEN_CORE_DIR)
|
||||||
vpath rpc_cap_factory_l4.cc $(GEN_CORE_DIR)
|
vpath rpc_cap_factory_l4.cc $(GEN_CORE_DIR)
|
||||||
vpath ram_dataspace_factory.cc $(GEN_CORE_DIR)
|
vpath ram_dataspace_factory.cc $(GEN_CORE_DIR)
|
||||||
|
@ -24,7 +24,7 @@ SRC_CC += stack_area.cc \
|
|||||||
pager.cc \
|
pager.cc \
|
||||||
native_cpu_component.cc \
|
native_cpu_component.cc \
|
||||||
native_pd_component.cc \
|
native_pd_component.cc \
|
||||||
pd_assign_pci.cc \
|
pd_session_support.cc \
|
||||||
rpc_cap_factory.cc \
|
rpc_cap_factory.cc \
|
||||||
ram_dataspace_factory.cc \
|
ram_dataspace_factory.cc \
|
||||||
platform.cc \
|
platform.cc \
|
||||||
|
@ -30,3 +30,6 @@ bool Pd_session_component::assign_pci(addr_t pci_config_memory, uint16_t bdf)
|
|||||||
|
|
||||||
return res == Nova::NOVA_OK;
|
return res == Nova::NOVA_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Pd_session_component::map(addr_t, addr_t) { }
|
@ -24,7 +24,7 @@ SRC_CC += stack_area.cc \
|
|||||||
pager.cc \
|
pager.cc \
|
||||||
pager_ep.cc \
|
pager_ep.cc \
|
||||||
pager_object.cc \
|
pager_object.cc \
|
||||||
pd_assign_pci.cc \
|
pd_session_support.cc \
|
||||||
rpc_cap_factory_l4.cc \
|
rpc_cap_factory_l4.cc \
|
||||||
ram_dataspace_factory.cc \
|
ram_dataspace_factory.cc \
|
||||||
platform.cc \
|
platform.cc \
|
||||||
@ -57,7 +57,7 @@ vpath capability_space.cc $(GEN_CORE_DIR)
|
|||||||
vpath rpc_cap_factory_l4.cc $(GEN_CORE_DIR)
|
vpath rpc_cap_factory_l4.cc $(GEN_CORE_DIR)
|
||||||
vpath ram_dataspace_factory.cc $(GEN_CORE_DIR)
|
vpath ram_dataspace_factory.cc $(GEN_CORE_DIR)
|
||||||
vpath pd_upgrade_ram_quota.cc $(GEN_CORE_DIR)
|
vpath pd_upgrade_ram_quota.cc $(GEN_CORE_DIR)
|
||||||
vpath pd_assign_pci.cc $(GEN_CORE_DIR)
|
vpath pd_session_support.cc $(GEN_CORE_DIR)
|
||||||
vpath region_map_component.cc $(GEN_CORE_DIR)
|
vpath region_map_component.cc $(GEN_CORE_DIR)
|
||||||
vpath io_mem_session_component.cc $(GEN_CORE_DIR)
|
vpath io_mem_session_component.cc $(GEN_CORE_DIR)
|
||||||
vpath io_mem_session_support.cc $(GEN_CORE_DIR)
|
vpath io_mem_session_support.cc $(GEN_CORE_DIR)
|
||||||
|
@ -21,7 +21,7 @@ SRC_CC = stack_area.cc \
|
|||||||
main.cc \
|
main.cc \
|
||||||
rpc_cap_factory_l4.cc \
|
rpc_cap_factory_l4.cc \
|
||||||
ram_dataspace_factory.cc \
|
ram_dataspace_factory.cc \
|
||||||
pd_assign_pci.cc \
|
pd_session_support.cc \
|
||||||
pager.cc \
|
pager.cc \
|
||||||
pager_ep.cc \
|
pager_ep.cc \
|
||||||
pager_object.cc \
|
pager_object.cc \
|
||||||
@ -51,7 +51,7 @@ vpath rom_session_component.cc $(GEN_CORE_DIR)
|
|||||||
vpath cpu_session_component.cc $(GEN_CORE_DIR)
|
vpath cpu_session_component.cc $(GEN_CORE_DIR)
|
||||||
vpath cpu_session_support.cc $(GEN_CORE_DIR)
|
vpath cpu_session_support.cc $(GEN_CORE_DIR)
|
||||||
vpath cpu_thread_component.cc $(GEN_CORE_DIR)
|
vpath cpu_thread_component.cc $(GEN_CORE_DIR)
|
||||||
vpath pd_assign_pci.cc $(GEN_CORE_DIR)
|
vpath pd_session_support.cc $(GEN_CORE_DIR)
|
||||||
vpath pd_upgrade_ram_quota.cc $(GEN_CORE_DIR)
|
vpath pd_upgrade_ram_quota.cc $(GEN_CORE_DIR)
|
||||||
vpath region_map_component.cc $(GEN_CORE_DIR)
|
vpath region_map_component.cc $(GEN_CORE_DIR)
|
||||||
vpath rpc_cap_factory_l4.cc $(GEN_CORE_DIR)
|
vpath rpc_cap_factory_l4.cc $(GEN_CORE_DIR)
|
||||||
|
@ -10,7 +10,7 @@ SRC_CC += \
|
|||||||
cpu_thread_component.cc \
|
cpu_thread_component.cc \
|
||||||
rpc_cap_factory.cc \
|
rpc_cap_factory.cc \
|
||||||
ram_dataspace_factory.cc \
|
ram_dataspace_factory.cc \
|
||||||
pd_assign_pci.cc \
|
pd_session_support.cc \
|
||||||
io_mem_session_component.cc \
|
io_mem_session_component.cc \
|
||||||
io_mem_session_support.cc \
|
io_mem_session_support.cc \
|
||||||
thread_start.cc \
|
thread_start.cc \
|
||||||
@ -48,7 +48,7 @@ vpath rom_session_component.cc $(GEN_CORE_DIR)
|
|||||||
vpath cpu_session_component.cc $(GEN_CORE_DIR)
|
vpath cpu_session_component.cc $(GEN_CORE_DIR)
|
||||||
vpath cpu_session_support.cc $(GEN_CORE_DIR)
|
vpath cpu_session_support.cc $(GEN_CORE_DIR)
|
||||||
vpath cpu_thread_component.cc $(GEN_CORE_DIR)
|
vpath cpu_thread_component.cc $(GEN_CORE_DIR)
|
||||||
vpath pd_assign_pci.cc $(GEN_CORE_DIR)
|
vpath pd_session_support.cc $(GEN_CORE_DIR)
|
||||||
vpath pd_upgrade_ram_quota.cc $(GEN_CORE_DIR)
|
vpath pd_upgrade_ram_quota.cc $(GEN_CORE_DIR)
|
||||||
vpath region_map_component.cc $(GEN_CORE_DIR)
|
vpath region_map_component.cc $(GEN_CORE_DIR)
|
||||||
vpath io_mem_session_component.cc $(GEN_CORE_DIR)
|
vpath io_mem_session_component.cc $(GEN_CORE_DIR)
|
||||||
|
@ -31,6 +31,8 @@ struct Genode::Pd_session_client : Rpc_client<Pd_session>
|
|||||||
bool assign_pci(addr_t pci_config_memory_address, uint16_t bdf) override {
|
bool assign_pci(addr_t pci_config_memory_address, uint16_t bdf) override {
|
||||||
return call<Rpc_assign_pci>(pci_config_memory_address, bdf); }
|
return call<Rpc_assign_pci>(pci_config_memory_address, bdf); }
|
||||||
|
|
||||||
|
void map(addr_t virt, addr_t size) override { call<Rpc_map>(virt, size); }
|
||||||
|
|
||||||
Signal_source_capability alloc_signal_source() override {
|
Signal_source_capability alloc_signal_source() override {
|
||||||
return call<Rpc_alloc_signal_source>(); }
|
return call<Rpc_alloc_signal_source>(); }
|
||||||
|
|
||||||
|
@ -68,6 +68,20 @@ struct Genode::Pd_session : Session, Ram_allocator
|
|||||||
*/
|
*/
|
||||||
virtual bool assign_pci(addr_t pci_config_memory_address, uint16_t bdf) = 0;
|
virtual bool assign_pci(addr_t pci_config_memory_address, uint16_t bdf) = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Trigger eager insertion of page frames to page table within
|
||||||
|
* specified virtual range.
|
||||||
|
*
|
||||||
|
* If the used kernel don't support this feature, the operation will
|
||||||
|
* silently ignore the request.
|
||||||
|
*
|
||||||
|
* \param virt virtual address within the address space to start
|
||||||
|
* \param size the virtual size of the region
|
||||||
|
*
|
||||||
|
* \throw Out_of_ram
|
||||||
|
* \throw Out_of_caps
|
||||||
|
*/
|
||||||
|
virtual void map(addr_t virt, addr_t size) = 0;
|
||||||
|
|
||||||
/********************************
|
/********************************
|
||||||
** Support for the signal API **
|
** Support for the signal API **
|
||||||
@ -291,6 +305,9 @@ struct Genode::Pd_session : Session, Ram_allocator
|
|||||||
|
|
||||||
GENODE_RPC(Rpc_assign_parent, void, assign_parent, Capability<Parent>);
|
GENODE_RPC(Rpc_assign_parent, void, assign_parent, Capability<Parent>);
|
||||||
GENODE_RPC(Rpc_assign_pci, bool, assign_pci, addr_t, uint16_t);
|
GENODE_RPC(Rpc_assign_pci, bool, assign_pci, addr_t, uint16_t);
|
||||||
|
GENODE_RPC_THROW(Rpc_map, void, map,
|
||||||
|
GENODE_TYPE_LIST(Out_of_ram, Out_of_caps),
|
||||||
|
addr_t, addr_t);
|
||||||
|
|
||||||
GENODE_RPC_THROW(Rpc_alloc_signal_source, Signal_source_capability,
|
GENODE_RPC_THROW(Rpc_alloc_signal_source, Signal_source_capability,
|
||||||
alloc_signal_source,
|
alloc_signal_source,
|
||||||
@ -331,7 +348,7 @@ struct Genode::Pd_session : Session, Ram_allocator
|
|||||||
|
|
||||||
GENODE_RPC(Rpc_native_pd, Capability<Native_pd>, native_pd);
|
GENODE_RPC(Rpc_native_pd, Capability<Native_pd>, native_pd);
|
||||||
|
|
||||||
GENODE_RPC_INTERFACE(Rpc_assign_parent, Rpc_assign_pci,
|
GENODE_RPC_INTERFACE(Rpc_assign_parent, Rpc_assign_pci, Rpc_map,
|
||||||
Rpc_alloc_signal_source, Rpc_free_signal_source,
|
Rpc_alloc_signal_source, Rpc_free_signal_source,
|
||||||
Rpc_alloc_context, Rpc_free_context, Rpc_submit,
|
Rpc_alloc_context, Rpc_free_context, Rpc_submit,
|
||||||
Rpc_alloc_rpc_cap, Rpc_free_rpc_cap, Rpc_address_space,
|
Rpc_alloc_rpc_cap, Rpc_free_rpc_cap, Rpc_address_space,
|
||||||
|
@ -178,6 +178,7 @@ class Genode::Pd_session_component : public Session_object<Pd_session>
|
|||||||
|
|
||||||
bool assign_pci(addr_t, uint16_t) override;
|
bool assign_pci(addr_t, uint16_t) override;
|
||||||
|
|
||||||
|
void map(addr_t, addr_t) override;
|
||||||
|
|
||||||
/****************
|
/****************
|
||||||
** Signalling **
|
** Signalling **
|
||||||
|
@ -18,5 +18,7 @@
|
|||||||
|
|
||||||
using namespace Genode;
|
using namespace Genode;
|
||||||
|
|
||||||
bool Pd_session_component::assign_pci(addr_t, uint16_t) { return false; }
|
bool Pd_session_component::assign_pci(addr_t, uint16_t) { return true; }
|
||||||
|
|
||||||
|
void Pd_session_component::map(addr_t, addr_t) { }
|
||||||
|
|
@ -85,6 +85,9 @@ class Gdb_monitor::Pd_session_component : public Rpc_object<Pd_session>
|
|||||||
bool assign_pci(addr_t addr, uint16_t bdf) override {
|
bool assign_pci(addr_t addr, uint16_t bdf) override {
|
||||||
return _pd.assign_pci(addr, bdf); }
|
return _pd.assign_pci(addr, bdf); }
|
||||||
|
|
||||||
|
void map(addr_t virt, addr_t size) override {
|
||||||
|
return _pd.map(virt, size); }
|
||||||
|
|
||||||
Signal_source_capability alloc_signal_source() override {
|
Signal_source_capability alloc_signal_source() override {
|
||||||
return _pd.alloc_signal_source(); }
|
return _pd.alloc_signal_source(); }
|
||||||
|
|
||||||
|
@ -216,6 +216,9 @@ class Noux::Pd_session_component : public Rpc_object<Pd_session>
|
|||||||
bool assign_pci(addr_t addr, uint16_t bdf) override {
|
bool assign_pci(addr_t addr, uint16_t bdf) override {
|
||||||
return _pd.assign_pci(addr, bdf); }
|
return _pd.assign_pci(addr, bdf); }
|
||||||
|
|
||||||
|
void map(addr_t virt, addr_t size) override {
|
||||||
|
return _pd.map(virt, size); }
|
||||||
|
|
||||||
Signal_source_capability alloc_signal_source() override
|
Signal_source_capability alloc_signal_source() override
|
||||||
{
|
{
|
||||||
return _with_automatic_cap_upgrade([&] () {
|
return _with_automatic_cap_upgrade([&] () {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user