diff options
Diffstat (limited to 'xen/common')
-rw-r--r-- | xen/common/kernel.c | 3 | ||||
-rw-r--r-- | xen/common/keyhandler.c | 61 | ||||
-rw-r--r-- | xen/common/perfc.c | 8 |
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; } |