SE: Fix simulating more than 4GB of RAM in SE mode
This change removes some dead code in PhysicalMemory, uses a 64 bit type for the page pointer in System (instead of 32 bit) and cleans up some style.
This commit is contained in:
parent
5c6f4a0f17
commit
34a8e37c13
|
@ -68,8 +68,7 @@ using namespace std;
|
||||||
using namespace TheISA;
|
using namespace TheISA;
|
||||||
|
|
||||||
PhysicalMemory::PhysicalMemory(const Params *p)
|
PhysicalMemory::PhysicalMemory(const Params *p)
|
||||||
: MemObject(p), pmemAddr(NULL), pagePtr(0),
|
: MemObject(p), pmemAddr(NULL), lat(p->latency), lat_var(p->latency_var),
|
||||||
lat(p->latency), lat_var(p->latency_var),
|
|
||||||
_size(params()->range.size()), _start(params()->range.start)
|
_size(params()->range.size()), _start(params()->range.start)
|
||||||
{
|
{
|
||||||
if (size() % TheISA::PageBytes != 0)
|
if (size() % TheISA::PageBytes != 0)
|
||||||
|
@ -124,16 +123,6 @@ PhysicalMemory::~PhysicalMemory()
|
||||||
munmap((char*)pmemAddr, size());
|
munmap((char*)pmemAddr, size());
|
||||||
}
|
}
|
||||||
|
|
||||||
Addr
|
|
||||||
PhysicalMemory::new_page()
|
|
||||||
{
|
|
||||||
Addr return_addr = pagePtr << LogVMPageSize;
|
|
||||||
return_addr += start();
|
|
||||||
|
|
||||||
++pagePtr;
|
|
||||||
return return_addr;
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned
|
unsigned
|
||||||
PhysicalMemory::deviceBlockSize() const
|
PhysicalMemory::deviceBlockSize() const
|
||||||
{
|
{
|
||||||
|
|
|
@ -148,7 +148,6 @@ class PhysicalMemory : public MemObject
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t *pmemAddr;
|
uint8_t *pmemAddr;
|
||||||
int pagePtr;
|
|
||||||
Tick lat;
|
Tick lat;
|
||||||
Tick lat_var;
|
Tick lat_var;
|
||||||
std::vector<MemoryPort*> ports;
|
std::vector<MemoryPort*> ports;
|
||||||
|
@ -157,7 +156,6 @@ class PhysicalMemory : public MemObject
|
||||||
uint64_t _size;
|
uint64_t _size;
|
||||||
uint64_t _start;
|
uint64_t _start;
|
||||||
public:
|
public:
|
||||||
Addr new_page();
|
|
||||||
uint64_t size() { return _size; }
|
uint64_t size() { return _size; }
|
||||||
uint64_t start() { return _start; }
|
uint64_t start() { return _start; }
|
||||||
|
|
||||||
|
|
|
@ -67,8 +67,8 @@ System::System(Params *p)
|
||||||
init_param(p->init_param),
|
init_param(p->init_param),
|
||||||
loadAddrMask(p->load_addr_mask),
|
loadAddrMask(p->load_addr_mask),
|
||||||
#else
|
#else
|
||||||
page_ptr(0),
|
pagePtr(0),
|
||||||
next_PID(0),
|
nextPID(0),
|
||||||
#endif
|
#endif
|
||||||
memoryMode(p->mem_mode), _params(p)
|
memoryMode(p->mem_mode), _params(p)
|
||||||
{
|
{
|
||||||
|
@ -255,8 +255,8 @@ System::replaceThreadContext(ThreadContext *tc, int context_id)
|
||||||
Addr
|
Addr
|
||||||
System::new_page()
|
System::new_page()
|
||||||
{
|
{
|
||||||
Addr return_addr = page_ptr << LogVMPageSize;
|
Addr return_addr = pagePtr << LogVMPageSize;
|
||||||
++page_ptr;
|
++pagePtr;
|
||||||
if (return_addr >= physmem->size())
|
if (return_addr >= physmem->size())
|
||||||
fatal("Out of memory, please increase size of physical memory.");
|
fatal("Out of memory, please increase size of physical memory.");
|
||||||
return return_addr;
|
return return_addr;
|
||||||
|
@ -271,7 +271,7 @@ System::memSize()
|
||||||
Addr
|
Addr
|
||||||
System::freeMemSize()
|
System::freeMemSize()
|
||||||
{
|
{
|
||||||
return physmem->size() - (page_ptr << LogVMPageSize);
|
return physmem->size() - (pagePtr << LogVMPageSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -282,7 +282,8 @@ System::serialize(ostream &os)
|
||||||
#if FULL_SYSTEM
|
#if FULL_SYSTEM
|
||||||
kernelSymtab->serialize("kernel_symtab", os);
|
kernelSymtab->serialize("kernel_symtab", os);
|
||||||
#else // !FULL_SYSTEM
|
#else // !FULL_SYSTEM
|
||||||
SERIALIZE_SCALAR(page_ptr);
|
SERIALIZE_SCALAR(pagePtr);
|
||||||
|
SERIALIZE_SCALAR(nextPID);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -293,7 +294,8 @@ System::unserialize(Checkpoint *cp, const string §ion)
|
||||||
#if FULL_SYSTEM
|
#if FULL_SYSTEM
|
||||||
kernelSymtab->unserialize("kernel_symtab", cp, section);
|
kernelSymtab->unserialize("kernel_symtab", cp, section);
|
||||||
#else // !FULL_SYSTEM
|
#else // !FULL_SYSTEM
|
||||||
UNSERIALIZE_SCALAR(page_ptr);
|
UNSERIALIZE_SCALAR(pagePtr);
|
||||||
|
UNSERIALIZE_SCALAR(nextPID);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -137,15 +137,15 @@ class System : public SimObject
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
int page_ptr;
|
Addr pagePtr;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
uint64_t next_PID;
|
uint64_t nextPID;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
uint64_t allocatePID()
|
uint64_t allocatePID()
|
||||||
{
|
{
|
||||||
return next_PID++;
|
return nextPID++;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Amount of physical memory that is still free */
|
/** Amount of physical memory that is still free */
|
||||||
|
|
Loading…
Reference in a new issue