diff options
author | Brad Beckmann <Brad.Beckmann@amd.com> | 2009-10-18 11:04:42 -0700 |
---|---|---|
committer | Brad Beckmann <Brad.Beckmann@amd.com> | 2009-10-18 11:04:42 -0700 |
commit | 15a3a7b37b34da286f89ee07230ff6cd2b55c5f6 (patch) | |
tree | 8451c2a006618901b9abd370d0b8aaab97123164 /src/dev/mc146818.cc | |
parent | 912f3d707412b9a6001fe816d7a56a9743c86e34 (diff) | |
parent | 010b13c937c80b9138d5c70fda6c47ea75d2a9b3 (diff) | |
download | gem5-15a3a7b37b34da286f89ee07230ff6cd2b55c5f6.tar.xz |
merged with ISA event manager fix
Diffstat (limited to 'src/dev/mc146818.cc')
-rw-r--r-- | src/dev/mc146818.cc | 22 |
1 files changed, 18 insertions, 4 deletions
diff --git a/src/dev/mc146818.cc b/src/dev/mc146818.cc index b25b015d2..0bb6558c8 100644 --- a/src/dev/mc146818.cc +++ b/src/dev/mc146818.cc @@ -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) |