KVM: PPC: e500mc: Add support for single threaded vcpus on e6500 core
authorMihai Caraman <mihai.caraman@freescale.com>
Mon, 1 Sep 2014 09:01:58 +0000 (12:01 +0300)
committerAlexander Graf <agraf@suse.de>
Mon, 22 Sep 2014 08:11:35 +0000 (10:11 +0200)
commit188e267ce249b491dfbb77d881996dcb5610dc90
treec7d5c386562371f0e4dad2c3d885d9b2d58a3e6c
parent9333e6c4c15a4084dd5f4336cd4379afbf99e458
KVM: PPC: e500mc: Add support for single threaded vcpus on e6500 core

ePAPR represents hardware threads as cpu node properties in device tree.
So with existing QEMU, hardware threads are simply exposed as vcpus with
one hardware thread.

The e6500 core shares TLBs between hardware threads. Without tlb write
conditional instruction, the Linux kernel uses per core mechanisms to
protect against duplicate TLB entries.

The guest is unable to detect real siblings threads, so it can't use the
TLB protection mechanism. An alternative solution is to use the hypervisor
to allocate different lpids to guest's vcpus that runs simultaneous on real
siblings threads. On systems with two threads per core this patch halves
the size of the lpid pool that the allocator sees and use two lpids per VM.
Use even numbers to speedup vcpu lpid computation with consecutive lpids
per VM: vm1 will use lpids 2 and 3, vm2 lpids 4 and 5, and so on.

Signed-off-by: Mihai Caraman <mihai.caraman@freescale.com>
[agraf: fix spelling]
Signed-off-by: Alexander Graf <agraf@suse.de>
arch/powerpc/include/asm/kvm_booke.h
arch/powerpc/kvm/e500.h
arch/powerpc/kvm/e500_mmu_host.c
arch/powerpc/kvm/e500mc.c