base: unify page-fault notification for kernels

* Enable page-fault messages for regions not directly managed by core
* Unify output given when a page-fault occurs related to those regions

Fix #2082
This commit is contained in:
Stefan Kalkowski
2016-09-05 11:24:51 +02:00
committed by Christian Helmuth
parent 97201e6778
commit 2147c42ec6
27 changed files with 142 additions and 141 deletions

View File

@@ -97,15 +97,6 @@ namespace Genode {
constexpr size_t get_super_page_size() { return L4_SUPERPAGESIZE; }
constexpr size_t get_super_page_size_log2() { return L4_LOG2_SUPERPAGESIZE; }
inline void print_page_fault(const char *msg, addr_t pf_addr, addr_t pf_ip,
Region_map::State::Fault_type pf_type,
unsigned long badge)
{
printf("%s (%s pf_addr=%p pf_ip=%p from %lx)\n", msg,
pf_type == Region_map::State::WRITE_FAULT ? "WRITE" : "READ",
(void *)pf_addr, (void *)pf_ip, badge);
}
inline addr_t map_src_addr(addr_t core_local_addr, addr_t phys_addr) {
return core_local_addr; }

View File

@@ -69,9 +69,9 @@ void Pager_entrypoint::entry()
/* handle request */
if (obj->pager(_pager)) {
/* could not resolv - leave thread in pagefault */
warning("could not resolve "
"pf=", Hex(_pager.fault_addr()), " ",
"ip=", Hex(_pager.fault_ip()));
warning("page-fault, ", *obj,
" ip=", Hex(_pager.fault_ip()),
" pf-addr=", Hex(_pager.fault_addr()));
} else {
_pager.set_reply_dst(Native_thread(obj->badge()));
reply_pending = true;

View File

@@ -126,7 +126,9 @@ static void _core_pager_loop()
Platform::Sigma0::Sigma0(Cap_index* i)
:
Pager_object(Cpu_session_capability(), Thread_capability(), 0, Affinity::Location())
Pager_object(Cpu_session_capability(), Thread_capability(),
0, Affinity::Location(), Session_label(),
Cpu_session::Name("sigma0"))
{
/*
* We use the Pager_object here in a slightly different manner,
@@ -139,7 +141,9 @@ Platform::Sigma0::Sigma0(Cap_index* i)
Platform::Core_pager::Core_pager(Platform_pd *core_pd, Sigma0 *sigma0)
:
Platform_thread("core.pager"),
Pager_object(Cpu_session_capability(), Thread_capability(), 0, Affinity::Location())
Pager_object(Cpu_session_capability(), Thread_capability(),
0, Affinity::Location(), Session_label(),
Cpu_session::Name(name()))
{
Platform_thread::pager(sigma0);