summaryrefslogtreecommitdiff
path: root/src/dev/arm/generic_timer.hh
diff options
context:
space:
mode:
authorCurtis Dunham <Curtis.Dunham@arm.com>2017-05-18 21:18:48 +0000
committerAndreas Sandberg <andreas.sandberg@arm.com>2017-07-05 14:24:03 +0000
commite2a049e089b4878d6abd8e816973b175e2be2d7c (patch)
tree196ca2952e623920c1d8da558b8fef3a4c0e5784 /src/dev/arm/generic_timer.hh
parentb829b4a8e4ef82345cf81d442dbc6c67016fde98 (diff)
downloadgem5-e2a049e089b4878d6abd8e816973b175e2be2d7c.tar.xz
dev,arm: remove and recreate timer events around drains
Having timer events stored in checkpoints complicates Kvm execution. We change the timer behavior so that it always deschedules any pending events on a drain() and recreates them on a drainResume(), thus they will never appear in checkpoints henceforth. This pattern of behavior makes it simpler to handle Kvm execution, where the hardware performs the timer function directly. Change-Id: Ia218868c69350d96e923c640634d492b5c19cd3f Reviewed-on: https://gem5-review.googlesource.com/3541 Reviewed-by: Andreas Sandberg <andreas.sandberg@arm.com> Maintainer: Andreas Sandberg <andreas.sandberg@arm.com>
Diffstat (limited to 'src/dev/arm/generic_timer.hh')
-rw-r--r--src/dev/arm/generic_timer.hh9
1 files changed, 7 insertions, 2 deletions
diff --git a/src/dev/arm/generic_timer.hh b/src/dev/arm/generic_timer.hh
index 3a3895489..3eec1d42e 100644
--- a/src/dev/arm/generic_timer.hh
+++ b/src/dev/arm/generic_timer.hh
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2013, 2015 ARM Limited
+ * Copyright (c) 2013, 2015, 2017 ARM Limited
* All rights reserved.
*
* The license below extends only to copyright in the software and shall
@@ -102,7 +102,7 @@ class SystemCounter : public Serializable
};
/// Per-CPU architected timer.
-class ArchTimer : public Serializable
+class ArchTimer : public Serializable, public Drainable
{
public:
class Interrupt
@@ -188,9 +188,14 @@ class ArchTimer : public Serializable
/// Returns the value of the counter which this timer relies on.
uint64_t value() const;
+ // Serializable
void serialize(CheckpointOut &cp) const override;
void unserialize(CheckpointIn &cp) override;
+ // Drainable
+ DrainState drain() override;
+ void drainResume() override;
+
private:
// Disable copying
ArchTimer(const ArchTimer &t);