eventq_impl.hh (9356:b279bad40aa3) | eventq_impl.hh (9983:2cce74fe359e) |
---|---|
1/* 2 * Copyright (c) 2012 The Regents of The University of Michigan | 1/* 2 * Copyright (c) 2012 The Regents of The University of Michigan |
3 * Copyright (c) 2012 Mark D. Hill and David A. Wood | 3 * Copyright (c) 2012-2013 Mark D. Hill and David A. Wood 4 * Copyright (c) 2013 Advanced Micro Devices, Inc. |
4 * All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions are 8 * met: redistributions of source code must retain the above copyright 9 * notice, this list of conditions and the following disclaimer; 10 * redistributions in binary form must reproduce the above copyright 11 * notice, this list of conditions and the following disclaimer in the --- 21 unchanged lines hidden (view full) --- 33 34#ifndef __SIM_EVENTQ_IMPL_HH__ 35#define __SIM_EVENTQ_IMPL_HH__ 36 37#include "base/trace.hh" 38#include "sim/eventq.hh" 39 40inline void | 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 9 * met: redistributions of source code must retain the above copyright 10 * notice, this list of conditions and the following disclaimer; 11 * redistributions in binary form must reproduce the above copyright 12 * notice, this list of conditions and the following disclaimer in the --- 21 unchanged lines hidden (view full) --- 34 35#ifndef __SIM_EVENTQ_IMPL_HH__ 36#define __SIM_EVENTQ_IMPL_HH__ 37 38#include "base/trace.hh" 39#include "sim/eventq.hh" 40 41inline void |
41EventQueue::schedule(Event *event, Tick when) | 42EventQueue::schedule(Event *event, Tick when, bool global) |
42{ 43 assert(when >= getCurTick()); 44 assert(!event->scheduled()); 45 assert(event->initialized()); 46 47 event->setWhen(when, this); | 43{ 44 assert(when >= getCurTick()); 45 assert(!event->scheduled()); 46 assert(event->initialized()); 47 48 event->setWhen(when, this); |
48 insert(event); | 49 50 // The check below is to make sure of two things 51 // a. a thread schedules local events on other queues through the asyncq 52 // b. a thread schedules global events on the asyncq, whether or not 53 // this event belongs to this eventq. This is required to maintain 54 // a total order amongst the global events. See global_event.{cc,hh} 55 // for more explanation. 56 if (inParallelMode && (this != curEventQueue() || global)) { 57 asyncInsert(event); 58 } else { 59 insert(event); 60 } |
49 event->flags.set(Event::Scheduled); | 61 event->flags.set(Event::Scheduled); |
50 if (this == &mainEventQueue) 51 event->flags.set(Event::IsMainQueue); 52 else 53 event->flags.clear(Event::IsMainQueue); | |
54 55 if (DTRACE(Event)) 56 event->trace("scheduled"); 57} 58 59inline void 60EventQueue::deschedule(Event *event) 61{ 62 assert(event->scheduled()); 63 assert(event->initialized()); | 62 63 if (DTRACE(Event)) 64 event->trace("scheduled"); 65} 66 67inline void 68EventQueue::deschedule(Event *event) 69{ 70 assert(event->scheduled()); 71 assert(event->initialized()); |
72 assert(!inParallelMode || this == curEventQueue()); |
|
64 65 remove(event); 66 67 event->flags.clear(Event::Squashed); 68 event->flags.clear(Event::Scheduled); 69 70 if (DTRACE(Event)) 71 event->trace("descheduled"); 72 73 if (event->flags.isSet(Event::AutoDelete)) 74 delete event; 75} 76 77inline void 78EventQueue::reschedule(Event *event, Tick when, bool always) 79{ 80 assert(when >= getCurTick()); 81 assert(always || event->scheduled()); 82 assert(event->initialized()); | 73 74 remove(event); 75 76 event->flags.clear(Event::Squashed); 77 event->flags.clear(Event::Scheduled); 78 79 if (DTRACE(Event)) 80 event->trace("descheduled"); 81 82 if (event->flags.isSet(Event::AutoDelete)) 83 delete event; 84} 85 86inline void 87EventQueue::reschedule(Event *event, Tick when, bool always) 88{ 89 assert(when >= getCurTick()); 90 assert(always || event->scheduled()); 91 assert(event->initialized()); |
92 assert(!inParallelMode || this == curEventQueue()); |
|
83 84 if (event->scheduled()) 85 remove(event); 86 87 event->setWhen(when, this); 88 insert(event); 89 event->flags.clear(Event::Squashed); 90 event->flags.set(Event::Scheduled); | 93 94 if (event->scheduled()) 95 remove(event); 96 97 event->setWhen(when, this); 98 insert(event); 99 event->flags.clear(Event::Squashed); 100 event->flags.set(Event::Scheduled); |
91 if (this == &mainEventQueue) 92 event->flags.set(Event::IsMainQueue); 93 else 94 event->flags.clear(Event::IsMainQueue); | |
95 96 if (DTRACE(Event)) 97 event->trace("rescheduled"); 98} 99 100#endif // __SIM_EVENTQ_IMPL_HH__ | 101 102 if (DTRACE(Event)) 103 event->trace("rescheduled"); 104} 105 106#endif // __SIM_EVENTQ_IMPL_HH__ |