diff --git a/src/cpu/minor/cpu.cc b/src/cpu/minor/cpu.cc
index 484457b..63efde2 100644
--- a/src/cpu/minor/cpu.cc
+++ b/src/cpu/minor/cpu.cc
@@ -49,7 +49,6 @@
 
 MinorCPU::MinorCPU(MinorCPUParams *params) :
     BaseCPU(params),
-    pipelineStartupEvent([this]{ wakeupPipeline(); }, name()),
     threadPolicy(params->threadPolicy)
 {
     /* This is only written for one thread at the moment */
@@ -280,43 +279,20 @@
 void
 MinorCPU::activateContext(ThreadID thread_id)
 {
-    /* Remember to wake up this thread_id by scheduling the
-     * pipelineStartup event.
-     * We can't wakeupFetch the thread right away because its context may
-     * not have been fully initialized. For example, in the case of clone
-     * syscall, this activateContext function is called in the middle of
-     * the syscall and before the new thread context is initialized.
-     * If we start fetching right away, the new thread will fetch from an
-     * invalid address (i.e., pc is not initialized yet), which could lead
-     * to a page fault. Instead, we remember which threads to wake up and
-     * schedule an event to wake all them up after their contexts are
-     * fully initialized */
-    readyThreads.push_back(thread_id);
-    if (!pipelineStartupEvent.scheduled())
-        schedule(pipelineStartupEvent, clockEdge(Cycles(0)));
-}
+    DPRINTF(MinorCPU, "ActivateContext thread: %d\n", thread_id);
 
-void
-MinorCPU::wakeupPipeline()
-{
-    for (auto thread_id : readyThreads) {
-        DPRINTF(MinorCPU, "ActivateContext thread: %d\n", thread_id);
+    /* Do some cycle accounting.  lastStopped is reset to stop the
+     *  wakeup call on the pipeline from adding the quiesce period
+     *  to BaseCPU::numCycles */
+    stats.quiesceCycles += pipeline->cyclesSinceLastStopped();
+    pipeline->resetLastStopped();
 
-        /* Do some cycle accounting.  lastStopped is reset to stop the
-         *  wakeup call on the pipeline from adding the quiesce period
-         *  to BaseCPU::numCycles */
-        stats.quiesceCycles += pipeline->cyclesSinceLastStopped();
-        pipeline->resetLastStopped();
+    /* Wake up the thread, wakeup the pipeline tick */
+    threads[thread_id]->activate();
+    wakeupOnEvent(Minor::Pipeline::CPUStageId);
+    pipeline->wakeupFetch(thread_id);
 
-        /* Wake up the thread, wakeup the pipeline tick */
-        threads[thread_id]->activate();
-        wakeupOnEvent(Minor::Pipeline::CPUStageId);
-
-        pipeline->wakeupFetch(thread_id);
-        BaseCPU::activateContext(thread_id);
-    }
-
-    readyThreads.clear();
+    BaseCPU::activateContext(thread_id);
 }
 
 void
diff --git a/src/cpu/minor/cpu.hh b/src/cpu/minor/cpu.hh
index 606a401..4e47623 100644
--- a/src/cpu/minor/cpu.hh
+++ b/src/cpu/minor/cpu.hh
@@ -83,13 +83,6 @@
      *  Elements of pipeline call TheISA to implement the model. */
     Minor::Pipeline *pipeline;
 
-    /** An event that wakes up the pipeline when a thread context is
-     * activated */
-    EventFunctionWrapper pipelineStartupEvent;
-
-    /** List of threads that are ready to wake up and run */
-    std::vector<ThreadID> readyThreads;
-
   public:
     /** Activity recording for pipeline.  This belongs to Pipeline but
      *  stages will access it through the CPU as the MinorCPU object
@@ -172,9 +165,6 @@
     void activateContext(ThreadID thread_id) override;
     void suspendContext(ThreadID thread_id) override;
 
-    /** Wake up ready-to-run threads */
-    void wakeupPipeline();
-
     /** Thread scheduling utility functions */
     std::vector<ThreadID> roundRobinPriority(ThreadID priority)
     {
diff --git a/src/cpu/minor/execute.cc b/src/cpu/minor/execute.cc
index 81d310b..810ff11 100644
--- a/src/cpu/minor/execute.cc
+++ b/src/cpu/minor/execute.cc
@@ -1061,8 +1061,7 @@
         !branch.isStreamChange() && /* No real branch */
         fault == NoFault && /* No faults */
         completed_inst && /* Still finding instructions to execute */
-        num_insts_committed != commitLimit && /* Not reached commit limit */
-        cpu.getContext(thread_id)->status() != ThreadContext::Suspended
+        num_insts_committed != commitLimit /* Not reached commit limit */
         )
     {
         if (only_commit_microops) {
diff --git a/src/cpu/minor/fetch2.cc b/src/cpu/minor/fetch2.cc
index b374ee9..d60a1ba 100644
--- a/src/cpu/minor/fetch2.cc
+++ b/src/cpu/minor/fetch2.cc
@@ -120,7 +120,6 @@
         popInput(tid);
 
     fetchInfo[tid].inputIndex = 0;
-    fetchInfo[tid].havePC = false;
 }
 
 void
diff --git a/src/cpu/minor/fetch2.hh b/src/cpu/minor/fetch2.hh
index 114dec0..ecd6a81 100644
--- a/src/cpu/minor/fetch2.hh
+++ b/src/cpu/minor/fetch2.hh
@@ -173,11 +173,6 @@
     Stats::Scalar storeInstructions;
     Stats::Scalar amoInstructions;
 
-  public:
-    /** Dump the whole contents of the input buffer.  Useful after a
-     *  prediction changes control flow */
-    void dumpAllInput(ThreadID tid);
-
   protected:
     /** Get a piece of data to work on from the inputBuffer, or 0 if there
      *  is no data. */
@@ -186,6 +181,10 @@
     /** Pop an element off the input buffer, if there are any */
     void popInput(ThreadID tid);
 
+    /** Dump the whole contents of the input buffer.  Useful after a
+     *  prediction changes control flow */
+    void dumpAllInput(ThreadID tid);
+
     /** Update local branch prediction structures from feedback from
      *  Execute. */
     void updateBranchPrediction(const BranchData &branch);
diff --git a/src/cpu/minor/pipeline.cc b/src/cpu/minor/pipeline.cc
index 3248d54..b5659ac 100644
--- a/src/cpu/minor/pipeline.cc
+++ b/src/cpu/minor/pipeline.cc
@@ -199,7 +199,6 @@
 Pipeline::wakeupFetch(ThreadID tid)
 {
     fetch1.wakeupFetch(tid);
-    fetch2.dumpAllInput(tid);
 }
 
 bool
