cpu: Enforce 1 interrupt controller per thread
authorAndreas Sandberg <andreas.sandberg@arm.com>
Fri, 20 Nov 2015 20:50:17 +0000 (14:50 -0600)
committerAndreas Sandberg <andreas.sandberg@arm.com>
Fri, 20 Nov 2015 20:50:17 +0000 (14:50 -0600)
Consider it a fatal configuration error if the number of interrupt
controllers doesn't match the number of threads in an SMT
configuration.

src/cpu/base.cc

index a1dfa42ce77ccecb69849c5d5bbdabbc90e36ddd..9ba7e08a7790a93172c5f8b800ad3ecf094e38d3 100644 (file)
@@ -237,14 +237,12 @@ BaseCPU::BaseCPU(Params *p, bool is_checker)
     // The interrupts should always be present unless this CPU is
     // switched in later or in case it is a checker CPU
     if (!params()->switched_out && !is_checker) {
-        if (!interrupts.empty()) {
-            for (ThreadID tid = 0; tid < numThreads; tid++) {
-                interrupts[tid]->setCPU(this);
-            }
-        } else {
-            fatal("CPU %s has no interrupt controller.\n"
-                  "Ensure createInterruptController() is called.\n", name());
-        }
+        fatal_if(interrupts.size() != numThreads,
+                 "CPU %s has %i interrupt controllers, but is expecting one "
+                 "per thread (%i)\n",
+                 name(), interrupts.size(), numThreads);
+        for (ThreadID tid = 0; tid < numThreads; tid++)
+            interrupts[tid]->setCPU(this);
     }
 
     if (FullSystem) {