diff options
Diffstat (limited to 'cpu')
-rw-r--r-- | cpu/base.cc | 15 | ||||
-rw-r--r-- | cpu/base.hh | 7 | ||||
-rw-r--r-- | cpu/exec_context.cc | 16 | ||||
-rw-r--r-- | cpu/exec_context.hh | 38 |
4 files changed, 30 insertions, 46 deletions
diff --git a/cpu/base.cc b/cpu/base.cc index 8b94b8533..64ea9aaa8 100644 --- a/cpu/base.cc +++ b/cpu/base.cc @@ -59,7 +59,7 @@ BaseCPU::BaseCPU(Params *p) #else BaseCPU::BaseCPU(Params *p) : SimObject(p->name), clock(p->clock), params(p), - number_of_threads(p->numberOfThreads) + number_of_threads(p->numberOfThreads), system(p->system) #endif { DPRINTF(FullCPU, "BaseCPU: Creating object, mem address %#x.\n", this); @@ -211,15 +211,18 @@ BaseCPU::registerExecContexts() { for (int i = 0; i < execContexts.size(); ++i) { ExecContext *xc = execContexts[i]; + + if (xc->status() == ExecContext::Suspended) { #if FULL_SYSTEM - int id = params->cpu_id; - if (id != -1) - id += i; + int id = params->cpu_id; + if (id != -1) + id += i; - xc->cpu_id = system->registerExecContext(xc, id); + xc->cpu_id = system->registerExecContext(xc, id); #else - xc->cpu_id = xc->process->registerExecContext(xc); + xc->cpu_id = xc->process->registerExecContext(xc); #endif + } } } diff --git a/cpu/base.hh b/cpu/base.hh index 4a44ab804..826dcb2ec 100644 --- a/cpu/base.hh +++ b/cpu/base.hh @@ -38,10 +38,7 @@ #include "sim/sim_object.hh" #include "targetarch/isa_traits.hh" -#if FULL_SYSTEM class System; -#endif - class BranchPred; class ExecContext; @@ -122,8 +119,8 @@ class BaseCPU : public SimObject Tick clock; bool functionTrace; Tick functionTraceStart; -#if FULL_SYSTEM System *system; +#if FULL_SYSTEM int cpu_id; Tick profile; #endif @@ -170,9 +167,9 @@ class BaseCPU : public SimObject */ EventQueue **comLoadEventQueue; -#if FULL_SYSTEM System *system; +#if FULL_SYSTEM /** * Serialize this object to the given output stream. * @param os The stream to serialize to. diff --git a/cpu/exec_context.cc b/cpu/exec_context.cc index 9bed3ba47..037319a8f 100644 --- a/cpu/exec_context.cc +++ b/cpu/exec_context.cc @@ -76,19 +76,13 @@ ExecContext::ExecContext(BaseCPU *_cpu, int _thread_num, System *_sys, profilePC = 3; } #else -ExecContext::ExecContext(BaseCPU *_cpu, int _thread_num, - Process *_process, int _asid) +ExecContext::ExecContext(BaseCPU *_cpu, int _thread_num, System *_system, + FunctionalMemory *_mem, Process *_process, int _asid) : _status(ExecContext::Unallocated), cpu(_cpu), thread_num(_thread_num), cpu_id(-1), - process(_process), mem(process->getMemory()), asid(_asid), - func_exe_inst(0), storeCondFailures(0) -{ - memset(®s, 0, sizeof(RegFile)); -} - -ExecContext::ExecContext(BaseCPU *_cpu, int _thread_num, - FunctionalMemory *_mem, int _asid) - : cpu(_cpu), thread_num(_thread_num), process(0), mem(_mem), asid(_asid), + system(_system), mem(_mem), + process(_process), + asid(_asid), func_exe_inst(0), storeCondFailures(0) { memset(®s, 0, sizeof(RegFile)); diff --git a/cpu/exec_context.hh b/cpu/exec_context.hh index 6f38a6960..70d731517 100644 --- a/cpu/exec_context.hh +++ b/cpu/exec_context.hh @@ -31,13 +31,12 @@ #include "config/full_system.hh" #include "mem/functional/functional.hh" +#include "mem/mem_interface.hh" #include "mem/mem_req.hh" #include "sim/host.hh" #include "sim/serialize.hh" #include "targetarch/byte_swap.hh" -// forward declaration: see functional_memory.hh -class FunctionalMemory; class PhysicalMemory; class BaseCPU; @@ -123,11 +122,12 @@ class ExecContext // it belongs. For full-system mode, this is the system CPU ID. int cpu_id; -#if FULL_SYSTEM + System *system; FunctionalMemory *mem; + +#if FULL_SYSTEM AlphaITB *itb; AlphaDTB *dtb; - System *system; // the following two fields are redundant, since we can always // look them up through the system pointer, but we'll leave them @@ -148,8 +148,6 @@ class ExecContext #else Process *process; - FunctionalMemory *mem; // functional storage for process address space - // Address space ID. Note that this is used for TIMING cache // simulation only; all functional memory accesses should use // one of the FunctionalMemory pointers above. @@ -186,9 +184,8 @@ class ExecContext ExecContext(BaseCPU *_cpu, int _thread_num, System *_system, AlphaITB *_itb, AlphaDTB *_dtb, FunctionalMemory *_dem); #else - ExecContext(BaseCPU *_cpu, int _thread_num, Process *_process, int _asid); - ExecContext(BaseCPU *_cpu, int _thread_num, FunctionalMemory *_mem, - int _asid); + ExecContext(BaseCPU *_cpu, int _thread_num, System *_system, + FunctionalMemory *_mem, Process *_process, int _asid); #endif virtual ~ExecContext(); @@ -230,28 +227,19 @@ class ExecContext int getInstAsid() { return asid; } int getDataAsid() { return asid; } - Fault dummyTranslation(MemReqPtr &req) - { -#if 0 - assert((req->vaddr >> 48 & 0xffff) == 0); -#endif - - // put the asid in the upper 16 bits of the paddr - req->paddr = req->vaddr & ~((Addr)0xffff << sizeof(Addr) * 8 - 16); - req->paddr = req->paddr | (Addr)req->asid << sizeof(Addr) * 8 - 16; - return No_Fault; - } Fault translateInstReq(MemReqPtr &req) { - return dummyTranslation(req); + return process->pTable->translate(req); } + Fault translateDataReadReq(MemReqPtr &req) { - return dummyTranslation(req); + return process->pTable->translate(req); } + Fault translateDataWriteReq(MemReqPtr &req) { - return dummyTranslation(req); + return process->pTable->translate(req); } #endif @@ -334,7 +322,9 @@ class ExecContext Fault instRead(MemReqPtr &req) { - return mem->read(req, inst); + panic("instRead not implemented"); + // return funcPhysMem->read(req, inst); + return No_Fault; } // |