summaryrefslogtreecommitdiff
path: root/src/arch
diff options
context:
space:
mode:
Diffstat (limited to 'src/arch')
-rw-r--r--src/arch/arm/kvm/gic.cc11
-rw-r--r--src/arch/arm/kvm/gic.hh3
2 files changed, 14 insertions, 0 deletions
diff --git a/src/arch/arm/kvm/gic.cc b/src/arch/arm/kvm/gic.cc
index ce3baa558..d490265b8 100644
--- a/src/arch/arm/kvm/gic.cc
+++ b/src/arch/arm/kvm/gic.cc
@@ -292,6 +292,17 @@ MuxingKvmGic::clearPPInt(uint32_t num, uint32_t cpu)
}
void
+MuxingKvmGic::updateIntState(int hint)
+{
+ // During Kvm->Pl390 state transfer, writes to the Pl390 will call
+ // updateIntState() which can post an interrupt. Since we're only
+ // using the Pl390 model for holding state in this circumstance, we
+ // short-circuit this behavior, as the Pl390 is not actually active.
+ if (!usingKvm)
+ return Pl390::updateIntState(hint);
+}
+
+void
MuxingKvmGic::copyDistRegister(BaseGicRegisters* from, BaseGicRegisters* to,
ContextID ctx, Addr daddr)
{
diff --git a/src/arch/arm/kvm/gic.hh b/src/arch/arm/kvm/gic.hh
index ee04088d3..5447e6a92 100644
--- a/src/arch/arm/kvm/gic.hh
+++ b/src/arch/arm/kvm/gic.hh
@@ -194,6 +194,9 @@ class MuxingKvmGic : public Pl390
void sendPPInt(uint32_t num, uint32_t cpu) override;
void clearPPInt(uint32_t num, uint32_t cpu) override;
+ protected: // Pl390
+ void updateIntState(int hint) override;
+
protected:
/** System this interrupt controller belongs to */
System &system;