[Libvir] [PATCH] an irregular value is set as 'CPU Affinity' by virsh vcpupin

Daniel P. Berrange berrange at redhat.com
Wed Jan 9 21:09:00 UTC 2008


On Wed, Jan 09, 2008 at 04:02:05AM +0000, Daniel P. Berrange wrote:
> On Tue, Jan 08, 2008 at 06:42:40PM +0900, Saori Fukuta wrote:
> > Hi,
> > 
> > There is a difference between 'CPU Affinity' of 'virsh vcpuinfo' and
> > 'CPU Affinity' of 'xm vcpu-list' when I set the vcpu affinity by 
> > 'virsh vcpupin'. i.e. 'xm vcpu-list' shows wrong value.
> > But there is no difference between them when I set by 'xm vcpu-pin'.
> > 
> >    (a) set by 'virsh vcpupin'
> >    # virsh vcpupin guest_dom 0 1
> >    # virsh vcpuinfo guest_dom
> >    VCPU:           0
> >    CPU:            1
> >    State:          blocked
> >    CPU time:       17.1s
> >    CPU Affinity:   -y------
> > 
> >    # xm vcpu-list guest_dom
> >    Name                 ID VCPUs   CPU State   Time(s) CPU Affinity
> >    guest_dom            13     0     1   -b-      17.1 any cpu
> > 
> >    (b) set by 'xm vcpu-pin'
> >    # xm vcpu-pin guest_dom 0 0
> >    # virsh vcpuinfo guest_dom
> >    VCPU:           0
> >    CPU:            0
> >    State:          blocked
> >    CPU time:       17.1s
> >    CPU Affinity:   y-------
> > 
> >    # xm vcpu-list guest_dom
> >    Name                 ID VCPUs   CPU State   Time(s) CPU Affinity
> >    guest_dom            13     0     0   -b-      17.1 0
> > 
> > I guess that the allocated memory to cpumap must be 8-byte for Xen 
> > because "xc_vcpu_setaffinity at libxc/xc_domain.c" is using uint64_t 
> > as cpumap. But the libvirt is allocating only maplen size for cpumap.
> >     virsh +--- cpumaplen  ---+
> >            (more than 1-byte)
> >     xen   +----------------- 8-byte -----------------+
> >                            (uint64_t)
> > 
> > Then, an irregular value is set to the buffer that is more than the
> > number of physical CPU, because libvirt initialize maplen size only
> > (i.e. not initialize 8-byte buffer).
> 
> Ok I understand what's going on now - Xen expects the CPU map to be
> exactly 8 bytes long, but libvirt only requires that it be large
> enough to hold the desired mapping. So the map passed in by the
> libvirt caller may be too small so the HV ends up reading garbage.
> This patch looks good to me.

I've tested and confirmed this is working as described, so have committed
the patch.

Dan.
-- 
|=- Red Hat, Engineering, Emerging Technologies, Boston.  +1 978 392 2496 -=|
|=-           Perl modules: http://search.cpan.org/~danberr/              -=|
|=-               Projects: http://freshmeat.net/~danielpb/               -=|
|=-  GnuPG: 7D3B9505   F3C9 553F A1DA 4AC2 5648 23C1 B3DF F742 7D3B 9505  -=| 




More information about the libvir-list mailing list