[SerialICE] New patch to review for serialice: 10c41b5 Only log Raw action lines from Qemu session

Kyösti Mälkki (kyosti.malkki@gmail.com) gerrit at coreboot.org
Wed Mar 6 20:21:33 CET 2013


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/2597

-gerrit

commit 10c41b5ed7c5718821bde96903e4a97fd12cf241
Author: Kyösti Mälkki <kyosti.malkki at gmail.com>
Date:   Tue Mar 5 09:40:28 2013 +0200

    Only log Raw action lines from Qemu session
    
    The only lines a qemu session with SerialICE needs to write in the
    output are those produced with the core filters and marked with the
    flag Raw "R...". Everything else can be replayed from these.
    
    This is a principal change: the output of Qemu session is now completely
    raw and one must pass the logfile thru replayer to have simplified view.
    
    Change-Id: I6e4eebde41ca46072c545c02eabac848113bb5ee
    Signed-off-by: Kyösti Mälkki <kyosti.malkki at gmail.com>
---
 SerialICE/simba/core_io.lua    |  4 ++--
 SerialICE/simba/cpu.lua        |  4 +++-
 SerialICE/simba/hooks.lua      | 24 ++++++++++++------------
 SerialICE/simba/output.lua     | 37 +++++++++++++++++++++++++++++++------
 SerialICE/simba/replay.lua     |  9 +--------
 SerialICE/simba/serialice.lua  |  4 ++--
 SerialICE/simba/smbus_host.lua |  1 -
 7 files changed, 51 insertions(+), 32 deletions(-)

diff --git a/SerialICE/simba/core_io.lua b/SerialICE/simba/core_io.lua
index 0aa67fd..08ae42e 100644
--- a/SerialICE/simba/core_io.lua
+++ b/SerialICE/simba/core_io.lua
@@ -8,7 +8,6 @@ F_RANGE = 2
 function io_undefined(f, action)
 	action.to_hw = true
 	action.to_qemu = false
-	action.undefined = true
 	return true
 end
 
