linux/arch/powerpc/kvm
Paul Mackerras f74f2e2e26 KVM: PPC: Book3S HV: Don't dynamically split core when already split
In static micro-threading modes, the dynamic micro-threading code
is supposed to be disabled, because subcores can't make independent
decisions about what micro-threading mode to put the core in - there is
only one micro-threading mode for the whole core.  The code that
implements dynamic micro-threading checks for this, except that the
check was missed in one case.  This means that it is possible for a
subcore in static 2-way micro-threading mode to try to put the core
into 4-way micro-threading mode, which usually leads to stuck CPUs,
spinlock lockups, and other stalls in the host.

The problem was in the can_split_piggybacked_subcores() function, which
should always return false if the system is in a static micro-threading
mode.  This fixes the problem by making can_split_piggybacked_subcores()
use subcore_config_ok() for its checks, as subcore_config_ok() includes
the necessary check for the static micro-threading modes.

Credit to Gautham Shenoy for working out that the reason for the hangs
and stalls we were seeing was that we were trying to do dynamic 4-way
micro-threading while we were in static 2-way mode.

Fixes: b4deba5c41
Cc: vger@stable.kernel.org # v4.3
Signed-off-by: Paul Mackerras <paulus@samba.org>
2015-11-06 16:02:59 +11:00
..
book3s_32_mmu_host.c KVM: PPC: Fix warnings from sparse 2015-08-22 11:16:16 +02:00
book3s_32_mmu.c arch: powerpc: kvm: book3s_32_mmu.c: Remove unused function 2014-12-17 13:12:25 +01:00
book3s_32_sr.S
book3s_64_mmu_host.c KVM: PPC: Fix warnings from sparse 2015-08-22 11:16:16 +02:00
book3s_64_mmu_hv.c KVM: PPC: Book3S HV: Don't fall back to smaller HPT size in allocation ioctl 2015-10-21 16:24:57 +11:00
book3s_64_mmu.c KVM: PPC: Disable NX for old magic page using guests 2014-05-30 14:26:24 +02:00
book3s_64_slb.S KVM: PPC: Book3S PR: Rework SLB switching code 2014-05-30 14:26:30 +02:00
book3s_64_vio_hv.c KVM: PPC: Book3S: Introduce hypervisor call H_GET_TCE 2014-03-26 23:34:27 +11:00
book3s_64_vio.c
book3s_emulate.c KVM: PPC: Fix warnings from sparse 2015-08-22 11:16:16 +02:00
book3s_exports.c KVM: PPC: Make shared struct aka magic page guest endian 2014-05-30 14:26:21 +02:00
book3s_hv_builtin.c KVM: PPC: Book3S HV: Implement dynamic micro-threading on POWER8 2015-08-22 11:16:17 +02:00
book3s_hv_interrupts.S powerpc/kvm: Create proper names for the kvm_host_state PMU fields 2014-12-29 15:45:55 +11:00
book3s_hv_ras.c powerpc/book3s: Fix flush_tlb cpu_spec hook to take a generic argument. 2015-03-17 07:52:48 +11:00
book3s_hv_rm_mmu.c KVM: PPC: Book3S HV: Make H_REMOVE return correct HPTE value for absent HPTEs 2015-10-21 16:25:06 +11:00
book3s_hv_rm_xics.c KVM: PPC: Book3S HV: Make use of unused threads when running guests 2015-08-22 11:16:17 +02:00
book3s_hv_rmhandlers.S KVM: PPC: Book3S HV: Synthesize segment fault if SLB lookup fails 2015-11-06 15:40:42 +11:00
book3s_hv.c KVM: PPC: Book3S HV: Don't dynamically split core when already split 2015-11-06 16:02:59 +11:00
book3s_interrupts.S KVM: PPC: Book3S PR: Fix ABIv2 on LE 2014-07-28 15:22:15 +02:00
book3s_mmu_hpte.c
book3s_paired_singles.c KVM: PPC: Fix warnings from sparse 2015-08-22 11:16:16 +02:00
book3s_pr_papr.c kvmppc: Implement H_LOGICAL_CI_{LOAD,STORE} in KVM 2015-04-21 15:21:28 +02:00
book3s_pr.c KVM: add "new" argument to kvm_arch_commit_memory_region 2015-05-28 10:42:58 +02:00
book3s_rmhandlers.S KVM: PPC: Book3S PR: Fix ABIv2 on LE 2014-07-28 15:22:15 +02:00
book3s_rtas.c KVM: PPC: RTAS: Do byte swaps explicitly 2014-07-07 23:17:20 +02:00
book3s_segment.S KVM: PPC: Book3S: correct width in XER handling 2015-08-22 11:16:19 +02:00
book3s_xics.c KVM: PPC: Book3S: Fix typo in top comment about locking 2015-09-04 07:28:05 +10:00
book3s_xics.h KVM: PPC: Book3S HV: Add ICP real mode counters 2015-04-21 15:21:30 +02:00
book3s.c KVM: PPC: Book3S: Take the kvm->srcu lock in kvmppc_h_logical_ci_load/store() 2015-09-21 09:05:15 +10:00
book3s.h kvm: Fix page ageing bugs 2014-09-24 14:07:58 +02:00
booke_emulate.c KVM: PPC: BOOKE: Emulate debug registers and exception 2014-09-22 10:11:33 +02:00
booke_interrupts.S KVM: PPC: Remove 440 support 2014-07-28 15:23:15 +02:00
booke.c KVM: add halt_attempted_poll to VCPU stats 2015-09-16 12:17:00 +02:00
booke.h KVM: PPC: Book3e: Add AltiVec support 2014-09-22 10:11:32 +02:00
bookehv_interrupts.S powerpc/kvm: common sw breakpoint instr across ppc 2014-09-22 10:11:36 +02:00
e500_emulate.c KVM: PPC: e500: Emulate TMCFG0 TMRN register 2015-10-15 15:58:16 +11:00
e500_mmu_host.c KVM: PPC: e500: fix couple of shift operations on 64 bits 2015-10-15 15:59:19 +11:00
e500_mmu_host.h
e500_mmu.c KVM: PPC: fix suspicious use of conditional operator 2015-08-22 11:16:16 +02:00
e500.c KVM: PPC: e500: fix handling local_sid_lookup result 2015-10-15 15:58:16 +11:00
e500.h KVM: PPC: e500mc: Add support for single threaded vcpus on e6500 core 2014-09-22 10:11:35 +02:00
e500mc.c powerpc: Replace __get_cpu_var uses 2014-11-03 12:12:32 +11:00
emulate_loadstore.c KVM: PPC: Pass enum to kvmppc_get_last_inst 2014-09-22 10:11:36 +02:00
emulate.c KVM: PPC: Pass enum to kvmppc_get_last_inst 2014-09-22 10:11:36 +02:00
fpu.S
irq.h
Kconfig KVM: PPC: Remove PPC970 from KVM_BOOK3S_64_HV text in Kconfig 2015-08-22 11:16:16 +02:00
Makefile Here are the PPC and ARM changes for KVM, which I separated because 2014-08-07 11:35:30 -07:00
mpic.c kvm/ppc/mpic: drop unused IRQ_testbit 2015-04-08 10:46:58 +02:00
powerpc.c KVM: PPC: Implement extension to report number of memslots 2015-10-21 16:31:46 +11:00
timing.c KVM: PPC: Remove DCR handling 2014-07-28 19:29:15 +02:00
timing.h KVM: PPC: Remove DCR handling 2014-07-28 19:29:15 +02:00
trace_book3s.h KVM: PPC: Book3S HV: Tracepoints for KVM HV guest interactions 2014-12-17 13:29:27 +01:00
trace_booke.h KVM: PPC: BookE: Improve irq inject tracepoint 2014-12-15 13:27:23 +01:00
trace_hv.h KVM: PPC: Book3S HV: Tracepoints for KVM HV guest interactions 2014-12-17 13:29:27 +01:00
trace_pr.h KVM: PPC: Book3S HV: Tracepoints for KVM HV guest interactions 2014-12-17 13:29:27 +01:00
trace.h