Il 01/11/2013 04:21, Alexey Kardashevskiy ha scritto: > Normally CPUState::cpu_index is used to pick the right CPU for various > operations. However default consecutive numbering does not always work > for POWERPC. > > For example, on POWER7 (which supports 4 threads per core), > "-smp 8,threads=4" should create CPUs with indexes 0,1,2,3,4,5,6,7 and > "-smp 8,threads=1" should create CPUs with indexes 0,4,8,12,16,20,24,28. > > These indexes are reflected in /proc/device-tree/cpus/PowerPC,POWER7@XX > and used to call KVM VCPU's ioctls. In order to achieve this, > kvmppc_fixup_cpu() was introduced. Roughly speaking, it multiplies > cpu_index by the number of threads per core. > > This approach has disadvantages such as: > 1. NUMA configuration stays broken after the fixup; > 2. CPU-related commands from QEMU Monitor do not work properly as > the accept fixed CPU indexes and the user does not really know > what they are after fixup as the number of threads per core changes > between CPU versions and via QEMU command line. > > This introduces a new @cpu_dt_id field in the CPUPPCState struct which > is set from @cpu_index by default but can be fixed later to the value > which a hypervisor can accept. This also introduces two POWERPC-arch > specific functions: > 1. int ppc_get_vcpu_dt_id(CPUState *cs) - returns a device-tree ID > for a CPU; > 2. CPUState *ppc_get_vcpu_by_dt_id(int cpu_dt_id) - finds CPUState by > a device-tree CPU ID. > > This uses the new functions to: > 1. fix emulated XICS hypercall handlers as they receive fixed CPU indexes; > 2. fix XICS-KVM to enable in-kernel XICS on right CPU; > 3. compose correct device-tree. > > This removes @cpu_index fixup as @cpu_dt_id is used instead so QEMU monitor > can accept command-line CPU indexes again. > > Cc: Badari Pulavarty <pbad...@linux.vnet.ibm.com> > Cc: Paul Mackerras <pau...@samba.org> > Cc: David Gibson <da...@gibson.dropbear.id.au> > Cc: Benjamin Herrenschmidt <b...@kernel.crashing.org> > Cc: Paolo Bonzini <pbonz...@redhat.com> > Signed-off-by: Alexey Kardashevskiy <a...@ozlabs.ru> > --- > Changes: > v2: > * added PPC-specific ppc_get_vcpu_dt_id() and ppc_get_vcpu_by_dt_id() > * fixed kvm_arch_vcpu_id() to use ppc_get_vcpu_dt_id() > * fixed emulated XICS > * removed kvm_arch_vcpu_id() stub for non-KVM case
Not having non-PPC code in the patch is definitely a good sign! Acked-by: Paolo Bonzini <pbonz...@redhat.com>