diff options
author | Andreas Sandberg <andreas@sandberg.pp.se> | 2015-11-27 14:52:10 +0000 |
---|---|---|
committer | Andreas Sandberg <andreas@sandberg.pp.se> | 2015-11-27 14:52:10 +0000 |
commit | 4f303785dc3001a8c952f19540e16a9b437278f2 (patch) | |
tree | b03d09b88d2c5d5db402f4f6631976e0a82fda57 /src/cpu/kvm/vm.hh | |
parent | a91c1e69a880dd6eec3cc980801ea18ddcbe7c31 (diff) | |
download | gem5-4f303785dc3001a8c952f19540e16a9b437278f2.tar.xz |
kvm: Shutdown KVM and disconnect performance counters on fork
We can't/shouldn't use KVM after a fork since the child and parent
probably point to the same VM. Knowing the exact effects of this is
hard, but they are likely to be messy. We also disconnect the
performance counters attached to the guest. This works around what
seems to be a kernel bug where spurious SIGIOs get delivered to the
forked child process.
Signed-off-by: Andreas Sandberg <andreas@sandberg.pp.se>
[sascha.bischoff@arm.com: Rebased patches onto a newer gem5 version]
Signed-off-by: Sascha Bischoff <sascha.bischoff@arm.com>
[andreas.sandberg@arm.com: Fatal if entering KVM in child process ]
Signed-off-by: Andreas Sandberg <andreas.sandberg@arm.com>
Diffstat (limited to 'src/cpu/kvm/vm.hh')
-rw-r--r-- | src/cpu/kvm/vm.hh | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/cpu/kvm/vm.hh b/src/cpu/kvm/vm.hh index 8f834a06e..560efb606 100644 --- a/src/cpu/kvm/vm.hh +++ b/src/cpu/kvm/vm.hh @@ -295,6 +295,8 @@ class KvmVM : public SimObject KvmVM(KvmVMParams *params); virtual ~KvmVM(); + void notifyFork(); + /** * Setup a shared three-page memory region used by the internals * of KVM. This is currently only needed by x86 implementations. @@ -396,7 +398,7 @@ class KvmVM : public SimObject int createDevice(uint32_t type, uint32_t flags = 0); /** Global KVM interface */ - Kvm kvm; + Kvm *kvm; #if defined(__aarch64__) public: // ARM-specific @@ -504,7 +506,7 @@ class KvmVM : public SimObject System *system; /** KVM VM file descriptor */ - const int vmFD; + int vmFD; /** Has delayedStartup() already been called? */ bool started; |