x86: Add checkpointing capability to arch components
Add checkpointing capability to the x86 interrupt device and the TLBs
This commit is contained in:
parent
38140b5519
commit
911ccef6c0
3 changed files with 79 additions and 11 deletions
|
@ -706,6 +706,65 @@ X86ISA::Interrupts::updateIntrInfo(ThreadContext *tc)
|
|||
}
|
||||
}
|
||||
|
||||
void
|
||||
X86ISA::Interrupts::serialize(std::ostream &os)
|
||||
{
|
||||
SERIALIZE_ARRAY(regs, NUM_APIC_REGS);
|
||||
SERIALIZE_SCALAR(clock);
|
||||
SERIALIZE_SCALAR(pendingSmi);
|
||||
SERIALIZE_SCALAR(smiVector);
|
||||
SERIALIZE_SCALAR(pendingNmi);
|
||||
SERIALIZE_SCALAR(nmiVector);
|
||||
SERIALIZE_SCALAR(pendingExtInt);
|
||||
SERIALIZE_SCALAR(extIntVector);
|
||||
SERIALIZE_SCALAR(pendingInit);
|
||||
SERIALIZE_SCALAR(initVector);
|
||||
SERIALIZE_SCALAR(pendingStartup);
|
||||
SERIALIZE_SCALAR(startupVector);
|
||||
SERIALIZE_SCALAR(startedUp);
|
||||
SERIALIZE_SCALAR(pendingUnmaskableInt);
|
||||
SERIALIZE_SCALAR(pendingIPIs);
|
||||
SERIALIZE_SCALAR(IRRV);
|
||||
SERIALIZE_SCALAR(ISRV);
|
||||
bool apicTimerEventScheduled = apicTimerEvent.scheduled();
|
||||
SERIALIZE_SCALAR(apicTimerEventScheduled);
|
||||
Tick apicTimerEventTick = apicTimerEvent.when();
|
||||
SERIALIZE_SCALAR(apicTimerEventTick);
|
||||
}
|
||||
|
||||
void
|
||||
X86ISA::Interrupts::unserialize(Checkpoint *cp, const std::string §ion)
|
||||
{
|
||||
UNSERIALIZE_ARRAY(regs, NUM_APIC_REGS);
|
||||
UNSERIALIZE_SCALAR(clock);
|
||||
UNSERIALIZE_SCALAR(pendingSmi);
|
||||
UNSERIALIZE_SCALAR(smiVector);
|
||||
UNSERIALIZE_SCALAR(pendingNmi);
|
||||
UNSERIALIZE_SCALAR(nmiVector);
|
||||
UNSERIALIZE_SCALAR(pendingExtInt);
|
||||
UNSERIALIZE_SCALAR(extIntVector);
|
||||
UNSERIALIZE_SCALAR(pendingInit);
|
||||
UNSERIALIZE_SCALAR(initVector);
|
||||
UNSERIALIZE_SCALAR(pendingStartup);
|
||||
UNSERIALIZE_SCALAR(startupVector);
|
||||
UNSERIALIZE_SCALAR(startedUp);
|
||||
UNSERIALIZE_SCALAR(pendingUnmaskableInt);
|
||||
UNSERIALIZE_SCALAR(pendingIPIs);
|
||||
UNSERIALIZE_SCALAR(IRRV);
|
||||
UNSERIALIZE_SCALAR(ISRV);
|
||||
bool apicTimerEventScheduled;
|
||||
UNSERIALIZE_SCALAR(apicTimerEventScheduled);
|
||||
if (apicTimerEventScheduled) {
|
||||
Tick apicTimerEventTick;
|
||||
UNSERIALIZE_SCALAR(apicTimerEventTick);
|
||||
if (apicTimerEvent.scheduled()) {
|
||||
reschedule(apicTimerEvent, apicTimerEventTick, true);
|
||||
} else {
|
||||
schedule(apicTimerEvent, apicTimerEventTick);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
X86ISA::Interrupts *
|
||||
X86LocalApicParams::create()
|
||||
{
|
||||
|
|
|
@ -257,17 +257,8 @@ class Interrupts : public BasicPioDevice, IntDev
|
|||
* Serialization.
|
||||
*/
|
||||
|
||||
void
|
||||
serialize(std::ostream &os)
|
||||
{
|
||||
warn("Interrupts::serialize unimplemented!\n");
|
||||
}
|
||||
|
||||
void
|
||||
unserialize(Checkpoint *cp, const std::string §ion)
|
||||
{
|
||||
warn("Interrupts::unserialize unimplemented!\n");
|
||||
}
|
||||
virtual void serialize(std::ostream &os);
|
||||
virtual void unserialize(Checkpoint *cp, const std::string §ion);
|
||||
|
||||
/*
|
||||
* Old functions needed for compatability but which will be phased out
|
||||
|
|
|
@ -52,11 +52,29 @@ TlbEntry::TlbEntry(Addr asn, Addr _vaddr, Addr _paddr) :
|
|||
void
|
||||
TlbEntry::serialize(std::ostream &os)
|
||||
{
|
||||
SERIALIZE_SCALAR(paddr);
|
||||
SERIALIZE_SCALAR(vaddr);
|
||||
SERIALIZE_SCALAR(size);
|
||||
SERIALIZE_SCALAR(writable);
|
||||
SERIALIZE_SCALAR(user);
|
||||
SERIALIZE_SCALAR(uncacheable);
|
||||
SERIALIZE_SCALAR(global);
|
||||
SERIALIZE_SCALAR(patBit);
|
||||
SERIALIZE_SCALAR(noExec);
|
||||
}
|
||||
|
||||
void
|
||||
TlbEntry::unserialize(Checkpoint *cp, const std::string §ion)
|
||||
{
|
||||
UNSERIALIZE_SCALAR(paddr);
|
||||
UNSERIALIZE_SCALAR(vaddr);
|
||||
UNSERIALIZE_SCALAR(size);
|
||||
UNSERIALIZE_SCALAR(writable);
|
||||
UNSERIALIZE_SCALAR(user);
|
||||
UNSERIALIZE_SCALAR(uncacheable);
|
||||
UNSERIALIZE_SCALAR(global);
|
||||
UNSERIALIZE_SCALAR(patBit);
|
||||
UNSERIALIZE_SCALAR(noExec);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue