kvm: Fix the memory interface used by KVM
authorAndreas Sandberg <andreas@sandberg.pp.se>
Tue, 14 May 2013 13:56:04 +0000 (15:56 +0200)
committerAndreas Sandberg <andreas@sandberg.pp.se>
Tue, 14 May 2013 13:56:04 +0000 (15:56 +0200)
The CpuPort class was removed before the KVM patches were committed,
which means that the KVM interface currently doesn't compile. This
changeset adds the BaseKvmCPU::KVMCpuPort class which derives from
MasterPort. This class is used on the data and instruction ports
instead of the old CpuPort.

src/cpu/kvm/base.hh

index f46455af60b3482d696ecb4c42ed31fd0639761d..4546b10711c875aa751ae112f54c99c36783ecc5 100644 (file)
@@ -93,8 +93,8 @@ class BaseKvmCPU : public BaseCPU
 
     void verifyMemoryMode() const;
 
-    CpuPort &getDataPort() { return dataPort; }
-    CpuPort &getInstPort() { return instPort; }
+    MasterPort &getDataPort() { return dataPort; }
+    MasterPort &getInstPort() { return instPort; }
 
     void wakeup();
     void activateContext(ThreadID thread_num, Cycles delay);
@@ -403,11 +403,38 @@ class BaseKvmCPU : public BaseCPU
     }
     /** @} */
 
+
+    /**
+     * KVM memory port. Uses the default MasterPort behavior, but
+     * panics on timing accesses.
+     */
+    class KVMCpuPort : public MasterPort
+    {
+
+      public:
+        KVMCpuPort(const std::string &_name, BaseKvmCPU *_cpu)
+            : MasterPort(_name, _cpu)
+        { }
+
+      protected:
+        bool recvTimingResp(PacketPtr pkt)
+        {
+            panic("The KVM CPU doesn't expect recvTimingResp!\n");
+            return true;
+        }
+
+        void recvRetry()
+        {
+            panic("The KVM CPU doesn't expect recvRetry!\n");
+        }
+
+    };
+
     /** Port for data requests */
-    CpuPort dataPort;
+    KVMCpuPort dataPort;
 
     /** Unused dummy port for the instruction interface */
-    CpuPort instPort;
+    KVMCpuPort instPort;
 
     /** Pre-allocated MMIO memory request */
     Request mmio_req;