-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
KVM: PPC: booke: category E.HV (GS-mode) support
Chips such as e500mc that implement category E.HV in Power ISA 2.06 provide hardware virtualization features, including a new MSR mode for guest state. The guest OS can perform many operations without trapping into the hypervisor, including transitions to and from guest userspace. Since we can use SRR1[GS] to reliably tell whether an exception came from guest state, instead of messing around with IVPR, we use DO_KVM similarly to book3s. Current issues include: - Machine checks from guest state are not routed to the host handler. - The guest can cause a host oops by executing an emulated instruction in a page that lacks read permission. Existing e500/4xx support has the same problem. Includes work by Ashish Kalra <Ashish.Kalra@freescale.com>, Varun Sethi <Varun.Sethi@freescale.com>, and Liu Yu <yu.liu@freescale.com>. Signed-off-by: Scott Wood <scottwood@freescale.com> [agraf: remove pt_regs usage] Signed-off-by: Alexander Graf <agraf@suse.de> Signed-off-by: Avi Kivity <avi@redhat.com>
- Loading branch information
Scott Wood
authored and
Avi Kivity
committed
Apr 8, 2012
1 parent
cfac578
commit d30f6e4
Showing
18 changed files
with
1,058 additions
and
67 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,49 @@ | ||
/* | ||
* Copyright 2010-2011 Freescale Semiconductor, Inc. | ||
* | ||
* This program is free software; you can redistribute it and/or modify | ||
* it under the terms of the GNU General Public License, version 2, as | ||
* published by the Free Software Foundation. | ||
*/ | ||
|
||
#ifndef ASM_KVM_BOOKE_HV_ASM_H | ||
#define ASM_KVM_BOOKE_HV_ASM_H | ||
|
||
#ifdef __ASSEMBLY__ | ||
|
||
/* | ||
* All exceptions from guest state must go through KVM | ||
* (except for those which are delivered directly to the guest) -- | ||
* there are no exceptions for which we fall through directly to | ||
* the normal host handler. | ||
* | ||
* Expected inputs (normal exceptions): | ||
* SCRATCH0 = saved r10 | ||
* r10 = thread struct | ||
* r11 = appropriate SRR1 variant (currently used as scratch) | ||
* r13 = saved CR | ||
* *(r10 + THREAD_NORMSAVE(0)) = saved r11 | ||
* *(r10 + THREAD_NORMSAVE(2)) = saved r13 | ||
* | ||
* Expected inputs (crit/mcheck/debug exceptions): | ||
* appropriate SCRATCH = saved r8 | ||
* r8 = exception level stack frame | ||
* r9 = *(r8 + _CCR) = saved CR | ||
* r11 = appropriate SRR1 variant (currently used as scratch) | ||
* *(r8 + GPR9) = saved r9 | ||
* *(r8 + GPR10) = saved r10 (r10 not yet clobbered) | ||
* *(r8 + GPR11) = saved r11 | ||
*/ | ||
.macro DO_KVM intno srr1 | ||
#ifdef CONFIG_KVM_BOOKE_HV | ||
BEGIN_FTR_SECTION | ||
mtocrf 0x80, r11 /* check MSR[GS] without clobbering reg */ | ||
bf 3, kvmppc_resume_\intno\()_\srr1 | ||
b kvmppc_handler_\intno\()_\srr1 | ||
kvmppc_resume_\intno\()_\srr1: | ||
END_FTR_SECTION_IFSET(CPU_FTR_EMB_HV) | ||
#endif | ||
.endm | ||
|
||
#endif /*__ASSEMBLY__ */ | ||
#endif /* ASM_KVM_BOOKE_HV_ASM_H */ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.