aboutsummaryrefslogtreecommitdiffstats
path: root/xen/common
diff options
context:
space:
mode:
Diffstat (limited to 'xen/common')
-rw-r--r--xen/common/kernel.c3
-rw-r--r--xen/common/keyhandler.c61
-rw-r--r--xen/common/perfc.c8
3 files changed, 42 insertions, 30 deletions
diff --git a/xen/common/kernel.c b/xen/common/kernel.c
index 344eae59c2..28eaae9b51 100644
--- a/xen/common/kernel.c
+++ b/xen/common/kernel.c
@@ -41,7 +41,7 @@ unsigned int opt_ser_baud = 9600; /* default baud for COM1 */
unsigned int opt_dom0_mem = 16000; /* default kbytes for DOM0 */
unsigned int opt_ne_base = 0; /* NE2k NICs cannot be probed */
unsigned char opt_ifname[10] = "eth0";
-int opt_noht=0, opt_noacpi=0;
+int opt_noht=0, opt_noacpi=0, opt_nosmp;
enum { OPT_IP, OPT_STR, OPT_UINT, OPT_BOOL };
static struct {
unsigned char *name;
@@ -55,6 +55,7 @@ static struct {
{ "ifname", OPT_STR, &opt_ifname },
{ "noht", OPT_BOOL, &opt_noht },
{ "noacpi", OPT_BOOL, &opt_noacpi },
+ { "nosmp", OPT_BOOL, &opt_nosmp },
{ NULL, 0, NULL }
};
diff --git a/xen/common/keyhandler.c b/xen/common/keyhandler.c
index e9f99fcf89..dde9e0ff10 100644
--- a/xen/common/keyhandler.c
+++ b/xen/common/keyhandler.c
@@ -17,18 +17,18 @@ void add_key_handler(u_char key, key_handler *handler, char *desc)
char *str;
if(key_table[key].handler != NULL)
- printk("Warning: overwriting handler for key 0x%x\n", key);
+ printk("Warning: overwriting handler for key 0x%x\n", key);
key_table[key].handler = handler;
str = key_table[key].desc;
for(i = 0; i < STR_MAX; i++) {
- if(*desc)
- *str++ = *desc++;
- else break;
+ if(*desc)
+ *str++ = *desc++;
+ else break;
}
if (i == STR_MAX)
- key_table[key].desc[STR_MAX-1] = '\0';
+ key_table[key].desc[STR_MAX-1] = '\0';
return;
}
@@ -39,21 +39,21 @@ key_handler *get_key_handler(u_char key)
}
-void show_handlers(u_char key, void *dev_id, struct pt_regs *regs)
+static void show_handlers(u_char key, void *dev_id, struct pt_regs *regs)
{
int i;
printk("'%c' pressed -> showing installed handlers\n", key);
for(i=0; i < KEY_MAX; i++)
- if(key_table[i].handler)
- printk(" key '%c' (ascii '%02x') => %s\n",
- (i<33 || i>126)?(' '):(i),i,
- key_table[i].desc);
+ if(key_table[i].handler)
+ printk(" key '%c' (ascii '%02x') => %s\n",
+ (i<33 || i>126)?(' '):(i),i,
+ key_table[i].desc);
return;
}
-void dump_registers(u_char key, void *dev_id, struct pt_regs *regs)
+static void dump_registers(u_char key, void *dev_id, struct pt_regs *regs)
{
extern void show_registers(struct pt_regs *regs);
@@ -62,13 +62,21 @@ void dump_registers(u_char key, void *dev_id, struct pt_regs *regs)
return;
}
-void halt_machine(u_char key, void *dev_id, struct pt_regs *regs)
+static void halt_machine(u_char key, void *dev_id, struct pt_regs *regs)
{
printk("'%c' pressed -> rebooting machine\n", key);
machine_restart(NULL);
return;
}
+static void kill_dom0(u_char key, void *dev_id, struct pt_regs *regs)
+{
+ printk("'%c' pressed -> gracefully rebooting machine\n", key);
+ kill_other_domain(0, 0);
+ return;
+}
+
+
/* XXX SMH: this is keir's fault */
static char *task_states[] =
{
@@ -90,16 +98,16 @@ void do_task_queues(u_char key, void *dev_id, struct pt_regs *regs)
p = &idle0_task;
do {
printk("Xen: DOM %d, CPU %d [has=%c], state = %s, "
- "hyp_events = %08x\n",
- p->domain, p->processor, p->has_cpu ? 'T':'F',
- task_states[p->state], p->hyp_events);
- s = p->shared_info;
- if(!is_idle_task(p)) {
- printk("Guest: events = %08lx, event_enable = %08lx\n",
- s->events, s->events_enable);
- printk("Notifying guest...\n");
- set_bit(_EVENT_DEBUG, &s->events);
- }
+ "hyp_events = %08x\n",
+ p->domain, p->processor, p->has_cpu ? 'T':'F',
+ task_states[p->state], p->hyp_events);
+ s = p->shared_info;
+ if(!is_idle_task(p)) {
+ printk("Guest: events = %08lx, event_enable = %08lx\n",
+ s->events, s->events_enable);
+ printk("Notifying guest...\n");
+ set_bit(_EVENT_DEBUG, &s->events);
+ }
} while ( (p = p->next_task) != &idle0_task );
read_unlock_irqrestore(&tasklist_lock, flags);
@@ -118,16 +126,17 @@ void initialize_keytable()
/* first initialize key handler table */
for(i = 0; i < KEY_MAX; i++)
- key_table[i].handler = (key_handler *)NULL;
-
+ key_table[i].handler = (key_handler *)NULL;
+
/* setup own handlers */
add_key_handler('a', dump_timerq, "dump ac_timer queues");
add_key_handler('d', dump_registers, "dump registers");
- add_key_handler('h', show_handlers, "show this message");
+ add_key_handler('h', show_handlers, "show this message");
add_key_handler('p', perfc_printall, "print performance counters");
add_key_handler('P', perfc_reset, "reset performance counters");
add_key_handler('q', do_task_queues, "dump task queues + guest state");
- add_key_handler('r', dump_runq, "dump run queue");
+ add_key_handler('r', dump_runq, "dump run queues");
+ add_key_handler('B', kill_dom0, "reboot machine gracefully");
add_key_handler('R', halt_machine, "reboot machine ungracefully");
return;
diff --git a/xen/common/perfc.c b/xen/common/perfc.c
index cc277a914a..704bef1d3b 100644
--- a/xen/common/perfc.c
+++ b/xen/common/perfc.c
@@ -47,18 +47,18 @@ void __perfc_print (unsigned long counter[], int offset)
return;
}
if (element_size == 0) { /* single counter */
- printf ("%10ld 0x%08lx %s\n", counter[0], counter[0],
+ printf ("%10lu 0x%08lx %s\n", counter[0], counter[0],
perfc_name[loop] + 2 + num);
} else if (cpus) { /* counter per CPU */
for (loop = 0; loop < smp_num_cpus; loop++) {
- printf ("%10ld 0x%08lx cpu[%02d] %s\n",
+ printf ("%10lu 0x%08lx cpu[%02d] %s\n",
counter[loop], counter[loop],
loop, perfc_name[loop]);
}
} else { /* show entire array */
for (loop = 0; loop < element_size; loop++) {
- printf ("%10ld 0x%08lx %s:%d\n",
+ printf ("%10lu 0x%08lx %s:%d\n",
counter[loop], counter[loop],
perfc_name[loop] + 2 + num, loop);
}
@@ -103,6 +103,8 @@ void perfc_printall (u_char key, void *dev_id, struct pt_regs *regs)
}
}
+ //perfc_reset( key, dev_id, regs );
+
return;
}