[SerialICE] New patch to review for serialice: 0acf1bb SerialICE: Separate RDMSR and WRMSR

Kyösti Mälkki (kyosti.malkki@gmail.com) gerrit at coreboot.org
Mon Aug 20 23:03:51 CEST 2012


Kyösti Mälkki (kyosti.malkki at gmail.com) just uploaded a new patch set to gerrit, which you can find at http://review.coreboot.org/1465

-gerrit

commit 0acf1bbe3acb803f2718a5335e53c6df22b6b180
Author: Kyösti Mälkki <kyosti.malkki at gmail.com>
Date:   Sun Aug 19 13:27:18 2012 +0300

    SerialICE: Separate RDMSR and WRMSR
    
    Use of the flags parameter looked ugly and obscure to me.
    
    Change-Id: I1da5757187a8a2b808288d5f09466457d10aa8e9
    Signed-off-by: Kyösti Mälkki <kyosti.malkki at gmail.com>
---
 qemu-0.15.x/serialice-lua.c | 65 ++++++++++++++++++++++++++++++++-------------
 qemu-0.15.x/serialice.c     |  8 +++---
 qemu-0.15.x/serialice.h     |  9 +++----
 3 files changed, 55 insertions(+), 27 deletions(-)

diff --git a/qemu-0.15.x/serialice-lua.c b/qemu-0.15.x/serialice-lua.c
index 417510b..eecb866 100644
--- a/qemu-0.15.x/serialice-lua.c
+++ b/qemu-0.15.x/serialice-lua.c
@@ -350,26 +350,44 @@ int serialice_memory_write_filter(uint32_t addr, int size,
     return ret;
 }
 
-
-int serialice_msr_filter(int flags, uint32_t addr, uint32_t * hi,
-                                uint32_t * lo)
+int serialice_wrmsr_filter(uint32_t addr, uint32_t * hi, uint32_t * lo)
 {
     int ret, result;
 
-    if (flags & FILTER_WRITE) {
-        lua_getglobal(L, "SerialICE_msr_write_filter");
-    } else {
-        lua_getglobal(L, "SerialICE_msr_read_filter");
+    lua_getglobal(L, "SerialICE_msr_write_filter");
+    lua_pushinteger(L, addr);   // port
+    lua_pushinteger(L, *hi);    // high
+    lua_pushinteger(L, *lo);    // low
+    result = lua_pcall(L, 3, 3, 0);
+    if (result) {
+        fprintf(stderr,
+                "Failed to run function SerialICE_msr_write_filter: %s\n",
+                lua_tostring(L, -1));
+        exit(1);
     }
+    ret = lua_toboolean(L, -3);
+    if (ret) {
+        *hi = lua_tointeger(L, -1);
+        *lo = lua_tointeger(L, -2);
+    }
+    lua_pop(L, 3);
+
+    return ret;
+}
+
+int serialice_rdmsr_filter(uint32_t addr, uint32_t * hi, uint32_t * lo)
+{
+    int ret, result;
 
+    lua_getglobal(L, "SerialICE_msr_read_filter");
     lua_pushinteger(L, addr);   // port
     lua_pushinteger(L, *hi);    // high
     lua_pushinteger(L, *lo);    // low
     result = lua_pcall(L, 3, 3, 0);
     if (result) {
         fprintf(stderr,
-                "Failed to run function SerialICE_msr_%s_filter: %s\n",
-                (flags & FILTER_WRITE) ? "write" : "read", lua_tostring(L, -1));
+                "Failed to run function SerialICE_msr_read_filter: %s\n",
+                lua_tostring(L, -1));
         exit(1);
     }
     ret = lua_toboolean(L, -3);
@@ -446,25 +464,38 @@ void serialice_log(int flags, uint32_t data, uint32_t addr, int size)
     }
 }
 
