]> rtime.felk.cvut.cz Git - l4.git/blobdiff - l4/pkg/plr/server/src/fault_handlers/pagefault.cc
update
[l4.git] / l4 / pkg / plr / server / src / fault_handlers / pagefault.cc
index 78e4bd76eeec6511abe31cc80bcd6401cfd66b31..2bb1a2bf2253822df31d4a5e27f3249ab263a0f3 100644 (file)
@@ -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