void getdomaininfo(struct domain *d, struct xen_domctl_getdomaininfo *info) { struct vcpu *v; u64 cpu_time = 0; int flags = XEN_DOMINF_blocked; struct vcpu_runstate_info runstate; info->domain = d->domain_id; info->nr_online_vcpus = 0; info->ssidref = 0; /* * - domain is marked as blocked only if all its vcpus are blocked * - domain is marked as running if any of its vcpus is running */ for_each_vcpu ( d, v ) { vcpu_runstate_get(v, &runstate); cpu_time += runstate.time[RUNSTATE_running]; info->max_vcpu_id = v->vcpu_id; if ( !test_bit(_VPF_down, &v->pause_flags) ) { if ( !(v->pause_flags & VPF_blocked) ) flags &= ~XEN_DOMINF_blocked; if ( v->is_running ) flags |= XEN_DOMINF_running; info->nr_online_vcpus++; } }
static void getdomaininfo(struct domain *d, dom0_getdomaininfo_t *info) { struct vcpu *v; u64 cpu_time = 0; int flags = DOMFLAGS_BLOCKED; struct vcpu_runstate_info runstate; info->domain = d->domain_id; info->nr_online_vcpus = 0; /* * - domain is marked as blocked only if all its vcpus are blocked * - domain is marked as running if any of its vcpus is running */ for_each_vcpu ( d, v ) { vcpu_runstate_get(v, &runstate); cpu_time += runstate.time[RUNSTATE_running]; info->max_vcpu_id = v->vcpu_id; if ( !test_bit(_VCPUF_down, &v->vcpu_flags) ) { if ( !(v->vcpu_flags & VCPUF_blocked) ) flags &= ~DOMFLAGS_BLOCKED; if ( v->vcpu_flags & VCPUF_running ) flags |= DOMFLAGS_RUNNING; info->nr_online_vcpus++; } }
uint64_t get_cpu_idle_time(unsigned int cpu) { struct vcpu_runstate_info state = { 0 }; struct vcpu *v = idle_vcpu[cpu]; if ( cpu_online(cpu) && v ) vcpu_runstate_get(v, &state); return state.time[RUNSTATE_running]; }
uint64_t get_cpu_idle_time(unsigned int cpu) { struct vcpu_runstate_info state; struct vcpu *v; if ( (v = idle_vcpu[cpu]) == NULL ) return 0; vcpu_runstate_get(v, &state); return state.time[RUNSTATE_running]; }