diff -r 70aa62954e91 tools/xenstat/libxenstat/src/xenstat.c --- a/tools/xenstat/libxenstat/src/xenstat.c Fri Oct 14 00:42:34 2005 +++ b/tools/xenstat/libxenstat/src/xenstat.c Fri Oct 14 15:28:00 2005 @@ -53,6 +53,7 @@ unsigned long long cpu_ns; unsigned int num_vcpus; xenstat_vcpu *vcpus; /* Array of length num_vcpus */ + int32_t vcpu_to_cpu[MAX_VIRT_CPUS]; unsigned long long cur_mem; /* Current memory reservation */ unsigned long long max_mem; /* Total memory allowed */ unsigned int ssid; @@ -209,6 +210,7 @@ num_domains = 0; do { xenstat_domain *domain; + unsigned int j; new_domains = xi_get_domaininfolist(handle->xihandle, domaininfo, num_domains, @@ -231,6 +233,9 @@ domain->cpu_ns = domaininfo[i].cpu_time; domain->num_vcpus = domaininfo[i].n_vcpu; domain->vcpus = NULL; + for (j = 0; j < MAX_VIRT_CPUS; j++) { + domain->vcpu_to_cpu[j] = domaininfo[i].vcpu_to_cpu[j]; + } domain->cur_mem = ((unsigned long long)domaininfo[i].tot_pages) * handle->page_size; @@ -440,13 +445,18 @@ return 0; for (vcpu = 0; vcpu < node->domains[i].num_vcpus; vcpu++) { - /* FIXME: need to be using a more efficient mechanism*/ - long long vcpu_time; - vcpu_time = xi_get_vcpu_usage(node->handle->xihandle, + long long vcpu_time = 0; + + if (node->domains[i].vcpu_to_cpu[vcpu] >= 0) { + /* FIXME: need to be using a more efficient + mechanism*/ + vcpu_time = xi_get_vcpu_usage + (node->handle->xihandle, node->domains[i].id, vcpu); - if (vcpu_time < 0) - return 0; + if (vcpu_time < 0) + return 0; + } node->domains[i].vcpus[vcpu].ns = vcpu_time; } }