On 11/04/2013 09:00 PM, Paolo Bonzini wrote: > 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>
Heh. Mr. Graf has objections against v3 of this patch in another thread :) -- Alexey