@@ -32,6 +31,7 @@ end
 
 filter_io_fallback = {
 	name = "IO",
+	raw = true,
 	pre = io_undefined,
 	post = io_post,
 	decode = F_FIXED,
@@ -45,7 +45,6 @@ filter_io_fallback = {
 function mem_undefined(f, action)
 	action.to_hw = true
 	action.to_qemu = false
-	action.undefined = true
 	return true
 end
 
@@ -69,6 +68,7 @@ end
 
 filter_mem_fallback = {
 	name = "MEM",
+	raw = true,
 	pre = mem_undefined,
 	post = mem_post,
 	decode = F_FIXED,
diff --git a/SerialICE/simba/cpu.lua b/SerialICE/simba/cpu.lua
index 6dad741..02839a9 100644
--- a/SerialICE/simba/cpu.lua
+++ b/SerialICE/simba/cpu.lua
@@ -72,6 +72,7 @@ end
 
 filter_cpumsr_fallback = {
 	name = "CPU MSR",
+	raw = true,
 	pre = cpumsr_pre,
 	post = cpumsr_post,
 }
@@ -96,6 +97,7 @@ end
 
 filter_cpuid_fallback = {
 	name = "CPUID",
+	raw = true,
 	pre = cpuid_pre,
 	post = cpuid_post,
 }
@@ -114,7 +116,7 @@ function multicore_post(f, action)
 	if not action.write and rin.eax == 0x01 then
 		rout.ebx = bit32.band(0xff00ffff, rout.ebx);
 		rout.ebx = bit32.bor(0x00010000, rout.ebx);
-		fake_action(f, action, 0)
+		return fake_action(f, action, 0)
 	end
 	return skip_filter(f, action)
 end
diff --git a/SerialICE/simba/hooks.lua b/SerialICE/simba/hooks.lua
index 01aea65..4a0d529 100644
--- a/SerialICE/simba/hooks.lua
+++ b/SerialICE/simba/hooks.lua
@@ -85,12 +85,16 @@ function walk_pre_hooks(list, action)
 		f = l.hook
 		if no_base_check or action.addr >= f.base and action.addr < f.base + f.size then
 			if f.enable and f.pre then
-				logged = f.pre(f, action)
+				if f.pre(f, action) then
+					if not f.raw then
+						action.logged_pre = f
+					end
+					logged = true
+				end
 			end
 		end
 		l = l.next
 	end
-
 	if prev_filter ~= f and not action.ignore then
 		prev_filter = f
 		new_parent_action()
@@ -118,15 +122,11 @@ function walk_post_hooks(list, action)
 		f = l.hook
 		if no_base_check or action.addr >= f.base and action.addr < f.base + f.size then
 			if f.enable and f.post then
-				if no_base_check then
-					-- cpuid or cpumsr
-					logged = f.post(f, action)
-				else
-					-- io or mem
-					if f.post(f, action) then
-						action.f = f
-						logged = f.hide and not log_everything
+				if f.post(f, action) then
+					if not f.raw then
+						action.logged_post = f
 					end
+					logged = false
 				end
 			end
 		end
@@ -218,9 +218,9 @@ function pre_action(action, dir_wr, addr, size, data)
 	action.my_id = 0
 
 	-- no filter, not filtered
-	action.f = nil
+	action.logged_pre = nil
+	action.logged_post = nil
 	action.ignore = false
-	action.undefined = false
 	action.faked = false
 	action.dropped = false
 	action.to_hw = false
diff --git a/SerialICE/simba/output.lua b/SerialICE/simba/output.lua
index 10977ea..889dcc1 100644
--- a/SerialICE/simba/output.lua
+++ b/SerialICE/simba/output.lua
@@ -12,7 +12,21 @@ end
 
 function printk(f, action, fmt, ...)
 	local str = ""
-	if action.undefined or action.f or action == cpu_action then
+
+	-- For Qemu runs only Raw actions are logged
+	if not replaying and not f.raw then
+		return
+	end
+
+	-- For replays, a post filter prevents further lines for the
+	-- same action from printing if it has property hide set.
+	if replaying and not log_everything then
+		if action.logged_post and action.logged_post.hide then
+			return
+		end
+	end
+
+	if f.raw then
 		str = str .. "R"
 	elseif action.info_only then
 		str = str .. "I"
@@ -29,7 +43,7 @@ function printk(f, action, fmt, ...)
 	else
 		str = str .. "."
 	end
-	if action.undefined then
+	if f.raw and not (action.logged_pre or action.logged_post) then
 		str = str .. "U"
 	elseif action.dropped then
 		str = str .. "D"
@@ -41,12 +55,23 @@ function printk(f, action, fmt, ...)
 
 	print_address(action.parent_id, action.my_id, str, action.cs, action.eip)
 
-	if action.f then
-		printf("%s,%s: ", f.name, action.f.name)
-		printf(fmt, ...)
-	else
+	if not replaying then
 		printf("%s: ", f.name)
 		printf(fmt, ...)
+	else
+		if not f.raw then
+			printf("%s: ", f.name)
+			printf(fmt, ...)
+		elseif action.logged_post then
+			printf("%s: ", action.logged_post.name)
+			printf(fmt, ...)
+		elseif action.logged_pre then
+			printf("%s: ", action.logged_pre.name)
+			printf(fmt, ...)
+		else
+			printf("%s: ", f.name)
+			printf(fmt, ...)
+		end
 	end
 end
 
diff --git a/SerialICE/simba/replay.lua b/SerialICE/simba/replay.lua
index 3ac0434..4632c05 100644
--- a/SerialICE/simba/replay.lua
+++ b/SerialICE/simba/replay.lua
@@ -1,5 +1,5 @@
 
-local verbose_log = false
+replaying = true
 
 function SerialICE_register_physical()
 end
@@ -176,8 +176,6 @@ function parse_headers()
 			found, _, board = string.find(line, "SerialICE: Mainboard...:%s+(.+)")
 			if found then
 				SerialICE_mainboard = board
-				io.write(line)
-				io.write("\n")
 			end
 		end
 		if string.find(line, "LUA script initialized.") then
@@ -267,11 +265,6 @@ function parse_file()
 end
 
 parse_headers()
-
 dofile("serialice.lua")
-
--- set logging
-log_everything = verbose_log
-
 parse_file()
 
diff --git a/SerialICE/simba/serialice.lua b/SerialICE/simba/serialice.lua
index 7cabf67..434556f 100644
--- a/SerialICE/simba/serialice.lua
+++ b/SerialICE/simba/serialice.lua
@@ -68,6 +68,8 @@ dofile("pc80.lua")
 dofile("superio.lua")
 dofile("mmio.lua")
 
+io.write("SerialICE: LUA script initialized.\n")
+
 function do_minimal_setup()
 	enable_hook(io_hooks, filter_io_fallback)
 	enable_hook(mem_hooks, filter_mem_fallback)
@@ -106,7 +108,5 @@ else
 	do_default_setup()
 end
 
-root_info("LUA script initialized.\n")
-
 return true
 
diff --git a/SerialICE/simba/smbus_host.lua b/SerialICE/simba/smbus_host.lua
index a407843..161bc42 100644
--- a/SerialICE/simba/smbus_host.lua
+++ b/SerialICE/simba/smbus_host.lua
@@ -186,7 +186,6 @@ local function dump_transaction(f, action)
 	end
 
 	if signal_in(f, SIG_TIMEOUT) then
-		action.undefined = true
 		dump = dump .. " (TIMEOUT) "
 	end
 



More information about the SerialICE mailing list