summaryrefslogtreecommitdiff
path: root/src/mem/page_table.cc
diff options
context:
space:
mode:
authorAli Saidi <saidi@eecs.umich.edu>2007-06-05 01:03:35 -0400
committerAli Saidi <saidi@eecs.umich.edu>2007-06-05 01:03:35 -0400
commit85986e9dff0e3dc7e54adf4da54a7c099c7e815f (patch)
treefa69f5af71e8390d8e9982e0d700f2932620f415 /src/mem/page_table.cc
parent48133a0f04d43f71a90984eff1899fc2556bb6ec (diff)
downloadgem5-85986e9dff0e3dc7e54adf4da54a7c099c7e815f.tar.xz
Clean up some of vincent's code and commit it
Makes page table cache scheme actually work src/mem/page_table.cc: src/mem/page_table.hh: fix caching scheme to actually work and improve performance --HG-- extra : convert_revision : 443a8d8acbee540b26affcfdfbf107b8e735d1bd
Diffstat (limited to 'src/mem/page_table.cc')
-rw-r--r--src/mem/page_table.cc22
1 files changed, 8 insertions, 14 deletions
diff --git a/src/mem/page_table.cc b/src/mem/page_table.cc
index 96bc23793..b29a07078 100644
--- a/src/mem/page_table.cc
+++ b/src/mem/page_table.cc
@@ -90,8 +90,6 @@ PageTable::page_check(Addr addr, int64_t size) const
}
-
-
void
PageTable::allocate(Addr vaddr, int64_t size)
{
@@ -109,12 +107,7 @@ PageTable::allocate(Addr vaddr, int64_t size)
}
pTable[vaddr] = system->new_page();
- pTableCache[2].paddr = pTableCache[1].paddr;
- pTableCache[2].vaddr = pTableCache[1].vaddr;
- pTableCache[1].paddr = pTableCache[0].paddr;
- pTableCache[1].vaddr = pTableCache[0].vaddr;
- pTableCache[0].paddr = pTable[vaddr];
- pTableCache[0].vaddr = vaddr;
+ updateCache(vaddr, pTable[vaddr]);
}
}
@@ -126,16 +119,16 @@ PageTable::translate(Addr vaddr, Addr &paddr)
Addr page_addr = pageAlign(vaddr);
paddr = 0;
- if (pTableCache[0].vaddr == vaddr) {
- paddr = pTableCache[0].paddr;
+ if (pTableCache[0].vaddr == page_addr) {
+ paddr = pTableCache[0].paddr + pageOffset(vaddr);
return true;
}
- if (pTableCache[1].vaddr == vaddr) {
- paddr = pTableCache[1].paddr;
+ if (pTableCache[1].vaddr == page_addr) {
+ paddr = pTableCache[1].paddr + pageOffset(vaddr);
return true;
}
- if (pTableCache[2].vaddr == vaddr) {
- paddr = pTableCache[2].paddr;
+ if (pTableCache[2].vaddr == page_addr) {
+ paddr = pTableCache[2].paddr + pageOffset(vaddr);
return true;
}
@@ -145,6 +138,7 @@ PageTable::translate(Addr vaddr, Addr &paddr)
return false;
}
+ updateCache(page_addr, iter->second);
paddr = iter->second + pageOffset(vaddr);
return true;
}