OpenCloudOS-Kernel/arch/powerpc/kvm
Paul Mackerras e3bbbbfa13 KVM: PPC: Book3S HV: Consolidate code that checks reason for wake from nap
Currently in book3s_hv_rmhandlers.S we have three places where we
have woken up from nap mode and we check the reason field in SRR1
to see what event woke us up.  This consolidates them into a new
function, kvmppc_check_wake_reason.  It looks at the wake reason
field in SRR1, and if it indicates that an external interrupt caused
the wakeup, calls kvmppc_read_intr to check what sort of interrupt
it was.

This also consolidates the two places where we synthesize an external
interrupt (0x500 vector) for the guest.  Now, if the guest exit code
finds that there was an external interrupt which has been handled
(i.e. it was an IPI indicating that there is now an interrupt pending
for the guest), it jumps to deliver_guest_interrupt, which is in the
last part of the guest entry code, where we synthesize guest external
and decrementer interrupts.  That code has been streamlined a little
and now clears LPCR[MER] when appropriate as well as setting it.

The extra clearing of any pending IPI on a secondary, offline CPU
thread before going back to nap mode has been removed.  It is no longer
necessary now that we have code to read and acknowledge IPIs in the
guest exit path.

This fixes a minor bug in the H_CEDE real-mode handling - previously,
if we found that other threads were already exiting the guest when we
were about to go to nap mode, we would branch to the cede wakeup path
and end up looking in SRR1 for a wakeup reason.  Now we branch to a
point after we have checked the wakeup reason.

This also fixes a minor bug in kvmppc_read_intr - previously it could
return 0xff rather than 1, in the case where we find that a host IPI
is pending after we have cleared the IPI.  Now it returns 1.

