Make the cached virtPort have a thread context so it can do everything that a newly created one can.
This commit is contained in:
parent
9bd0bfe559
commit
50e3e50e1a
7 changed files with 13 additions and 13 deletions
|
@ -788,7 +788,7 @@ FullO3CPU<Impl>::updateMemPorts()
|
||||||
// Update all ThreadContext's memory ports (Functional/Virtual
|
// Update all ThreadContext's memory ports (Functional/Virtual
|
||||||
// Ports)
|
// Ports)
|
||||||
for (int i = 0; i < thread.size(); ++i)
|
for (int i = 0; i < thread.size(); ++i)
|
||||||
thread[i]->connectMemPorts();
|
thread[i]->connectMemPorts(thread[i]->getTC());
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -98,7 +98,7 @@ class O3ThreadContext : public ThreadContext
|
||||||
|
|
||||||
void delVirtPort(VirtualPort *vp);
|
void delVirtPort(VirtualPort *vp);
|
||||||
|
|
||||||
virtual void connectMemPorts() { thread->connectMemPorts(); }
|
virtual void connectMemPorts(ThreadContext *tc) { thread->connectMemPorts(tc); }
|
||||||
#else
|
#else
|
||||||
virtual TranslatingPort *getMemPort() { return thread->getMemPort(); }
|
virtual TranslatingPort *getMemPort() { return thread->getMemPort(); }
|
||||||
|
|
||||||
|
|
|
@ -148,7 +148,7 @@ AtomicSimpleCPU::DcachePort::setPeer(Port *port)
|
||||||
#if FULL_SYSTEM
|
#if FULL_SYSTEM
|
||||||
// Update the ThreadContext's memory ports (Functional/Virtual
|
// Update the ThreadContext's memory ports (Functional/Virtual
|
||||||
// Ports)
|
// Ports)
|
||||||
cpu->tcBase()->connectMemPorts();
|
cpu->tcBase()->connectMemPorts(cpu->tcBase());
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -766,7 +766,7 @@ TimingSimpleCPU::DcachePort::setPeer(Port *port)
|
||||||
#if FULL_SYSTEM
|
#if FULL_SYSTEM
|
||||||
// Update the ThreadContext's memory ports (Functional/Virtual
|
// Update the ThreadContext's memory ports (Functional/Virtual
|
||||||
// Ports)
|
// Ports)
|
||||||
cpu->tcBase()->connectMemPorts();
|
cpu->tcBase()->connectMemPorts(cpu->tcBase());
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -134,7 +134,7 @@ class ThreadContext
|
||||||
|
|
||||||
virtual void delVirtPort(VirtualPort *vp) = 0;
|
virtual void delVirtPort(VirtualPort *vp) = 0;
|
||||||
|
|
||||||
virtual void connectMemPorts() = 0;
|
virtual void connectMemPorts(ThreadContext *tc) = 0;
|
||||||
#else
|
#else
|
||||||
virtual TranslatingPort *getMemPort() = 0;
|
virtual TranslatingPort *getMemPort() = 0;
|
||||||
|
|
||||||
|
@ -325,7 +325,7 @@ class ProxyThreadContext : public ThreadContext
|
||||||
|
|
||||||
void delVirtPort(VirtualPort *vp) { return actualTC->delVirtPort(vp); }
|
void delVirtPort(VirtualPort *vp) { return actualTC->delVirtPort(vp); }
|
||||||
|
|
||||||
void connectMemPorts() { actualTC->connectMemPorts(); }
|
void connectMemPorts(ThreadContext *tc) { actualTC->connectMemPorts(tc); }
|
||||||
#else
|
#else
|
||||||
TranslatingPort *getMemPort() { return actualTC->getMemPort(); }
|
TranslatingPort *getMemPort() { return actualTC->getMemPort(); }
|
||||||
|
|
||||||
|
|
|
@ -113,10 +113,10 @@ ThreadState::unserialize(Checkpoint *cp, const std::string §ion)
|
||||||
|
|
||||||
#if FULL_SYSTEM
|
#if FULL_SYSTEM
|
||||||
void
|
void
|
||||||
ThreadState::connectMemPorts()
|
ThreadState::connectMemPorts(ThreadContext *tc)
|
||||||
{
|
{
|
||||||
connectPhysPort();
|
connectPhysPort();
|
||||||
connectVirtPort();
|
connectVirtPort(tc);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -134,7 +134,7 @@ ThreadState::connectPhysPort()
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ThreadState::connectVirtPort()
|
ThreadState::connectVirtPort(ThreadContext *tc)
|
||||||
{
|
{
|
||||||
// @todo: For now this disregards any older port that may have
|
// @todo: For now this disregards any older port that may have
|
||||||
// already existed. Fix this memory leak once the bus port IDs
|
// already existed. Fix this memory leak once the bus port IDs
|
||||||
|
@ -143,7 +143,7 @@ ThreadState::connectVirtPort()
|
||||||
virtPort->removeConn();
|
virtPort->removeConn();
|
||||||
else
|
else
|
||||||
virtPort = new VirtualPort(csprintf("%s-%d-vport",
|
virtPort = new VirtualPort(csprintf("%s-%d-vport",
|
||||||
baseCpu->name(), tid));
|
baseCpu->name(), tid), tc);
|
||||||
connectToMemFunc(virtPort);
|
connectToMemFunc(virtPort);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -91,11 +91,11 @@ struct ThreadState {
|
||||||
Tick readLastSuspend() { return lastSuspend; }
|
Tick readLastSuspend() { return lastSuspend; }
|
||||||
|
|
||||||
#if FULL_SYSTEM
|
#if FULL_SYSTEM
|
||||||
void connectMemPorts();
|
void connectMemPorts(ThreadContext *tc);
|
||||||
|
|
||||||
void connectPhysPort();
|
void connectPhysPort();
|
||||||
|
|
||||||
void connectVirtPort();
|
void connectVirtPort(ThreadContext *tc);
|
||||||
|
|
||||||
void dumpFuncProfile();
|
void dumpFuncProfile();
|
||||||
|
|
||||||
|
@ -201,7 +201,7 @@ struct ThreadState {
|
||||||
FunctionalPort *physPort;
|
FunctionalPort *physPort;
|
||||||
|
|
||||||
/** A functional port, outgoing only, for functional accesse to virtual
|
/** A functional port, outgoing only, for functional accesse to virtual
|
||||||
* addresses. That doen't require execution context information */
|
* addresses. */
|
||||||
VirtualPort *virtPort;
|
VirtualPort *virtPort;
|
||||||
#else
|
#else
|
||||||
TranslatingPort *port;
|
TranslatingPort *port;
|
||||||
|
|
Loading…
Reference in a new issue