diff options
author | Nilay Vaish <nilay@cs.wisc.edu> | 2014-11-06 05:42:20 -0600 |
---|---|---|
committer | Nilay Vaish <nilay@cs.wisc.edu> | 2014-11-06 05:42:20 -0600 |
commit | 85c29973a3cdbbbc2ed77014a730cbc625899b03 (patch) | |
tree | 94dc98ea81cea698f2d9715f961f20bee70715e9 /src/mem/ruby/structures/DirectoryMemory.cc | |
parent | 95a0b184314cf0171a20fb7e71c845891dc56496 (diff) | |
download | gem5-85c29973a3cdbbbc2ed77014a730cbc625899b03.tar.xz |
ruby: remove sparse memory.
In my opinion, it creates needless complications in rest of the code.
Also, this structure hinders the move towards common set of code for
physical memory controllers.
Diffstat (limited to 'src/mem/ruby/structures/DirectoryMemory.cc')
-rw-r--r-- | src/mem/ruby/structures/DirectoryMemory.cc | 87 |
1 files changed, 16 insertions, 71 deletions
diff --git a/src/mem/ruby/structures/DirectoryMemory.cc b/src/mem/ruby/structures/DirectoryMemory.cc index 2f972674f..94775aa78 100644 --- a/src/mem/ruby/structures/DirectoryMemory.cc +++ b/src/mem/ruby/structures/DirectoryMemory.cc @@ -47,8 +47,6 @@ DirectoryMemory::DirectoryMemory(const Params *p) m_size_bytes = p->size; m_size_bits = floorLog2(m_size_bytes); m_num_entries = 0; - m_use_map = p->use_map; - m_map_levels = p->map_levels; m_numa_high_bit = p->numa_high_bit; } @@ -56,16 +54,10 @@ void DirectoryMemory::init() { m_num_entries = m_size_bytes / RubySystem::getBlockSizeBytes(); - - if (m_use_map) { - m_sparseMemory = new SparseMemory(m_map_levels); - g_system_ptr->registerSparseMemory(m_sparseMemory); - } else { - m_entries = new AbstractEntry*[m_num_entries]; - for (int i = 0; i < m_num_entries; i++) - m_entries[i] = NULL; - m_ram = g_system_ptr->getMemoryVector(); - } + m_entries = new AbstractEntry*[m_num_entries]; + for (int i = 0; i < m_num_entries; i++) + m_entries[i] = NULL; + m_ram = g_system_ptr->getMemoryVector(); m_num_directories++; m_num_directories_bits = ceilLog2(m_num_directories); @@ -80,16 +72,12 @@ DirectoryMemory::init() DirectoryMemory::~DirectoryMemory() { // free up all the directory entries - if (m_entries != NULL) { - for (uint64 i = 0; i < m_num_entries; i++) { - if (m_entries[i] != NULL) { - delete m_entries[i]; - } + for (uint64 i = 0; i < m_num_entries; i++) { + if (m_entries[i] != NULL) { + delete m_entries[i]; } - delete [] m_entries; - } else if (m_use_map) { - delete m_sparseMemory; } + delete [] m_entries; } uint64 @@ -130,13 +118,9 @@ DirectoryMemory::lookup(PhysAddress address) assert(isPresent(address)); DPRINTF(RubyCache, "Looking up address: %s\n", address); - if (m_use_map) { - return m_sparseMemory->lookup(address); - } else { - uint64_t idx = mapAddressToLocalIdx(address); - assert(idx < m_num_entries); - return m_entries[idx]; - } + uint64_t idx = mapAddressToLocalIdx(address); + assert(idx < m_num_entries); + return m_entries[idx]; } AbstractEntry* @@ -146,60 +130,21 @@ DirectoryMemory::allocate(const PhysAddress& address, AbstractEntry* entry) uint64 idx; DPRINTF(RubyCache, "Looking up address: %s\n", address); - if (m_use_map) { - m_sparseMemory->add(address, entry); - entry->changePermission(AccessPermission_Read_Write); - } else { - idx = mapAddressToLocalIdx(address); - assert(idx < m_num_entries); - entry->getDataBlk().assign(m_ram->getBlockPtr(address)); - entry->changePermission(AccessPermission_Read_Only); - m_entries[idx] = entry; - } + idx = mapAddressToLocalIdx(address); + assert(idx < m_num_entries); + entry->getDataBlk().assign(m_ram->getBlockPtr(address)); + entry->changePermission(AccessPermission_Read_Only); + m_entries[idx] = entry; return entry; } void -DirectoryMemory::invalidateBlock(PhysAddress address) -{ - if (m_use_map) { - assert(m_sparseMemory->exist(address)); - m_sparseMemory->remove(address); - } -#if 0 - else { - assert(isPresent(address)); - - int64 index = address.memoryModuleIndex(); - - if (index < 0 || index > m_size) { - ERROR_MSG("Directory Memory Assertion: " - "accessing memory out of range."); - } - - if (m_entries[index] != NULL){ - delete m_entries[index]; - m_entries[index] = NULL; - } - } -#endif -} - -void DirectoryMemory::print(ostream& out) const { } void -DirectoryMemory::regStats() -{ - if (m_use_map) { - m_sparseMemory->regStats(name()); - } -} - -void DirectoryMemory::recordRequestType(DirectoryRequestType requestType) { DPRINTF(RubyStats, "Recorded statistic: %s\n", DirectoryRequestType_to_string(requestType)); |