eventq.cc (10906:3ab1d7ed6545) eventq.cc (11072:6a447a3138ef)
1/*
2 * Copyright (c) 2000-2005 The Regents of The University of Michigan
3 * Copyright (c) 2008 The Hewlett-Packard Development Company
4 * Copyright (c) 2013 Advanced Micro Devices, Inc.
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions are

--- 269 unchanged lines hidden (view full) ---

278 flags.clear(Squashed | Scheduled);
279 } else {
280 DPRINTF(Checkpoint, "Event '%s' need to be scheduled @%d\n",
281 name(), _when);
282 }
283}
284
285void
1/*
2 * Copyright (c) 2000-2005 The Regents of The University of Michigan
3 * Copyright (c) 2008 The Hewlett-Packard Development Company
4 * Copyright (c) 2013 Advanced Micro Devices, Inc.
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions are

--- 269 unchanged lines hidden (view full) ---

278 flags.clear(Squashed | Scheduled);
279 } else {
280 DPRINTF(Checkpoint, "Event '%s' need to be scheduled @%d\n",
281 name(), _when);
282 }
283}
284
285void
286EventQueue::serialize(CheckpointOut &cp) const
287{
288 std::list<Event *> eventPtrs;
289
290 int numEvents = 0;
291 Event *nextBin = head;
292 while (nextBin) {
293 Event *nextInBin = nextBin;
294
295 while (nextInBin) {
296 if (nextInBin->flags.isSet(Event::AutoSerialize)) {
297 eventPtrs.push_back(nextInBin);
298 paramOut(cp, csprintf("event%d", numEvents++),
299 nextInBin->name());
300 }
301 nextInBin = nextInBin->nextInBin;
302 }
303
304 nextBin = nextBin->nextBin;
305 }
306
307 SERIALIZE_SCALAR(numEvents);
308
309 for (Event *ev : eventPtrs)
310 ev->serializeSection(cp, ev->name());
311}
312
313void
314EventQueue::unserialize(CheckpointIn &cp)
315{
316 int numEvents;
317 UNSERIALIZE_SCALAR(numEvents);
318
319 std::string eventName;
320 for (int i = 0; i < numEvents; i++) {
321 // get the pointer value associated with the event
322 paramIn(cp, csprintf("event%d", i), eventName);
323
324 // create the event based on its pointer value
325 Serializable *obj(Serializable::create(cp, eventName));
326 Event *event(dynamic_cast<Event *>(obj));
327 fatal_if(!event,
328 "Event queue unserialized something that wasn't an event.\n");
329
330 checkpointReschedule(event);
331 }
332}
333
334void
335EventQueue::checkpointReschedule(Event *event)
336{
337 // It's safe to call insert() directly here since this method
338 // should only be called when restoring from a checkpoint (which
339 // happens before thread creation).
340 if (event->flags.isSet(Event::Scheduled))
341 insert(event);
342}

--- 149 unchanged lines hidden ---
286EventQueue::checkpointReschedule(Event *event)
287{
288 // It's safe to call insert() directly here since this method
289 // should only be called when restoring from a checkpoint (which
290 // happens before thread creation).
291 if (event->flags.isSet(Event::Scheduled))
292 insert(event);
293}

--- 149 unchanged lines hidden ---