X-Git-Url: https://rtime.felk.cvut.cz/gitweb/l4.git/blobdiff_plain/9347d109a9b928929fdc0cedcc1d867bd7e2a918..c02bb3e0b72cd17aaa3cdfb9587d934f1097cc1f:/l4/pkg/plr/server/src/fault_handlers/pagefault.cc diff --git a/l4/pkg/plr/server/src/fault_handlers/pagefault.cc b/l4/pkg/plr/server/src/fault_handlers/pagefault.cc index 78e4bd76e..2bb1a2bf2 100644 --- a/l4/pkg/plr/server/src/fault_handlers/pagefault.cc +++ b/l4/pkg/plr/server/src/fault_handlers/pagefault.cc @@ -18,6 +18,7 @@ #include "../app_loading" #include "../locking.h" #include "../configuration" +#include "syscalls_handler.h" #include "observers.h" @@ -60,6 +61,15 @@ Romain::PageFaultObserver::notify(Romain::App_instance *i, Romain::App_thread *t bool write_pf = vcpu->r()->err & 0x2; l4_addr_t pfa = vcpu->r()->pfa; + Measurements::GenericEvent *ev = Romain::_the_instance_manager->logbuf()->next(); + ev->header.tsc = Romain::_the_instance_manager->logbuf()->getTime(Log::logLocalTSC); + ev->header.vcpu = (l4_uint32_t)t->vcpu(); + ev->header.type = Measurements::Pagefault; + ev->data.pf.address = pfa; + ev->data.pf.rw = write_pf ? 1 : 0; + ev->data.pf.localbase = 0; + ev->data.pf.remotebase = 0; + MSGt(t) << (write_pf ? "\033[31mwrite\033[0m" : "\033[34;1mread\033[0m") << " page fault @ 0x" << std::hex << pfa; @@ -117,6 +127,8 @@ Romain::PageFaultObserver::notify(Romain::App_instance *i, Romain::App_thread *t } #undef MAX_MAP_SHIFT #endif + ev->data.pf.localbase = n->second.local_region(i->id()).start() + offset_in_region; + ev->data.pf.remotebase = n->first.start() + offset_in_region; i->map(n->second.local_region(i->id()).start() + offset_in_region, // local addr n->first.start() + offset_in_region, // remote addr