changeset 5cfad3486991 in /z/repo/gem5
details: http://repo.gem5.org/gem5?cmd=changeset;node=5cfad3486991
description:
        x86: Expose the raw hash map of MSRs

        This patch allows the KVM CPU module to initialize it's MSRs by
        enumerating the MSRs in the gem5 x86 implementation.

diffstat:

 src/arch/x86/regs/msr.cc |   7 ++-----
 src/arch/x86/regs/msr.hh |  23 +++++++++++++++++++++++
 2 files changed, 25 insertions(+), 5 deletions(-)

diffs (70 lines):

diff -r 81c0ae6ffb9e -r 5cfad3486991 src/arch/x86/regs/msr.cc
--- a/src/arch/x86/regs/msr.cc  Wed Sep 18 11:28:27 2013 +0200
+++ b/src/arch/x86/regs/msr.cc  Wed Sep 18 11:28:28 2013 +0200
@@ -29,13 +29,10 @@
  */
 
 #include "arch/x86/regs/msr.hh"
-#include "base/hashmap.hh"
 
 namespace X86ISA
 {
 
-typedef m5::hash_map<Addr, MiscRegIndex> MsrMap;
-
 typedef MsrMap::value_type MsrVal;
 
 const MsrMap::value_type msrMapData[] = {
@@ -146,12 +143,12 @@
 
 static const unsigned msrMapSize = sizeof(msrMapData) / sizeof(msrMapData[0]);
 
-static MsrMap msrMap(msrMapData, msrMapData + msrMapSize);
+const MsrMap msrMap(msrMapData, msrMapData + msrMapSize);
 
 bool
 msrAddrToIndex(MiscRegIndex &regNum, Addr addr)
 {
-    MsrMap::iterator it = msrMap.find(addr);
+    MsrMap::const_iterator it(msrMap.find(addr));
     if (it == msrMap.end()) {
         return false;
     } else {
diff -r 81c0ae6ffb9e -r 5cfad3486991 src/arch/x86/regs/msr.hh
--- a/src/arch/x86/regs/msr.hh  Wed Sep 18 11:28:27 2013 +0200
+++ b/src/arch/x86/regs/msr.hh  Wed Sep 18 11:28:28 2013 +0200
@@ -32,11 +32,34 @@
 #define __ARCH_X86_REG_MSR_HH__
 
 #include "arch/x86/regs/misc.hh"
+#include "base/hashmap.hh"
 #include "base/types.hh"
 
 namespace X86ISA
 {
 
+typedef m5::hash_map<Addr, MiscRegIndex> MsrMap;
+
+/**
+ * Map between MSR addresses and their corresponding misc registers.
+ *
+ * @note This map is usually only used when enumeration of supported
+ * MSRs is needed (e.g., in virtualized CPUs). Code that needs to
+ * look-up specific MSRs should use msrAddrToIndex().
+ */
+extern const MsrMap msrMap;
+
+/**
+ * Find and return the misc reg corresponding to an MSR address.
+ *
+ * Look for an MSR (addr) in #msrMap and return the
+ * corresponding misc reg in regNum. The value of regNum is undefined
+ * if the MSR was not found.
+ *
+ * @param regNum misc reg index (out).
+ * @param addr MSR address
+ * @return True if the MSR was found, false otherwise.
+ */
 bool msrAddrToIndex(MiscRegIndex &regNum, Addr addr);
 
 } // namespace X86ISA
_______________________________________________
gem5-dev mailing list
[email protected]
http://m5sim.org/mailman/listinfo/gem5-dev

Reply via email to