# HG changeset patch
# User kfraser@xxxxxxxxxxxxxxxxxxxxx
# Date 1173468892 0
# Node ID 83756471416f861ddd70a3de0ab187ac1d5c2b17
# Parent 188bab059272ce400bf8e858b4fb8d207655ea7c
xen: Debug 'q' key prints per-vcpu periodic timer info.
Do not enable periodic timer by default for HVM guests.
Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx>
---
xen/arch/x86/domain.c | 3 +++
xen/common/domain.c | 3 ---
xen/common/keyhandler.c | 32 ++++++++++++++++++++++++--------
3 files changed, 27 insertions(+), 11 deletions(-)
diff -r 188bab059272 -r 83756471416f xen/arch/x86/domain.c
--- a/xen/arch/x86/domain.c Fri Mar 09 19:33:43 2007 +0000
+++ b/xen/arch/x86/domain.c Fri Mar 09 19:34:52 2007 +0000
@@ -350,6 +350,9 @@ int vcpu_initialise(struct vcpu *v)
}
else
{
+ /* PV guests by default have a 100Hz ticker. */
+ v->periodic_period = MILLISECS(10);
+
/* PV guests get an emulated PIT too for video BIOSes to use. */
if ( !is_idle_domain(d) && (v->vcpu_id == 0) )
pit_init(v, cpu_khz);
diff -r 188bab059272 -r 83756471416f xen/common/domain.c
--- a/xen/common/domain.c Fri Mar 09 19:33:43 2007 +0000
+++ b/xen/common/domain.c Fri Mar 09 19:34:52 2007 +0000
@@ -102,9 +102,6 @@ struct vcpu *alloc_vcpu(
v->runstate.state = is_idle_vcpu(v) ? RUNSTATE_running : RUNSTATE_offline;
v->runstate.state_entry_time = NOW();
- /* VCPUs by default have a 100Hz ticker. */
- v->periodic_period = MILLISECS(10);
-
if ( (vcpu_id != 0) && !is_idle_domain(d) )
set_bit(_VCPUF_down, &v->vcpu_flags);
diff -r 188bab059272 -r 83756471416f xen/common/keyhandler.c
--- a/xen/common/keyhandler.c Fri Mar 09 19:33:43 2007 +0000
+++ b/xen/common/keyhandler.c Fri Mar 09 19:34:52 2007 +0000
@@ -135,12 +135,25 @@ static void cpuset_print(char *set, int
*set++ = '\0';
}
+static void periodic_timer_print(char *str, int size, uint64_t period)
+{
+ if ( period == 0 )
+ {
+ strlcpy(str, "No periodic timer", size);
+ return;
+ }
+
+ snprintf(str, size,
+ "%u Hz periodic timer (period %u ms)",
+ 1000000000/(int)period, (int)period/1000000);
+}
+
static void dump_domains(unsigned char key)
{
struct domain *d;
struct vcpu *v;
s_time_t now = NOW();
- char cpuset[100];
+ char tmpstr[100];
printk("'%c' pressed -> dumping domain info (now=0x%X:%08X)\n", key,
(u32)(now>>32), (u32)now);
@@ -150,11 +163,11 @@ static void dump_domains(unsigned char k
for_each_domain ( d )
{
printk("General information for domain %u:\n", d->domain_id);
- cpuset_print(cpuset, sizeof(cpuset), d->domain_dirty_cpumask);
+ cpuset_print(tmpstr, sizeof(tmpstr), d->domain_dirty_cpumask);
printk(" flags=%lx refcnt=%d nr_pages=%d xenheap_pages=%d "
"dirty_cpus=%s\n",
d->domain_flags, atomic_read(&d->refcnt),
- d->tot_pages, d->xenheap_pages, cpuset);
+ d->tot_pages, d->xenheap_pages, tmpstr);
printk(" handle=%02x%02x%02x%02x-%02x%02x-%02x%02x-"
"%02x%02x-%02x%02x%02x%02x%02x%02x vm_assist=%08lx\n",
d->handle[ 0], d->handle[ 1], d->handle[ 2], d->handle[ 3],
@@ -179,18 +192,21 @@ static void dump_domains(unsigned char k
v->vcpu_flags,
vcpu_info(v, evtchn_upcall_pending),
vcpu_info(v, evtchn_upcall_mask));
- cpuset_print(cpuset, sizeof(cpuset), v->vcpu_dirty_cpumask);
- printk("dirty_cpus=%s ", cpuset);
- cpuset_print(cpuset, sizeof(cpuset), v->cpu_affinity);
- printk("cpu_affinity=%s\n", cpuset);
+ cpuset_print(tmpstr, sizeof(tmpstr), v->vcpu_dirty_cpumask);
+ printk("dirty_cpus=%s ", tmpstr);
+ cpuset_print(tmpstr, sizeof(tmpstr), v->cpu_affinity);
+ printk("cpu_affinity=%s\n", tmpstr);
arch_dump_vcpu_info(v);
+ periodic_timer_print(tmpstr, sizeof(tmpstr), v->periodic_period);
+ printk(" %s\n", tmpstr);
printk(" Notifying guest (virq %d, port %d, stat %d/%d/%d)\n",
VIRQ_DEBUG, v->virq_to_evtchn[VIRQ_DEBUG],
test_bit(v->virq_to_evtchn[VIRQ_DEBUG],
shared_info_addr(d, evtchn_pending)),
test_bit(v->virq_to_evtchn[VIRQ_DEBUG],
shared_info_addr(d, evtchn_mask)),
-
test_bit(v->virq_to_evtchn[VIRQ_DEBUG]/BITS_PER_GUEST_LONG(d),
+ test_bit(v->virq_to_evtchn[VIRQ_DEBUG] /
+ BITS_PER_GUEST_LONG(d),
vcpu_info_addr(v, evtchn_pending_sel)));
send_guest_vcpu_virq(v, VIRQ_DEBUG);
}
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|