WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-changelog

[Xen-changelog] [xen-unstable] Reduce '0' debug key's global impact

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] [xen-unstable] Reduce '0' debug key's global impact
From: Xen patchbot-unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Thu, 06 May 2010 04:10:49 -0700
Delivery-date: Thu, 06 May 2010 04:16:59 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1273143595 -3600
# Node ID ccae861f52f7f25aa2ab404a6110831402845dac
# Parent  924f54145fda26df64bf6f57010793893b29866f
Reduce '0' debug key's global impact

On large systems, dumping state may cause time management to get
stalled for so long a period that it wouldn't recover. Therefore add
a tasklet-based alternative mechanism to handle Dom0 state dumps.

Signed-off-by: Jan Beulich <jbeulich@xxxxxxxxxx>
---
 xen/common/keyhandler.c |   51 ++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 51 insertions(+)

diff -r 924f54145fda -r ccae861f52f7 xen/common/keyhandler.c
--- a/xen/common/keyhandler.c   Thu May 06 11:52:22 2010 +0100
+++ b/xen/common/keyhandler.c   Thu May 06 11:59:55 2010 +0100
@@ -19,6 +19,7 @@
 
 static struct keyhandler *key_table[256];
 static unsigned char keypress_key;
+static bool_t alt_key_handling;
 
 char keyhandler_scratch[1024];
 
@@ -115,6 +116,26 @@ static struct keyhandler dump_registers_
     .desc = "dump registers"
 };
 
+static DECLARE_TASKLET(dump_dom0_tasklet, NULL, 0);
+
+static void dump_dom0_action(unsigned long arg)
+{
+    struct vcpu *v = (void *)arg;
+
+    for ( ; ; )
+    {
+        vcpu_show_execution_state(v);
+        if ( (v = v->next_in_list) == NULL )
+            break;
+        if ( softirq_pending(smp_processor_id()) )
+        {
+            dump_dom0_tasklet.data = (unsigned long)v;
+            tasklet_schedule_on_cpu(&dump_dom0_tasklet, v->processor);
+            break;
+        }
+    }
+}
+
 static void dump_dom0_registers(unsigned char key)
 {
     struct vcpu *v;
@@ -125,7 +146,17 @@ static void dump_dom0_registers(unsigned
     printk("'%c' pressed -> dumping Dom0's registers\n", key);
 
     for_each_vcpu ( dom0, v )
+    {
+        if ( alt_key_handling && softirq_pending(smp_processor_id()) )
+        {
+            tasklet_kill(&dump_dom0_tasklet);
+            tasklet_init(&dump_dom0_tasklet, dump_dom0_action,
+                         (unsigned long)v);
+            tasklet_schedule_on_cpu(&dump_dom0_tasklet, v->processor);
+            return;
+        }
         vcpu_show_execution_state(v);
+    }
 }
 
 static struct keyhandler dump_dom0_registers_keyhandler = {
@@ -425,8 +456,28 @@ static struct keyhandler do_debug_key_ke
     .desc = "trap to xendbg"
 };
 
+static void do_toggle_alt_key(unsigned char key, struct cpu_user_regs *regs)
+{
+    alt_key_handling = !alt_key_handling;
+    printk("'%c' pressed -> using %s key handling\n", key,
+           alt_key_handling ? "alternative" : "normal");
+}
+
+static struct keyhandler toggle_alt_keyhandler = {
+    .irq_callback = 1,
+    .u.irq_fn = do_toggle_alt_key,
+    .desc = "toggle alternative key handling"
+};
+
 void __init initialize_keytable(void)
 {
+    if ( num_present_cpus() > 16 )
+    {
+        alt_key_handling = 1;
+        printk(XENLOG_INFO "Defaulting to alternative key handling; "
+               "send 'A' to switch to normal mode.\n");
+    }
+    register_keyhandler('A', &toggle_alt_keyhandler);
     register_keyhandler('d', &dump_registers_keyhandler);
     register_keyhandler('h', &show_handlers_keyhandler);
     register_keyhandler('q', &dump_domains_keyhandler);

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] [xen-unstable] Reduce '0' debug key's global impact, Xen patchbot-unstable <=