[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-devel] [PATCH] x86/traps: Misc tweaks to several printk()s



* Reword the printk() in do_guest_trap() to avoid
    "Unhandled general protection fault fault/trap"
* Drop irrelevant file/line references.
* Make some of the text more concise.
* A trap with an extable entry does not warrant an error level message.
* Use %ps for extable sources to provide extra context.
* Always log emulated rdmsr failures, like wrmsr failures

Sample new messages are:

(XEN) d0v0 attempted WRMSR 0x00000174: 0x000000000000e008 -> 0x0000000000000010

(XEN) Exception [#0, ec=0000] (divide error): do_extreme_debug+0x36/0x51 
ffff82d08018ca67 -> ffff82d08023cc4c

(XEN) #GP[0000]: do_general_protection+0x2fbf/0x34e0 ffff82d080193407 -> 
ffff82d08023cd8f
(XEN) d1v0 attempted RDMSR 0xdead0000
(XEN) d1v0 Unhandled exception [#13, ec=0000] general protection fault

Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
CC: Jan Beulich <JBeulich@xxxxxxxx>
---
 xen/arch/x86/traps.c |   24 +++++++++++++-----------
 1 file changed, 13 insertions(+), 11 deletions(-)

diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c
index 556c5be..2fef93d 100644
--- a/xen/arch/x86/traps.c
+++ b/xen/arch/x86/traps.c
@@ -521,8 +521,8 @@ static void do_guest_trap(
 
     if ( unlikely(null_trap_bounce(v, tb)) )
         gprintk(XENLOG_WARNING,
-                "Unhandled %s fault/trap [#%d, ec=%04x]\n",
-                trapstr(trapnr), trapnr, regs->error_code);
+                "Unhandled exception [#%d, ec=%04x] %s\n",
+                trapnr, regs->error_code, trapstr(trapnr));
 }
 
 static void instruction_done(
@@ -626,8 +626,9 @@ static void do_trap(struct cpu_user_regs *regs, int 
use_error_code)
 
     if ( likely((fixup = search_exception_table(regs->eip)) != 0) )
     {
-        dprintk(XENLOG_ERR, "Trap %d: %p -> %p\n",
-                trapnr, _p(regs->eip), _p(fixup));
+        printk(XENLOG_INFO "Exception [#%d, ec=%04x] (%s): %ps %p -> %p\n",
+               trapnr, use_error_code ? regs->error_code : 0, trapstr(trapnr),
+               _p(regs->eip), _p(regs->eip), _p(fixup));
         this_cpu(last_extable_addr) = regs->eip;
         regs->eip = fixup;
         return;
@@ -2677,9 +2678,9 @@ static int emulate_privileged_op(struct cpu_user_regs 
*regs)
 
             if ( (rdmsr_safe(regs->ecx, val) != 0) || (msr_content != val) )
         invalid:
-                gdprintk(XENLOG_WARNING, "Domain attempted WRMSR %p from "
-                        "0x%016"PRIx64" to 0x%016"PRIx64".\n",
-                        _p(regs->ecx), val, msr_content);
+                gprintk(XENLOG_WARNING,
+                        "attempted WRMSR 0x%08x: 0x%016"PRIx64" -> 
0x%016"PRIx64"\n",
+                        regs->_ecx, val, msr_content);
             break;
         }
         break;
@@ -2813,10 +2814,11 @@ static int emulate_privileged_op(struct cpu_user_regs 
*regs)
         case MSR_EFER:
  rdmsr_normal:
             /* Everyone can read the MSR space. */
-            /* gdprintk(XENLOG_WARNING,"Domain attempted RDMSR %p.\n",
-                        _p(regs->ecx));*/
             if ( rdmsr_safe(regs->ecx, val) )
+            {
+                gprintk(XENLOG_WARNING, "attempted RDMSR 0x%08x\n", 
regs->_ecx);
                 goto fail;
+            }
  rdmsr_writeback:
             regs->eax = (uint32_t)val;
             regs->edx = (uint32_t)(val >> 32);
@@ -3283,8 +3285,8 @@ void do_general_protection(struct cpu_user_regs *regs)
 
     if ( likely((fixup = search_exception_table(regs->eip)) != 0) )
     {
-        dprintk(XENLOG_INFO, "GPF (%04x): %p -> %p\n",
-                regs->error_code, _p(regs->eip), _p(fixup));
+        printk(XENLOG_INFO "#GP[%04x]: %ps %p -> %p\n",
+               regs->error_code, _p(regs->eip), _p(regs->eip) , _p(fixup));
         this_cpu(last_extable_addr) = regs->eip;
         regs->eip = fixup;
         return;
-- 
1.7.10.4


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.