summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Sandberg <andreas@sandberg.pp.se>2013-05-14 16:02:45 +0200
committerAndreas Sandberg <andreas@sandberg.pp.se>2013-05-14 16:02:45 +0200
commit4e52789c6db91cd292e2de933c7c797e24fa870f (patch)
tree137cdcac6264cb1104fe2d1adb6330f7eff31873
parent3ba93822ccae1dcc5e47c6909d7e690d784ec0e1 (diff)
downloadgem5-4e52789c6db91cd292e2de933c7c797e24fa870f.tar.xz
kvm: Add support for disabling coalesced MMIO
Add the option useCoalescedMMIO to the BaseKvmCPU. The default behavior is to disable coalesced MMIO since this hasn't been heavily tested.
-rw-r--r--src/cpu/kvm/BaseKvmCPU.py1
-rw-r--r--src/cpu/kvm/base.cc7
2 files changed, 7 insertions, 1 deletions
diff --git a/src/cpu/kvm/BaseKvmCPU.py b/src/cpu/kvm/BaseKvmCPU.py
index a8356ac5b..796a7794b 100644
--- a/src/cpu/kvm/BaseKvmCPU.py
+++ b/src/cpu/kvm/BaseKvmCPU.py
@@ -69,5 +69,6 @@ class BaseKvmCPU(BaseCPU):
return True
kvmVM = Param.KvmVM(Parent.any, 'KVM VM (i.e., shared memory domain)')
+ useCoalescedMMIO = Param.Bool(False, "Use coalesced MMIO (EXPERIMENTAL)")
usePerfOverflow = Param.Bool(False, "Use perf event overflow counters (EXPERIMENTAL)")
hostFactor = Param.Float(1.0, "Cycle scale factor")
diff --git a/src/cpu/kvm/base.cc b/src/cpu/kvm/base.cc
index 7435d4364..bc650aee9 100644
--- a/src/cpu/kvm/base.cc
+++ b/src/cpu/kvm/base.cc
@@ -133,6 +133,9 @@ BaseKvmCPU::init()
void
BaseKvmCPU::startup()
{
+ const BaseKvmCPUParams * const p(
+ dynamic_cast<const BaseKvmCPUParams *>(params()));
+
Kvm &kvm(vm.kvm);
BaseCPU::startup();
@@ -159,7 +162,9 @@ BaseKvmCPU::startup()
// available. The offset into the KVM's communication page is
// provided by the coalesced MMIO capability.
int mmioOffset(kvm.capCoalescedMMIO());
- if (mmioOffset) {
+ if (!p->useCoalescedMMIO) {
+ inform("KVM: Coalesced MMIO disabled by config.\n");
+ } else if (mmioOffset) {
inform("KVM: Coalesced IO available\n");
mmioRing = (struct kvm_coalesced_mmio_ring *)(
(char *)_kvmRun + (mmioOffset * pageSize));