
In the virXen_getvcpusinfo() function of xen_internal.c source file, the vcpu number stored in the virVcpuInfo structure is the xen domain id instead of the vcpu id. Here the patch of the correction. --- libvirt-0.1.7/src/xen_internal.c 2006-09-29 10:18:17.000000000 +0200 +++ libvirt-0.1.8/src/xen_internal.c 2006-10-12 11:29:40.000000000 +0200 @@ -1012,7 +1012,7 @@ ret = xenHypervisorDoV2Dom(handle, &op); if (ret < 0) return(-1); - ipt->number = id; + ipt->number = vcpu; if (op.u.getvcpuinfo.online) { if (op.u.getvcpuinfo.running) ipt->state = VIR_VCPU_RUNNING; if (op.u.getvcpuinfo.blocked) ipt->state = VIR_VCPU_BLOCKED; @@ -1054,7 +1054,7 @@ ret = xenHypervisorDoV1Op(handle, &op); if (ret < 0) return(-1); - ipt->number = id; + ipt->number = vcpu; if (op.u.getvcpuinfo.online) { if (op.u.getvcpuinfo.running) ipt->state = VIR_VCPU_RUNNING; if (op.u.getvcpuinfo.blocked) ipt->state = VIR_VCPU_BLOCKED; @@ -1078,7 +1078,7 @@ ret = xenHypervisorDoV0Op(handle, &op); if (ret < 0) return(-1); - ipt->number = id; + ipt->number = vcpu; if (op.u.getvcpuinfo.online) { if (op.u.getvcpuinfo.running) ipt->state = VIR_VCPU_RUNNING; if (op.u.getvcpuinfo.blocked) ipt->state = VIR_VCPU_BLOCKED;