From 415abb3a3ccf969d8a95a2b7b2736bf49d879b56 Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Mon, 25 May 2020 05:18:10 -0700 Subject: [PATCH] sim,mem,dev: Merge eventq_impl.hh into eventq.hh. Having some methods (which are supposed to be inline) defined in another file which is only included sometimes creates a lot of opportunities for errors. They no longer need to be separate, so merge them together. Change-Id: I5846e55f53f59b9c2081680a6441659265a765f7 Reviewed-on: https://gem5-review.googlesource.com/c/public/gem5/+/29409 Maintainer: Gabe Black Reviewed-by: Gabe Black Tested-by: kokoro --- src/dev/intel_8254_timer.hh | 2 +- src/dev/mc146818.hh | 2 +- src/mem/packet_queue.hh | 2 +- src/sim/debug.cc | 2 +- src/sim/dvfs_handler.cc | 2 +- src/sim/eventq.cc | 3 +- src/sim/eventq.hh | 70 ++++++++++++++++++++++-- src/sim/eventq_impl.hh | 105 ------------------------------------ src/sim/global_event.hh | 2 +- src/sim/root.cc | 2 +- src/sim/sim_events.cc | 2 +- src/sim/sim_object.hh | 1 - src/sim/simulate.cc | 2 +- 13 files changed, 78 insertions(+), 119 deletions(-) delete mode 100644 src/sim/eventq_impl.hh diff --git a/src/dev/intel_8254_timer.hh b/src/dev/intel_8254_timer.hh index 15e0e61fc..2279457cb 100644 --- a/src/dev/intel_8254_timer.hh +++ b/src/dev/intel_8254_timer.hh @@ -36,7 +36,7 @@ #include "base/types.hh" #include "base/trace.hh" #include "debug/Intel8254Timer.hh" -#include "sim/eventq_impl.hh" +#include "sim/eventq.hh" #include "sim/serialize.hh" /** Programmable Interval Timer (Intel 8254) */ diff --git a/src/dev/mc146818.hh b/src/dev/mc146818.hh index 0ed5636be..038141b2f 100644 --- a/src/dev/mc146818.hh +++ b/src/dev/mc146818.hh @@ -32,7 +32,7 @@ #include "base/bitunion.hh" #include "base/logging.hh" #include "sim/core.hh" -#include "sim/eventq_impl.hh" +#include "sim/eventq.hh" /** Real-Time Clock (MC146818) */ class MC146818 : public EventManager diff --git a/src/mem/packet_queue.hh b/src/mem/packet_queue.hh index 71670e4a5..a50c858b9 100644 --- a/src/mem/packet_queue.hh +++ b/src/mem/packet_queue.hh @@ -53,7 +53,7 @@ #include "mem/port.hh" #include "sim/drain.hh" -#include "sim/eventq_impl.hh" +#include "sim/eventq.hh" /** * A packet queue is a class that holds deferred packets and later diff --git a/src/sim/debug.cc b/src/sim/debug.cc index 484d4a670..b2b3d456b 100644 --- a/src/sim/debug.cc +++ b/src/sim/debug.cc @@ -33,7 +33,7 @@ #include "base/debug.hh" #include "cpu/pc_event.hh" -#include "sim/eventq_impl.hh" +#include "sim/eventq.hh" #include "sim/global_event.hh" #include "sim/kernel_workload.hh" #include "sim/sim_events.hh" diff --git a/src/sim/dvfs_handler.cc b/src/sim/dvfs_handler.cc index 9c452eef4..9591d8f41 100644 --- a/src/sim/dvfs_handler.cc +++ b/src/sim/dvfs_handler.cc @@ -45,7 +45,7 @@ #include "debug/DVFS.hh" #include "params/DVFSHandler.hh" #include "sim/clock_domain.hh" -#include "sim/eventq_impl.hh" +#include "sim/eventq.hh" #include "sim/stat_control.hh" #include "sim/voltage_domain.hh" diff --git a/src/sim/eventq.cc b/src/sim/eventq.cc index 25131b3f6..bc4864c9b 100644 --- a/src/sim/eventq.cc +++ b/src/sim/eventq.cc @@ -28,6 +28,8 @@ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +#include "sim/eventq.hh" + #include #include #include @@ -39,7 +41,6 @@ #include "cpu/smt.hh" #include "debug/Checkpoint.hh" #include "sim/core.hh" -#include "sim/eventq_impl.hh" using namespace std; diff --git a/src/sim/eventq.hh b/src/sim/eventq.hh index 522b394f7..ddba8bd23 100644 --- a/src/sim/eventq.hh +++ b/src/sim/eventq.hh @@ -44,6 +44,7 @@ #include #include +#include "base/debug.hh" #include "base/flags.hh" #include "base/types.hh" #include "debug/Event.hh" @@ -750,14 +751,56 @@ class EventQueue * * @ingroup api_eventq */ - void schedule(Event *event, Tick when, bool global = false); + void + schedule(Event *event, Tick when, bool global=false) + { + assert(when >= getCurTick()); + assert(!event->scheduled()); + assert(event->initialized()); + + event->setWhen(when, this); + + // The check below is to make sure of two things + // a. A thread schedules local events on other queues through the + // asyncq. + // b. A thread schedules global events on the asyncq, whether or not + // this event belongs to this eventq. This is required to maintain + // a total order amongst the global events. See global_event.{cc,hh} + // for more explanation. + if (inParallelMode && (this != curEventQueue() || global)) { + asyncInsert(event); + } else { + insert(event); + } + event->flags.set(Event::Scheduled); + event->acquire(); + + if (DTRACE(Event)) + event->trace("scheduled"); + } /** * Deschedule the specified event. Should be called only from the owning * thread. * @ingroup api_eventq */ - void deschedule(Event *event); + void + deschedule(Event *event) + { + assert(event->scheduled()); + assert(event->initialized()); + assert(!inParallelMode || this == curEventQueue()); + + remove(event); + + event->flags.clear(Event::Squashed); + event->flags.clear(Event::Scheduled); + + if (DTRACE(Event)) + event->trace("descheduled"); + + event->release(); + } /** * Reschedule the specified event. Should be called only from the owning @@ -765,7 +808,28 @@ class EventQueue * * @ingroup api_eventq */ - void reschedule(Event *event, Tick when, bool always = false); + void + reschedule(Event *event, Tick when, bool always=false) + { + assert(when >= getCurTick()); + assert(always || event->scheduled()); + assert(event->initialized()); + assert(!inParallelMode || this == curEventQueue()); + + if (event->scheduled()) { + remove(event); + } else { + event->acquire(); + } + + event->setWhen(when, this); + insert(event); + event->flags.clear(Event::Squashed); + event->flags.set(Event::Scheduled); + + if (DTRACE(Event)) + event->trace("rescheduled"); + } Tick nextTick() const { return head->when(); } void setCurTick(Tick newVal) { _curTick = newVal; } diff --git a/src/sim/eventq_impl.hh b/src/sim/eventq_impl.hh deleted file mode 100644 index 0e4f40813..000000000 --- a/src/sim/eventq_impl.hh +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Copyright (c) 2012 The Regents of The University of Michigan - * Copyright (c) 2012-2013 Mark D. Hill and David A. Wood - * Copyright (c) 2013 Advanced Micro Devices, Inc. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer; - * redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution; - * neither the name of the copyright holders nor the names of its - * contributors may be used to endorse or promote products derived from - * this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#ifndef __SIM_EVENTQ_IMPL_HH__ -#define __SIM_EVENTQ_IMPL_HH__ - -#include "base/debug.hh" -#include "sim/eventq.hh" - -inline void -EventQueue::schedule(Event *event, Tick when, bool global) -{ - assert(when >= getCurTick()); - assert(!event->scheduled()); - assert(event->initialized()); - - event->setWhen(when, this); - - // The check below is to make sure of two things - // a. a thread schedules local events on other queues through the asyncq - // b. a thread schedules global events on the asyncq, whether or not - // this event belongs to this eventq. This is required to maintain - // a total order amongst the global events. See global_event.{cc,hh} - // for more explanation. - if (inParallelMode && (this != curEventQueue() || global)) { - asyncInsert(event); - } else { - insert(event); - } - event->flags.set(Event::Scheduled); - event->acquire(); - - if (DTRACE(Event)) - event->trace("scheduled"); -} - -inline void -EventQueue::deschedule(Event *event) -{ - assert(event->scheduled()); - assert(event->initialized()); - assert(!inParallelMode || this == curEventQueue()); - - remove(event); - - event->flags.clear(Event::Squashed); - event->flags.clear(Event::Scheduled); - - if (DTRACE(Event)) - event->trace("descheduled"); - - event->release(); -} - -inline void -EventQueue::reschedule(Event *event, Tick when, bool always) -{ - assert(when >= getCurTick()); - assert(always || event->scheduled()); - assert(event->initialized()); - assert(!inParallelMode || this == curEventQueue()); - - if (event->scheduled()) { - remove(event); - } else { - event->acquire(); - } - - event->setWhen(when, this); - insert(event); - event->flags.clear(Event::Squashed); - event->flags.set(Event::Scheduled); - - if (DTRACE(Event)) - event->trace("rescheduled"); -} - -#endif // __SIM_EVENTQ_IMPL_HH__ diff --git a/src/sim/global_event.hh b/src/sim/global_event.hh index 0dd4c1e6d..8e4254b32 100644 --- a/src/sim/global_event.hh +++ b/src/sim/global_event.hh @@ -34,7 +34,7 @@ #include #include "base/barrier.hh" -#include "sim/eventq_impl.hh" +#include "sim/eventq.hh" /** * @file sim/global_event.hh diff --git a/src/sim/root.cc b/src/sim/root.cc index 1c396dd5e..5a174424e 100644 --- a/src/sim/root.cc +++ b/src/sim/root.cc @@ -31,7 +31,7 @@ #include "base/trace.hh" #include "config/the_isa.hh" #include "debug/TimeSync.hh" -#include "sim/eventq_impl.hh" +#include "sim/eventq.hh" #include "sim/full_system.hh" #include "sim/root.hh" diff --git a/src/sim/sim_events.cc b/src/sim/sim_events.cc index bcfa06297..5888ea06f 100644 --- a/src/sim/sim_events.cc +++ b/src/sim/sim_events.cc @@ -46,7 +46,7 @@ #include "base/callback.hh" #include "base/hostinfo.hh" -#include "sim/eventq_impl.hh" +#include "sim/eventq.hh" #include "sim/sim_exit.hh" #include "sim/stats.hh" diff --git a/src/sim/sim_object.hh b/src/sim/sim_object.hh index de89fbff2..27f675c64 100644 --- a/src/sim/sim_object.hh +++ b/src/sim/sim_object.hh @@ -53,7 +53,6 @@ #include "params/SimObject.hh" #include "sim/drain.hh" #include "sim/eventq.hh" -#include "sim/eventq_impl.hh" #include "sim/port.hh" #include "sim/serialize.hh" diff --git a/src/sim/simulate.cc b/src/sim/simulate.cc index 11efd9bec..c0d1055fe 100644 --- a/src/sim/simulate.cc +++ b/src/sim/simulate.cc @@ -37,7 +37,7 @@ #include "base/pollevent.hh" #include "base/types.hh" #include "sim/async.hh" -#include "sim/eventq_impl.hh" +#include "sim/eventq.hh" #include "sim/sim_events.hh" #include "sim/sim_exit.hh" #include "sim/stat_control.hh" -- 2.30.2