Remove delVirtPort() and make getVirtPort() only return cached version.
This commit is contained in:
parent
c5fbbf376a
commit
a4a7a09e96
|
@ -169,7 +169,6 @@ LinuxAlphaSystem::setDelayLoop(ThreadContext *tc)
|
||||||
|
|
||||||
vp = tc->getVirtPort();
|
vp = tc->getVirtPort();
|
||||||
vp->writeHtoG(addr, (uint32_t)((cpuFreq / intrFreq) * 0.9988));
|
vp->writeHtoG(addr, (uint32_t)((cpuFreq / intrFreq) * 0.9988));
|
||||||
tc->delVirtPort(vp);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -71,8 +71,6 @@ namespace AlphaISA
|
||||||
if (!tc->getSystemPtr()->kernelSymtab->findAddress("task_struct_comm", addr))
|
if (!tc->getSystemPtr()->kernelSymtab->findAddress("task_struct_comm", addr))
|
||||||
panic("thread info not compiled into kernel\n");
|
panic("thread info not compiled into kernel\n");
|
||||||
name_off = vp->readGtoH<int32_t>(addr);
|
name_off = vp->readGtoH<int32_t>(addr);
|
||||||
|
|
||||||
tc->delVirtPort(vp);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Addr
|
Addr
|
||||||
|
@ -88,7 +86,6 @@ namespace AlphaISA
|
||||||
|
|
||||||
vp = tc->getVirtPort();
|
vp = tc->getVirtPort();
|
||||||
tsk = vp->readGtoH<Addr>(base + task_off);
|
tsk = vp->readGtoH<Addr>(base + task_off);
|
||||||
tc->delVirtPort(vp);
|
|
||||||
|
|
||||||
return tsk;
|
return tsk;
|
||||||
}
|
}
|
||||||
|
@ -106,7 +103,6 @@ namespace AlphaISA
|
||||||
|
|
||||||
vp = tc->getVirtPort();
|
vp = tc->getVirtPort();
|
||||||
pd = vp->readGtoH<uint16_t>(task + pid_off);
|
pd = vp->readGtoH<uint16_t>(task + pid_off);
|
||||||
tc->delVirtPort(vp);
|
|
||||||
|
|
||||||
return pd;
|
return pd;
|
||||||
}
|
}
|
||||||
|
|
|
@ -52,7 +52,6 @@ uint64_t getArgument(ThreadContext *tc, int number, bool fp)
|
||||||
VirtualPort *vp = tc->getVirtPort();
|
VirtualPort *vp = tc->getVirtPort();
|
||||||
uint64_t arg = vp->read<uint64_t>(sp +
|
uint64_t arg = vp->read<uint64_t>(sp +
|
||||||
(number-NumArgumentRegs) * sizeof(uint64_t));
|
(number-NumArgumentRegs) * sizeof(uint64_t));
|
||||||
tc->delVirtPort(vp);
|
|
||||||
return arg;
|
return arg;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -168,7 +168,6 @@ LinuxMipsSystem::setDelayLoop(ThreadContext *tc)
|
||||||
|
|
||||||
vp = tc->getVirtPort();
|
vp = tc->getVirtPort();
|
||||||
vp->writeHtoG(addr, (uint32_t)((cpuFreq / intrFreq) * 0.9988));
|
vp->writeHtoG(addr, (uint32_t)((cpuFreq / intrFreq) * 0.9988));
|
||||||
tc->delVirtPort(vp);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -70,8 +70,6 @@ ProcessInfo::ProcessInfo(ThreadContext *_tc)
|
||||||
// if (!tc->getSystemPtr()->kernelSymtab->findAddress("task_struct_comm", addr))
|
// if (!tc->getSystemPtr()->kernelSymtab->findAddress("task_struct_comm", addr))
|
||||||
// panic("thread info not compiled into kernel\n");
|
// panic("thread info not compiled into kernel\n");
|
||||||
// name_off = vp->readGtoH<int32_t>(addr);
|
// name_off = vp->readGtoH<int32_t>(addr);
|
||||||
|
|
||||||
tc->delVirtPort(vp);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Addr
|
Addr
|
||||||
|
@ -87,7 +85,6 @@ ProcessInfo::task(Addr ksp) const
|
||||||
|
|
||||||
vp = tc->getVirtPort();
|
vp = tc->getVirtPort();
|
||||||
tsk = vp->readGtoH<Addr>(base + task_off);
|
tsk = vp->readGtoH<Addr>(base + task_off);
|
||||||
tc->delVirtPort(vp);
|
|
||||||
|
|
||||||
return tsk;
|
return tsk;
|
||||||
}
|
}
|
||||||
|
@ -105,7 +102,6 @@ ProcessInfo::pid(Addr ksp) const
|
||||||
|
|
||||||
vp = tc->getVirtPort();
|
vp = tc->getVirtPort();
|
||||||
pd = vp->readGtoH<uint16_t>(task + pid_off);
|
pd = vp->readGtoH<uint16_t>(task + pid_off);
|
||||||
tc->delVirtPort(vp);
|
|
||||||
|
|
||||||
return pd;
|
return pd;
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,7 +62,6 @@ getArgument(ThreadContext *tc, int number, bool fp)
|
||||||
VirtualPort *vp = tc->getVirtPort();
|
VirtualPort *vp = tc->getVirtPort();
|
||||||
uint64_t arg = vp->read<uint64_t>(sp +
|
uint64_t arg = vp->read<uint64_t>(sp +
|
||||||
(number-NumArgumentRegs) * sizeof(uint64_t));
|
(number-NumArgumentRegs) * sizeof(uint64_t));
|
||||||
tc->delVirtPort(vp);
|
|
||||||
return arg;
|
return arg;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -70,8 +70,6 @@ namespace SparcISA
|
||||||
if (!tc->getSystemPtr()->kernelSymtab->findAddress("task_struct_comm", addr))
|
if (!tc->getSystemPtr()->kernelSymtab->findAddress("task_struct_comm", addr))
|
||||||
panic("thread info not compiled into kernel\n");
|
panic("thread info not compiled into kernel\n");
|
||||||
name_off = vp->readGtoH<int32_t>(addr);
|
name_off = vp->readGtoH<int32_t>(addr);
|
||||||
|
|
||||||
tc->delVirtPort(vp);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Addr
|
Addr
|
||||||
|
@ -87,7 +85,6 @@ namespace SparcISA
|
||||||
|
|
||||||
vp = tc->getVirtPort();
|
vp = tc->getVirtPort();
|
||||||
tsk = vp->readGtoH<Addr>(base + task_off);
|
tsk = vp->readGtoH<Addr>(base + task_off);
|
||||||
tc->delVirtPort(vp);
|
|
||||||
|
|
||||||
return tsk;
|
return tsk;
|
||||||
}
|
}
|
||||||
|
@ -105,7 +102,6 @@ namespace SparcISA
|
||||||
|
|
||||||
vp = tc->getVirtPort();
|
vp = tc->getVirtPort();
|
||||||
pd = vp->readGtoH<uint16_t>(task + pid_off);
|
pd = vp->readGtoH<uint16_t>(task + pid_off);
|
||||||
tc->delVirtPort(vp);
|
|
||||||
|
|
||||||
return pd;
|
return pd;
|
||||||
}
|
}
|
||||||
|
|
|
@ -53,7 +53,6 @@ uint64_t getArgument(ThreadContext *tc, int number, bool fp) {
|
||||||
VirtualPort *vp = tc->getVirtPort();
|
VirtualPort *vp = tc->getVirtPort();
|
||||||
uint64_t arg = vp->read<uint64_t>(sp + 92 +
|
uint64_t arg = vp->read<uint64_t>(sp + 92 +
|
||||||
(number-NumArgumentRegs) * sizeof(uint64_t));
|
(number-NumArgumentRegs) * sizeof(uint64_t));
|
||||||
tc->delVirtPort(vp);
|
|
||||||
return arg;
|
return arg;
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -70,8 +70,6 @@ namespace X86ISA
|
||||||
if (!tc->getSystemPtr()->kernelSymtab->findAddress("task_struct_comm", addr))
|
if (!tc->getSystemPtr()->kernelSymtab->findAddress("task_struct_comm", addr))
|
||||||
panic("thread info not compiled into kernel\n");
|
panic("thread info not compiled into kernel\n");
|
||||||
name_off = vp->readGtoH<int32_t>(addr);
|
name_off = vp->readGtoH<int32_t>(addr);
|
||||||
|
|
||||||
tc->delVirtPort(vp);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Addr
|
Addr
|
||||||
|
@ -87,7 +85,6 @@ namespace X86ISA
|
||||||
|
|
||||||
vp = tc->getVirtPort();
|
vp = tc->getVirtPort();
|
||||||
tsk = vp->readGtoH<Addr>(base + task_off);
|
tsk = vp->readGtoH<Addr>(base + task_off);
|
||||||
tc->delVirtPort(vp);
|
|
||||||
|
|
||||||
return tsk;
|
return tsk;
|
||||||
}
|
}
|
||||||
|
@ -105,7 +102,6 @@ namespace X86ISA
|
||||||
|
|
||||||
vp = tc->getVirtPort();
|
vp = tc->getVirtPort();
|
||||||
pd = vp->readGtoH<uint16_t>(task + pid_off);
|
pd = vp->readGtoH<uint16_t>(task + pid_off);
|
||||||
tc->delVirtPort(vp);
|
|
||||||
|
|
||||||
return pd;
|
return pd;
|
||||||
}
|
}
|
||||||
|
|
|
@ -459,9 +459,6 @@ BaseRemoteGDB::read(Addr vaddr, size_t size, char *data)
|
||||||
TranslatingPort *port = context->getMemPort();
|
TranslatingPort *port = context->getMemPort();
|
||||||
#endif
|
#endif
|
||||||
port->readBlob(vaddr, (uint8_t*)data, size);
|
port->readBlob(vaddr, (uint8_t*)data, size);
|
||||||
#if FULL_SYSTEM
|
|
||||||
context->delVirtPort(port);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if TRACING_ON
|
#if TRACING_ON
|
||||||
if (DTRACE(GDBRead)) {
|
if (DTRACE(GDBRead)) {
|
||||||
|
@ -504,9 +501,7 @@ BaseRemoteGDB::write(Addr vaddr, size_t size, const char *data)
|
||||||
TranslatingPort *port = context->getMemPort();
|
TranslatingPort *port = context->getMemPort();
|
||||||
#endif
|
#endif
|
||||||
port->writeBlob(vaddr, (uint8_t*)data, size);
|
port->writeBlob(vaddr, (uint8_t*)data, size);
|
||||||
#if FULL_SYSTEM
|
#if !FULL_SYSTEM
|
||||||
context->delVirtPort(port);
|
|
||||||
#else
|
|
||||||
delete port;
|
delete port;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -98,10 +98,8 @@ class CheckerThreadContext : public ThreadContext
|
||||||
|
|
||||||
FunctionalPort *getPhysPort() { return actualTC->getPhysPort(); }
|
FunctionalPort *getPhysPort() { return actualTC->getPhysPort(); }
|
||||||
|
|
||||||
VirtualPort *getVirtPort(ThreadContext *tc = NULL)
|
VirtualPort *getVirtPort()
|
||||||
{ return actualTC->getVirtPort(); }
|
{ return actualTC->getVirtPort(); }
|
||||||
|
|
||||||
void delVirtPort(VirtualPort *vp) { actualTC->delVirtPort(vp); }
|
|
||||||
#else
|
#else
|
||||||
TranslatingPort *getMemPort() { return actualTC->getMemPort(); }
|
TranslatingPort *getMemPort() { return actualTC->getMemPort(); }
|
||||||
|
|
||||||
|
|
|
@ -94,9 +94,7 @@ class O3ThreadContext : public ThreadContext
|
||||||
|
|
||||||
virtual FunctionalPort *getPhysPort() { return thread->getPhysPort(); }
|
virtual FunctionalPort *getPhysPort() { return thread->getPhysPort(); }
|
||||||
|
|
||||||
virtual VirtualPort *getVirtPort(ThreadContext *src_tc = NULL);
|
virtual VirtualPort *getVirtPort();
|
||||||
|
|
||||||
void delVirtPort(VirtualPort *vp);
|
|
||||||
|
|
||||||
virtual void connectMemPorts(ThreadContext *tc) { thread->connectMemPorts(tc); }
|
virtual void connectMemPorts(ThreadContext *tc) { thread->connectMemPorts(tc); }
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -36,16 +36,9 @@
|
||||||
#if FULL_SYSTEM
|
#if FULL_SYSTEM
|
||||||
template <class Impl>
|
template <class Impl>
|
||||||
VirtualPort *
|
VirtualPort *
|
||||||
O3ThreadContext<Impl>::getVirtPort(ThreadContext *src_tc)
|
O3ThreadContext<Impl>::getVirtPort()
|
||||||
{
|
{
|
||||||
if (!src_tc)
|
return thread->getVirtPort();
|
||||||
return thread->getVirtPort();
|
|
||||||
|
|
||||||
VirtualPort *vp;
|
|
||||||
|
|
||||||
vp = new VirtualPort("tc-vport", src_tc);
|
|
||||||
thread->connectToMemFunc(vp);
|
|
||||||
return vp;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class Impl>
|
template <class Impl>
|
||||||
|
@ -97,18 +90,6 @@ O3ThreadContext<Impl>::takeOverFrom(ThreadContext *old_context)
|
||||||
thread->trapPending = false;
|
thread->trapPending = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if FULL_SYSTEM
|
|
||||||
template <class Impl>
|
|
||||||
void
|
|
||||||
O3ThreadContext<Impl>::delVirtPort(VirtualPort *vp)
|
|
||||||
{
|
|
||||||
if (vp != thread->getVirtPort()) {
|
|
||||||
vp->removeConn();
|
|
||||||
delete vp;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
template <class Impl>
|
template <class Impl>
|
||||||
void
|
void
|
||||||
O3ThreadContext<Impl>::activate(int delay)
|
O3ThreadContext<Impl>::activate(int delay)
|
||||||
|
|
|
@ -134,10 +134,8 @@ class OzoneCPU : public BaseCPU
|
||||||
|
|
||||||
FunctionalPort *getPhysPort() { return thread->getPhysPort(); }
|
FunctionalPort *getPhysPort() { return thread->getPhysPort(); }
|
||||||
|
|
||||||
VirtualPort *getVirtPort(ThreadContext *tc = NULL)
|
VirtualPort *getVirtPort()
|
||||||
{ return thread->getVirtPort(tc); }
|
{ return thread->getVirtPort(); }
|
||||||
|
|
||||||
void delVirtPort(VirtualPort *vp);
|
|
||||||
#else
|
#else
|
||||||
TranslatingPort *getMemPort() { return thread->getMemPort(); }
|
TranslatingPort *getMemPort() { return thread->getMemPort(); }
|
||||||
|
|
||||||
|
|
|
@ -742,16 +742,6 @@ OzoneCPU<Impl>::OzoneTC::setCpuId(int id)
|
||||||
thread->setCpuId(id);
|
thread->setCpuId(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if FULL_SYSTEM
|
|
||||||
template <class Impl>
|
|
||||||
void
|
|
||||||
OzoneCPU<Impl>::OzoneTC::delVirtPort(VirtualPort *vp)
|
|
||||||
{
|
|
||||||
vp->removeConn();
|
|
||||||
delete vp;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
template <class Impl>
|
template <class Impl>
|
||||||
void
|
void
|
||||||
OzoneCPU<Impl>::OzoneTC::setStatus(Status new_status)
|
OzoneCPU<Impl>::OzoneTC::setStatus(Status new_status)
|
||||||
|
|
|
@ -286,26 +286,3 @@ SimpleThread::copyArchRegs(ThreadContext *src_tc)
|
||||||
TheISA::copyRegs(src_tc, tc);
|
TheISA::copyRegs(src_tc, tc);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if FULL_SYSTEM
|
|
||||||
VirtualPort*
|
|
||||||
SimpleThread::getVirtPort(ThreadContext *src_tc)
|
|
||||||
{
|
|
||||||
if (!src_tc)
|
|
||||||
return virtPort;
|
|
||||||
|
|
||||||
VirtualPort *vp = new VirtualPort("tc-vport", src_tc);
|
|
||||||
connectToMemFunc(vp);
|
|
||||||
return vp;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
SimpleThread::delVirtPort(VirtualPort *vp)
|
|
||||||
{
|
|
||||||
if (vp != virtPort) {
|
|
||||||
vp->removeConn();
|
|
||||||
delete vp;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
|
@ -208,12 +208,11 @@ class SimpleThread : public ThreadState
|
||||||
|
|
||||||
FunctionalPort *getPhysPort() { return physPort; }
|
FunctionalPort *getPhysPort() { return physPort; }
|
||||||
|
|
||||||
/** Return a virtual port. If no thread context is specified then a static
|
/** Return a virtual port. This port cannot be cached locally in an object.
|
||||||
* port is returned. Otherwise a port is created and returned. It must be
|
* After a CPU switch it may point to the wrong memory object which could
|
||||||
* deleted by deleteVirtPort(). */
|
* mean stale data.
|
||||||
VirtualPort *getVirtPort(ThreadContext *tc);
|
*/
|
||||||
|
VirtualPort *getVirtPort() { return virtPort; }
|
||||||
void delVirtPort(VirtualPort *vp);
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
Status status() const { return _status; }
|
Status status() const { return _status; }
|
||||||
|
|
|
@ -130,9 +130,7 @@ class ThreadContext
|
||||||
|
|
||||||
virtual FunctionalPort *getPhysPort() = 0;
|
virtual FunctionalPort *getPhysPort() = 0;
|
||||||
|
|
||||||
virtual VirtualPort *getVirtPort(ThreadContext *tc = NULL) = 0;
|
virtual VirtualPort *getVirtPort() = 0;
|
||||||
|
|
||||||
virtual void delVirtPort(VirtualPort *vp) = 0;
|
|
||||||
|
|
||||||
virtual void connectMemPorts(ThreadContext *tc) = 0;
|
virtual void connectMemPorts(ThreadContext *tc) = 0;
|
||||||
#else
|
#else
|
||||||
|
@ -321,9 +319,7 @@ class ProxyThreadContext : public ThreadContext
|
||||||
|
|
||||||
FunctionalPort *getPhysPort() { return actualTC->getPhysPort(); }
|
FunctionalPort *getPhysPort() { return actualTC->getPhysPort(); }
|
||||||
|
|
||||||
VirtualPort *getVirtPort(ThreadContext *tc = NULL) { return actualTC->getVirtPort(tc); }
|
VirtualPort *getVirtPort() { return actualTC->getVirtPort(); }
|
||||||
|
|
||||||
void delVirtPort(VirtualPort *vp) { return actualTC->delVirtPort(vp); }
|
|
||||||
|
|
||||||
void connectMemPorts(ThreadContext *tc) { actualTC->connectMemPorts(tc); }
|
void connectMemPorts(ThreadContext *tc) { actualTC->connectMemPorts(tc); }
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -111,9 +111,7 @@ struct ThreadState {
|
||||||
|
|
||||||
void setPhysPort(FunctionalPort *port) { physPort = port; }
|
void setPhysPort(FunctionalPort *port) { physPort = port; }
|
||||||
|
|
||||||
VirtualPort *getVirtPort(ThreadContext *tc = NULL) { return virtPort; }
|
VirtualPort *getVirtPort() { return virtPort; }
|
||||||
|
|
||||||
void setVirtPort(VirtualPort *port) { virtPort = port; }
|
|
||||||
#else
|
#else
|
||||||
Process *getProcessPtr() { return process; }
|
Process *getProcessPtr() { return process; }
|
||||||
|
|
||||||
|
|
|
@ -78,9 +78,6 @@ CopyOut(ThreadContext *tc, void *dest, Addr src, size_t cplen)
|
||||||
VirtualPort *vp = tc->getVirtPort();
|
VirtualPort *vp = tc->getVirtPort();
|
||||||
|
|
||||||
vp->readBlob(src, dst, cplen);
|
vp->readBlob(src, dst, cplen);
|
||||||
|
|
||||||
tc->delVirtPort(vp);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -90,8 +87,6 @@ CopyIn(ThreadContext *tc, Addr dest, void *source, size_t cplen)
|
||||||
VirtualPort *vp = tc->getVirtPort();
|
VirtualPort *vp = tc->getVirtPort();
|
||||||
|
|
||||||
vp->writeBlob(dest, src, cplen);
|
vp->writeBlob(dest, src, cplen);
|
||||||
|
|
||||||
tc->delVirtPort(vp);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
@ -105,7 +100,6 @@ CopyStringOut(ThreadContext *tc, char *dst, Addr vaddr, size_t maxlen)
|
||||||
vp->readBlob(vaddr++, (uint8_t*)dst++, 1);
|
vp->readBlob(vaddr++, (uint8_t*)dst++, 1);
|
||||||
} while (len < maxlen && start[len++] != 0 );
|
} while (len < maxlen && start[len++] != 0 );
|
||||||
|
|
||||||
tc->delVirtPort(vp);
|
|
||||||
dst[len] = 0;
|
dst[len] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -119,5 +113,4 @@ CopyStringIn(ThreadContext *tc, char *src, Addr vaddr)
|
||||||
vp->writeBlob(gen.addr(), (uint8_t*)src, gen.size());
|
vp->writeBlob(gen.addr(), (uint8_t*)src, gen.size());
|
||||||
src += gen.size();
|
src += gen.size();
|
||||||
}
|
}
|
||||||
tc->delVirtPort(vp);
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -73,7 +73,6 @@ class VPtr
|
||||||
|
|
||||||
VirtualPort *port = tc->getVirtPort();
|
VirtualPort *port = tc->getVirtPort();
|
||||||
port->readBlob(ptr, buffer, sizeof(T));
|
port->readBlob(ptr, buffer, sizeof(T));
|
||||||
tc->delVirtPort(port);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool
|
||||||
|
|
Loading…
Reference in a new issue