changeset f9b675da608a in /z/repo/m5
details: http://repo.m5sim.org/m5?cmd=changeset;node=f9b675da608a
description:
x86: implements vtophys
Calls walker to look up virt. to phys. page mapping
diffstat:
src/arch/x86/pagetable_walker.hh | 1 +
src/arch/x86/system.cc | 1 +
src/arch/x86/vtophys.cc | 29 ++++++++++++++++++++++++++---
src/arch/x86/vtophys.hh | 3 ---
4 files changed, 28 insertions(+), 6 deletions(-)
diffs (87 lines):
diff -r 8b05ff5ef958 -r f9b675da608a src/arch/x86/pagetable_walker.hh
--- a/src/arch/x86/pagetable_walker.hh Sun Feb 06 22:14:17 2011 -0800
+++ b/src/arch/x86/pagetable_walker.hh Sun Feb 06 22:14:17 2011 -0800
@@ -48,6 +48,7 @@
#include "mem/mem_object.hh"
#include "mem/packet.hh"
#include "params/X86PagetableWalker.hh"
+#include "sim/faults.hh"
class ThreadContext;
diff -r 8b05ff5ef958 -r f9b675da608a src/arch/x86/system.cc
--- a/src/arch/x86/system.cc Sun Feb 06 22:14:17 2011 -0800
+++ b/src/arch/x86/system.cc Sun Feb 06 22:14:17 2011 -0800
@@ -39,6 +39,7 @@
#include "arch/x86/bios/smbios.hh"
#include "arch/x86/bios/intelmp.hh"
+#include "arch/x86/isa_traits.hh"
#include "arch/x86/regs/misc.hh"
#include "arch/x86/system.hh"
#include "arch/vtophys.hh"
diff -r 8b05ff5ef958 -r f9b675da608a src/arch/x86/vtophys.cc
--- a/src/arch/x86/vtophys.cc Sun Feb 06 22:14:17 2011 -0800
+++ b/src/arch/x86/vtophys.cc Sun Feb 06 22:14:17 2011 -0800
@@ -39,19 +39,42 @@
#include <string>
+#include "arch/x86/pagetable_walker.hh"
+#include "arch/x86/tlb.hh"
#include "arch/x86/vtophys.hh"
+#include "base/trace.hh"
+#include "config/full_system.hh"
+#include "cpu/thread_context.hh"
+#include "sim/fault.hh"
using namespace std;
namespace X86ISA
{
- Addr vtophys(Addr vaddr)
+ Addr
+ vtophys(Addr vaddr)
{
+#if FULL_SYSTEM
+ panic("Need access to page tables\n");
+#endif
return vaddr;
}
- Addr vtophys(ThreadContext *tc, Addr addr)
+ Addr
+ vtophys(ThreadContext *tc, Addr vaddr)
{
- return addr;
+#if FULL_SYSTEM
+ Walker *walker = tc->getDTBPtr()->getWalker();
+ Addr size;
+ Addr addr = vaddr;
+ Fault fault = walker->startFunctional(tc, addr, size, BaseTLB::Read);
+ if (fault != NoFault)
+ panic("vtophys page walk returned fault\n");
+ Addr masked_addr = vaddr & (size - 1);
+ Addr paddr = addr | masked_addr;
+ DPRINTF(VtoPhys, "vtophys(%#x) -> %#x\n", vaddr, paddr);
+ return paddr;
+#endif
+ return vaddr;
}
}
diff -r 8b05ff5ef958 -r f9b675da608a src/arch/x86/vtophys.hh
--- a/src/arch/x86/vtophys.hh Sun Feb 06 22:14:17 2011 -0800
+++ b/src/arch/x86/vtophys.hh Sun Feb 06 22:14:17 2011 -0800
@@ -40,12 +40,9 @@
#ifndef __ARCH_X86_VTOPHYS_HH__
#define __ARCH_X86_VTOPHYS_HH__
-#include "arch/x86/isa_traits.hh"
-#include "arch/x86/pagetable.hh"
#include "base/types.hh"
class ThreadContext;
-class FunctionalPort;
namespace X86ISA
{
_______________________________________________
m5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/m5-dev