-void serialice_msr_log(int flags, uint32_t addr, uint32_t hi,
+void serialice_wrmsr_log(uint32_t addr, uint32_t hi,
                               uint32_t lo, int filtered)
 {
     int result;
 
-    if (flags & LOG_WRITE) {
-        lua_getglobal(L, "SerialICE_msr_write_log");
-    } else {                    // if (!(flags & LOG_WRITE))
-        lua_getglobal(L, "SerialICE_msr_read_log");
+    lua_getglobal(L, "SerialICE_msr_write_log");
+    lua_pushinteger(L, addr);   // addr/port
+    lua_pushinteger(L, hi);     // datasize
+    lua_pushinteger(L, lo);     // data
+    lua_pushboolean(L, filtered);       // data
+    result = lua_pcall(L, 4, 0, 0);
+    if (result) {
+        fprintf(stderr, "Failed to run function SerialICE_msr_write_log: %s\n",
+                lua_tostring(L, -1));
+        exit(1);
     }
+}
+
+void serialice_rdmsr_log(uint32_t addr, uint32_t hi,
+                              uint32_t lo, int filtered)
+{
+    int result;
 
+    lua_getglobal(L, "SerialICE_msr_read_log");
     lua_pushinteger(L, addr);   // addr/port
     lua_pushinteger(L, hi);     // datasize
     lua_pushinteger(L, lo);     // data
     lua_pushboolean(L, filtered);       // data
     result = lua_pcall(L, 4, 0, 0);
     if (result) {
-        fprintf(stderr, "Failed to run function SerialICE_msr_%s_log: %s\n",
-                (flags & LOG_WRITE) ? "write" : "read", lua_tostring(L, -1));
+        fprintf(stderr, "Failed to run function SerialICE_msr_read_log: %s\n",
+                lua_tostring(L, -1));
         exit(1);
     }
 }
@@ -490,5 +521,3 @@ void serialice_cpuid_log(uint32_t eax, uint32_t ecx, cpuid_regs_t res,
         exit(1);
     }
 }
-
-
diff --git a/qemu-0.15.x/serialice.c b/qemu-0.15.x/serialice.c
index aaf69b0..32dc0ca 100644
--- a/qemu-0.15.x/serialice.c
+++ b/qemu-0.15.x/serialice.c
@@ -111,7 +111,7 @@ uint64_t serialice_rdmsr(uint32_t addr, uint32_t key)
     uint64_t ret;
     int filtered;
 
-    filtered = serialice_msr_filter(FILTER_READ, addr, &hi, &lo);
+    filtered = serialice_rdmsr_filter(addr, &hi, &lo);
     if (!filtered) {
         serialice_rdmsr_wrapper(addr, key, &hi, &lo);
     }
@@ -120,7 +120,7 @@ uint64_t serialice_rdmsr(uint32_t addr, uint32_t key)
     ret <<= 32;
     ret |= lo;
 
-    serialice_msr_log(LOG_READ, addr, hi, lo, filtered);
+    serialice_rdmsr_log(addr, hi, lo, filtered);
 
     return ret;
 }
@@ -133,13 +133,13 @@ void serialice_wrmsr(uint64_t data, uint32_t addr, uint32_t key)
     hi = (data >> 32);
     lo = (data & 0xffffffff);
 
-    filtered = serialice_msr_filter(FILTER_WRITE, addr, &hi, &lo);
+    filtered = serialice_wrmsr_filter(addr, &hi, &lo);
 
     if (!filtered) {
         serialice_wrmsr_wrapper(addr, key, hi, lo);
     }
 
-    serialice_msr_log(LOG_WRITE, addr, hi, lo, filtered);
+    serialice_wrmsr_log(addr, hi, lo, filtered);
 }
 
 cpuid_regs_t serialice_cpuid(uint32_t eax, uint32_t ecx)
diff --git a/qemu-0.15.x/serialice.h b/qemu-0.15.x/serialice.h
index e9558f8..4a64284 100644
--- a/qemu-0.15.x/serialice.h
+++ b/qemu-0.15.x/serialice.h
@@ -38,9 +38,6 @@
 #define WRITE_TO_QEMU		(1 << 0)
 #define WRITE_TO_SERIALICE	(1 << 1)
 
-#define FILTER_READ	0
-#define FILTER_WRITE	1
-
 #define LOG_IO		0
 #define LOG_MEMORY	1
 #define LOG_READ	0
@@ -95,11 +92,13 @@ int serialice_io_read_filter(uint32_t * data, uint16_t port, int size);
 int serialice_io_write_filter(uint32_t * data, uint16_t port, int size);
 int serialice_memory_read_filter(uint32_t addr, uint32_t * data, int size);
 int serialice_memory_write_filter(uint32_t addr, int size, uint32_t * data);
-int serialice_msr_filter(int flags, uint32_t addr, uint32_t * hi, uint32_t * lo);
 int serialice_cpuid_filter(uint32_t eax, uint32_t ecx, cpuid_regs_t * regs);
+int serialice_rdmsr_filter(uint32_t addr, uint32_t * hi, uint32_t * lo);
+int serialice_wrmsr_filter(uint32_t addr, uint32_t * hi, uint32_t * lo);
 
 void serialice_log(int flags, uint32_t data, uint32_t addr, int size);
-void serialice_msr_log(int flags, uint32_t addr, uint32_t hi, uint32_t lo, int filtered);
+void serialice_rdmsr_log(uint32_t addr, uint32_t hi, uint32_t lo, int filtered);
+void serialice_wrmsr_log(uint32_t addr, uint32_t hi, uint32_t lo, int filtered);
 void serialice_cpuid_log(uint32_t eax, uint32_t ecx, cpuid_regs_t res, int filtered);
 
 #endif



More information about the SerialICE mailing list