fixed MC146818 checkpointing bug and added isa serialization calls to simple_thread
This commit is contained in:
parent
30a185dcd0
commit
28204b2a96
2 changed files with 28 additions and 4 deletions
|
@ -199,6 +199,11 @@ SimpleThread::serialize(ostream &os)
|
|||
SERIALIZE_SCALAR(nextPC);
|
||||
SERIALIZE_SCALAR(nextNPC);
|
||||
// thread_num and cpu_id are deterministic from the config
|
||||
|
||||
//
|
||||
// Now must serialize all the ISA dependent state
|
||||
//
|
||||
isa.serialize(os);
|
||||
}
|
||||
|
||||
|
||||
|
@ -214,6 +219,11 @@ SimpleThread::unserialize(Checkpoint *cp, const std::string §ion)
|
|||
UNSERIALIZE_SCALAR(nextPC);
|
||||
UNSERIALIZE_SCALAR(nextNPC);
|
||||
// thread_num and cpu_id are deterministic from the config
|
||||
|
||||
//
|
||||
// Now must unserialize all the ISA dependent state
|
||||
//
|
||||
isa.unserialize(cp, section);
|
||||
}
|
||||
|
||||
#if FULL_SYSTEM
|
||||
|
|
|
@ -207,6 +207,15 @@ MC146818::serialize(const string &base, ostream &os)
|
|||
arrayParamOut(os, base + ".clock_data", clock_data, sizeof(clock_data));
|
||||
paramOut(os, base + ".stat_regA", stat_regA);
|
||||
paramOut(os, base + ".stat_regB", stat_regB);
|
||||
|
||||
//
|
||||
// save the timer tick and rtc clock tick values to correctly reschedule
|
||||
// them during unserialize
|
||||
//
|
||||
Tick rtcTimerInterruptTickOffset = event.when() - curTick;
|
||||
SERIALIZE_SCALAR(rtcTimerInterruptTickOffset);
|
||||
Tick rtcClockTickOffset = event.when() - curTick;
|
||||
SERIALIZE_SCALAR(rtcClockTickOffset);
|
||||
}
|
||||
|
||||
void
|
||||
|
@ -218,10 +227,15 @@ MC146818::unserialize(const string &base, Checkpoint *cp,
|
|||
paramIn(cp, section, base + ".stat_regA", stat_regA);
|
||||
paramIn(cp, section, base + ".stat_regB", stat_regB);
|
||||
|
||||
// We're not unserializing the event here, but we need to
|
||||
// rescehedule the event since curTick was moved forward by the
|
||||
// checkpoint
|
||||
reschedule(event, curTick + event.interval);
|
||||
//
|
||||
// properly schedule the timer and rtc clock events
|
||||
//
|
||||
Tick rtcTimerInterruptTickOffset;
|
||||
UNSERIALIZE_SCALAR(rtcTimerInterruptTickOffset);
|
||||
reschedule(event, curTick + rtcTimerInterruptTickOffset);
|
||||
Tick rtcClockTickOffset;
|
||||
UNSERIALIZE_SCALAR(rtcClockTickOffset);
|
||||
reschedule(tickEvent, curTick + rtcClockTickOffset);
|
||||
}
|
||||
|
||||
MC146818::RTCEvent::RTCEvent(MC146818 * _parent, Tick i)
|
||||
|
|
Loading…
Reference in a new issue