Signed-off-by: Paul Mackerras <paulus@samba.org>
Signed-off-by: Alexander Graf <agraf@suse.de>
2014-01-27 16:01:08 +01:00
..
44x.c KVM: PPC: Add devname:kvm aliases for modules 2014-01-09 10:14:00 +01:00
44x_emulate.c kvm: powerpc: Add kvmppc_ops callback 2013-10-17 15:24:26 +02:00
44x_tlb.c kvm: powerpc: Add kvmppc_ops callback 2013-10-17 15:24:26 +02:00
44x_tlb.h KVM: ppc: rename 44x MMU functions used in booke.c 2009-03-24 11:02:56 +02:00
Kconfig Here are the 3.13 KVM changes. There was a lot of work on the PPC 2013-11-15 13:51:36 +09:00
Makefile kvm: powerpc: book3s: Support building HV and PR KVM as module 2013-10-17 15:45:35 +02:00
book3s.c KVM: PPC: Store FP/VSX/VMX state in thread_fp/vr_state structures 2014-01-09 10:15:00 +01:00
book3s.h kvm: powerpc: book3s: Allow the HV and PR selection per virtual machine 2013-10-17 18:42:36 +02:00
book3s_32_mmu.c KVM: PPC: Book3S PR: Better handling of host-side read-only pages 2013-10-17 14:49:35 +02:00
book3s_32_mmu_host.c KVM: PPC: NULL return of kvmppc_mmu_hpte_cache_next should be handled 2014-01-09 10:15:11 +01:00
book3s_32_sr.S KVM: PPC: book3s_pr: Simplify transitions between virtual and real mode 2011-09-25 19:52:29 +03:00
book3s_64_mmu.c KVM: PPC: Book3S PR: Better handling of host-side read-only pages 2013-10-17 14:49:35 +02:00
book3s_64_mmu_host.c kvm: powerpc: book3s: pr: move PR related tracepoints to a separate header 2013-10-17 15:36:22 +02:00
book3s_64_mmu_hv.c KVM: PPC: Book3S: MMIO emulation support for little endian guests 2014-01-27 16:00:39 +01:00
book3s_64_slb.S powerpc: Fix little endian lppaca, slb_shadow and dtl_entry 2013-08-14 15:33:35 +10:00
book3s_64_vio.c ppc: kvm: use anon_inode_getfd() with O_CLOEXEC flag 2013-08-26 13:19:56 +03:00
book3s_64_vio_hv.c kvm: powerpc: book3s: move book3s_64_vio_hv.c into the main kernel binary 2013-10-17 15:17:25 +02:00
book3s_emulate.c kvm: powerpc: book3s: Support building HV and PR KVM as module 2013-10-17 15:45:35 +02:00
book3s_exports.c KVM: PPC: Use load_fp/vr_state rather than load_up_fpu/altivec 2014-01-09 10:14:59 +01:00
book3s_hv.c KVM: PPC: Book3S HV: Implement architecture compatibility modes for POWER8 2014-01-27 16:01:06 +01:00
book3s_hv_builtin.c powerpc/kvm: Contiguous memory allocator based RMA allocation 2013-07-08 16:20:20 +02:00
book3s_hv_cma.c powerpc/kvm: Use 256K chunk to track both RMA and hash page table allocation. 2013-07-08 16:21:13 +02:00
book3s_hv_cma.h powerpc/kvm: Use 256K chunk to track both RMA and hash page table allocation. 2013-07-08 16:21:13 +02:00
book3s_hv_interrupts.S KVM: PPC: Book3S HV: Align physical and virtual CPU thread numbers 2014-01-27 16:00:59 +01:00
book3s_hv_ras.c KVM: PPC: Book3S HV: Fix compilation without CONFIG_PPC_POWERNV 2013-01-06 14:02:00 +01:00
book3s_hv_rm_mmu.c kvm: book3s: rename lookup_linux_pte() to lookup_linux_pte_and_update() 2014-01-09 10:15:06 +01:00
book3s_hv_rm_xics.c KVM: PPC: Book3S HV: Add support for real mode ICP in XICS emulation 2013-04-26 20:27:32 +02:00
book3s_hv_rmhandlers.S KVM: PPC: Book3S HV: Consolidate code that checks reason for wake from nap 2014-01-27 16:01:08 +01:00
book3s_interrupts.S kvm: powerpc: Add kvmppc_ops callback 2013-10-17 15:24:26 +02:00
book3s_mmu_hpte.c kvm: powerpc: book3s: pr: move PR related tracepoints to a separate header 2013-10-17 15:36:22 +02:00
book3s_paired_singles.c KVM: PPC: Store FP/VSX/VMX state in thread_fp/vr_state structures 2014-01-09 10:15:00 +01:00
book3s_pr.c kvm/ppc: IRQ disabling cleanup 2014-01-27 16:00:55 +01:00
book3s_pr_papr.c KVM: PPC: Book3S PR: Make HPT accesses and updates SMP-safe 2013-10-17 14:45:04 +02:00
book3s_rmhandlers.S KVM: PPC: Use load_fp/vr_state rather than load_up_fpu/altivec 2014-01-09 10:14:59 +01:00
book3s_rtas.c kvm: powerpc: book3s: Support building HV and PR KVM as module 2013-10-17 15:45:35 +02:00
book3s_segment.S kvm: powerpc: book3s: Cleanup interrupt handling code 2013-10-17 15:26:31 +02:00
book3s_xics.c KVM: PPC: fix couple of memory leaks in MPIC/XICS devices 2014-01-09 10:14:54 +01:00
book3s_xics.h KVM: PPC: Book3S: Add API for in-kernel XICS emulation 2013-05-02 15:28:36 +02:00
booke.c kvm/ppc: IRQ disabling cleanup 2014-01-27 16:00:55 +01:00
booke.h KVM: PPC: Load/save FP/VMX/VSX state directly to/from vcpu struct 2014-01-09 10:15:02 +01:00
booke_emulate.c KVM: PPC: BookE: Emulate mfspr on EPR 2013-01-10 13:42:30 +01:00
booke_interrupts.S KVM: PPC: booke: Added debug handler 2013-03-22 01:21:09 +01:00
bookehv_interrupts.S KVM: PPC: Book3E HV: call RECONCILE_IRQ_STATE to sync the software state 2014-01-09 10:15:10 +01:00
e500.c KVM: PPC: Add devname:kvm aliases for modules 2014-01-09 10:14:00 +01:00
e500.h kvm: powerpc: use caching attributes as per linux pte 2014-01-09 10:15:08 +01:00
e500_emulate.c kvm: powerpc: Add kvmppc_ops callback 2013-10-17 15:24:26 +02:00
e500_mmu.c KVM: PPC: e500: Fix bad address type in deliver_tlb_misss() 2014-01-27 16:00:54 +01:00
e500_mmu_host.c kvm: powerpc: use caching attributes as per linux pte 2014-01-09 10:15:08 +01:00
e500_mmu_host.h KVM: PPC: E500: Make clear_tlb_refs and clear_tlb1_bitmap static 2013-01-24 19:23:33 +01:00
e500mc.c KVM: PPC: Add devname:kvm aliases for modules 2014-01-09 10:14:00 +01:00
emulate.c KVM: PPC: Book3S: MMIO emulation support for little endian guests 2014-01-27 16:00:39 +01:00
fpu.S powerpc: Remove fpscr use from [kvm_]cvt_{fd,df} 2010-09-02 14:07:32 +10:00
irq.h KVM: PPC: Book3S: Add API for in-kernel XICS emulation 2013-05-02 15:28:36 +02:00
mpic.c KVM: PPC: fix couple of memory leaks in MPIC/XICS devices 2014-01-09 10:14:54 +01:00
powerpc.c kvm/ppc: IRQ disabling cleanup 2014-01-27 16:00:55 +01:00
timing.c KVM: PPC: fix partial application of "exit timing in ticks" 2011-07-12 13:16:28 +03:00
timing.h KVM: PPC: booke: category E.HV (GS-mode) support 2012-04-08 12:51:19 +03:00
trace.h kvm: powerpc: booke: Move booke related tracepoints to separate header 2013-10-17 15:37:16 +02:00
trace_booke.h kvm: powerpc: booke: Move booke related tracepoints to separate header 2013-10-17 15:37:16 +02:00
trace_pr.h kvm: powerpc: book3s: pr: move PR related tracepoints to a separate header 2013-10-17 15:36:22 +02:00