kvm: Initialize signal handlers from startupThread()
authorAndreas Sandberg <andreas@sandberg.pp.se>
Mon, 3 Mar 2014 13:31:39 +0000 (14:31 +0100)
committerAndreas Sandberg <andreas@sandberg.pp.se>
Mon, 3 Mar 2014 13:31:39 +0000 (14:31 +0100)
Signal handlers in KVM are controlled per thread and should be
initialized from the thread that is going to execute the CPU. This
changeset moves the initialization call from startup() to
startupThread().

src/cpu/kvm/base.cc

index 64c1a5e81ff7f73207de343441f02503a4057275..26ffe37a54fc250e7535c31d69be0fdfeb911a34 100644 (file)
@@ -138,10 +138,6 @@ BaseKvmCPU::startup()
     // point. Initialize virtual CPUs here instead.
     vcpuFD = vm.createVCPU(vcpuID);
 
-    // Setup signal handlers. This has to be done after the vCPU is
-    // created since it manipulates the vCPU signal mask.
-    setupSignalHandler();
-
     // Map the KVM run structure */
     vcpuMMapSize = kvm.getVCPUMMapSize();
     _kvmRun = (struct kvm_run *)mmap(0, vcpuMMapSize,
@@ -182,6 +178,10 @@ BaseKvmCPU::startupThread()
     const BaseKvmCPUParams * const p(
         dynamic_cast<const BaseKvmCPUParams *>(params()));
 
+    // Setup signal handlers. This has to be done after the vCPU is
+    // created since it manipulates the vCPU signal mask.
+    setupSignalHandler();
+
     setupCounters();
 
     if (p->usePerfOverflow)