diff options
author | Alexander Graf <agraf@suse.de> | 2014-04-29 10:48:44 -0400 |
---|---|---|
committer | Alexander Graf <agraf@suse.de> | 2014-05-30 08:26:22 -0400 |
commit | 616dff86028298dbc91174fb3d12b8ed8cd74955 (patch) | |
tree | 91a545abcc3b8cf70040a333a6404bcfa79f5acb /arch/powerpc/include | |
parent | a5948fa092a04dfd6b9ee31c99eb6896c158eb08 (diff) |
KVM: PPC: Book3S PR: Handle Facility interrupt and FSCR
POWER8 introduced a new interrupt type called "Facility unavailable interrupt"
which contains its status message in a new register called FSCR.
Handle these exits and try to emulate instructions for unhandled facilities.
Follow-on patches enable KVM to expose specific facilities into the guest.
Signed-off-by: Alexander Graf <agraf@suse.de>
Diffstat (limited to 'arch/powerpc/include')
-rw-r--r-- | arch/powerpc/include/asm/kvm_asm.h | 18 | ||||
-rw-r--r-- | arch/powerpc/include/asm/kvm_book3s_asm.h | 2 | ||||
-rw-r--r-- | arch/powerpc/include/asm/kvm_host.h | 1 |
3 files changed, 13 insertions, 8 deletions
diff --git a/arch/powerpc/include/asm/kvm_asm.h b/arch/powerpc/include/asm/kvm_asm.h index 19eb74a95b59..9601741080e5 100644 --- a/arch/powerpc/include/asm/kvm_asm.h +++ b/arch/powerpc/include/asm/kvm_asm.h | |||
@@ -102,6 +102,7 @@ | |||
102 | #define BOOK3S_INTERRUPT_PERFMON 0xf00 | 102 | #define BOOK3S_INTERRUPT_PERFMON 0xf00 |
103 | #define BOOK3S_INTERRUPT_ALTIVEC 0xf20 | 103 | #define BOOK3S_INTERRUPT_ALTIVEC 0xf20 |
104 | #define BOOK3S_INTERRUPT_VSX 0xf40 | 104 | #define BOOK3S_INTERRUPT_VSX 0xf40 |
105 | #define BOOK3S_INTERRUPT_FAC_UNAVAIL 0xf60 | ||
105 | #define BOOK3S_INTERRUPT_H_FAC_UNAVAIL 0xf80 | 106 | #define BOOK3S_INTERRUPT_H_FAC_UNAVAIL 0xf80 |
106 | 107 | ||
107 | #define BOOK3S_IRQPRIO_SYSTEM_RESET 0 | 108 | #define BOOK3S_IRQPRIO_SYSTEM_RESET 0 |
@@ -114,14 +115,15 @@ | |||
114 | #define BOOK3S_IRQPRIO_FP_UNAVAIL 7 | 115 | #define BOOK3S_IRQPRIO_FP_UNAVAIL 7 |
115 | #define BOOK3S_IRQPRIO_ALTIVEC 8 | 116 | #define BOOK3S_IRQPRIO_ALTIVEC 8 |
116 | #define BOOK3S_IRQPRIO_VSX 9 | 117 | #define BOOK3S_IRQPRIO_VSX 9 |
117 | #define BOOK3S_IRQPRIO_SYSCALL 10 | 118 | #define BOOK3S_IRQPRIO_FAC_UNAVAIL 10 |
118 | #define BOOK3S_IRQPRIO_MACHINE_CHECK 11 | 119 | #define BOOK3S_IRQPRIO_SYSCALL 11 |
119 | #define BOOK3S_IRQPRIO_DEBUG 12 | 120 | #define BOOK3S_IRQPRIO_MACHINE_CHECK 12 |
120 | #define BOOK3S_IRQPRIO_EXTERNAL 13 | 121 | #define BOOK3S_IRQPRIO_DEBUG 13 |
121 | #define BOOK3S_IRQPRIO_DECREMENTER 14 | 122 | #define BOOK3S_IRQPRIO_EXTERNAL 14 |
122 | #define BOOK3S_IRQPRIO_PERFORMANCE_MONITOR 15 | 123 | #define BOOK3S_IRQPRIO_DECREMENTER 15 |
123 | #define BOOK3S_IRQPRIO_EXTERNAL_LEVEL 16 | 124 | #define BOOK3S_IRQPRIO_PERFORMANCE_MONITOR 16 |
124 | #define BOOK3S_IRQPRIO_MAX 17 | 125 | #define BOOK3S_IRQPRIO_EXTERNAL_LEVEL 17 |
126 | #define BOOK3S_IRQPRIO_MAX 18 | ||
125 | 127 | ||
126 | #define BOOK3S_HFLAG_DCBZ32 0x1 | 128 | #define BOOK3S_HFLAG_DCBZ32 0x1 |
127 | #define BOOK3S_HFLAG_SLB 0x2 | 129 | #define BOOK3S_HFLAG_SLB 0x2 |
diff --git a/arch/powerpc/include/asm/kvm_book3s_asm.h b/arch/powerpc/include/asm/kvm_book3s_asm.h index 821725c1bf46..5bdfb5dd3400 100644 --- a/arch/powerpc/include/asm/kvm_book3s_asm.h +++ b/arch/powerpc/include/asm/kvm_book3s_asm.h | |||
@@ -104,6 +104,7 @@ struct kvmppc_host_state { | |||
104 | #ifdef CONFIG_PPC_BOOK3S_64 | 104 | #ifdef CONFIG_PPC_BOOK3S_64 |
105 | u64 cfar; | 105 | u64 cfar; |
106 | u64 ppr; | 106 | u64 ppr; |
107 | u64 host_fscr; | ||
107 | #endif | 108 | #endif |
108 | }; | 109 | }; |
109 | 110 | ||
@@ -133,6 +134,7 @@ struct kvmppc_book3s_shadow_vcpu { | |||
133 | u64 esid; | 134 | u64 esid; |
134 | u64 vsid; | 135 | u64 vsid; |
135 | } slb[64]; /* guest SLB */ | 136 | } slb[64]; /* guest SLB */ |
137 | u64 shadow_fscr; | ||
136 | #endif | 138 | #endif |
137 | }; | 139 | }; |
138 | 140 | ||
diff --git a/arch/powerpc/include/asm/kvm_host.h b/arch/powerpc/include/asm/kvm_host.h index 15f19d3cc584..232ec5f0b886 100644 --- a/arch/powerpc/include/asm/kvm_host.h +++ b/arch/powerpc/include/asm/kvm_host.h | |||
@@ -475,6 +475,7 @@ struct kvm_vcpu_arch { | |||
475 | ulong ppr; | 475 | ulong ppr; |
476 | ulong pspb; | 476 | ulong pspb; |
477 | ulong fscr; | 477 | ulong fscr; |
478 | ulong shadow_fscr; | ||
478 | ulong ebbhr; | 479 | ulong ebbhr; |
479 | ulong ebbrr; | 480 | ulong ebbrr; |
480 | ulong bescr; | 481 | ulong bescr; |