eventq_impl.hh revision 9356
1/* 2 * Copyright (c) 2012 The Regents of The University of Michigan 3 * Copyright (c) 2012 Mark D. Hill and David A. Wood 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 12 * documentation and/or other materials provided with the distribution; 13 * neither the name of the copyright holders nor the names of its 14 * contributors may be used to endorse or promote products derived from 15 * this software without specific prior written permission. 16 * 17 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 19 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 20 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 21 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 22 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 * 29 * Authors: Steve Reinhardt 30 * Nathan Binkert 31 * Nilay Vaish 32 */ 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 41EventQueue::schedule(Event *event, Tick when) 42{ 43 assert(when >= getCurTick()); 44 assert(!event->scheduled()); 45 assert(event->initialized()); 46 47 event->setWhen(when, this); 48 insert(event); 49 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()); 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()); 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); 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