diff options
author | Radim Krčmář <rkrcmar@redhat.com> | 2016-10-21 12:49:53 -0400 |
---|---|---|
committer | Radim Krčmář <rkrcmar@redhat.com> | 2016-10-21 12:49:53 -0400 |
commit | 658f7c4bb714740366b6d6ab1d88ba1b774a97fc (patch) | |
tree | ad39fc574bd3031d31d867baef52eb0e9373ae3c | |
parent | 3633031db5bcc87f5b7d9938c4f94bc8f178c51f (diff) | |
parent | c8ea0395ff3bd5f0fd3c3aa69b383b2d1231e9fd (diff) |
Merge tag 'kvm-arm-for-4.9-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/kvmarm/kvmarm
KVM/ARM updates for 4.9-rc2
- Handle faults generated by the page table walker as being writes
- Map the BSS at EL2
-rw-r--r-- | arch/arm/kvm/arm.c | 7 | ||||
-rw-r--r-- | arch/arm64/include/asm/kvm_emulate.h | 11 |
2 files changed, 13 insertions, 5 deletions
diff --git a/arch/arm/kvm/arm.c b/arch/arm/kvm/arm.c index 03e9273f1876..08bb84f2ad58 100644 --- a/arch/arm/kvm/arm.c +++ b/arch/arm/kvm/arm.c | |||
@@ -1312,6 +1312,13 @@ static int init_hyp_mode(void) | |||
1312 | goto out_err; | 1312 | goto out_err; |
1313 | } | 1313 | } |
1314 | 1314 | ||
1315 | err = create_hyp_mappings(kvm_ksym_ref(__bss_start), | ||
1316 | kvm_ksym_ref(__bss_stop), PAGE_HYP_RO); | ||
1317 | if (err) { | ||
1318 | kvm_err("Cannot map bss section\n"); | ||
1319 | goto out_err; | ||
1320 | } | ||
1321 | |||
1315 | /* | 1322 | /* |
1316 | * Map the Hyp stack pages | 1323 | * Map the Hyp stack pages |
1317 | */ | 1324 | */ |
diff --git a/arch/arm64/include/asm/kvm_emulate.h b/arch/arm64/include/asm/kvm_emulate.h index fd9d5fd788f5..f5ea0ba70f07 100644 --- a/arch/arm64/include/asm/kvm_emulate.h +++ b/arch/arm64/include/asm/kvm_emulate.h | |||
@@ -178,11 +178,6 @@ static inline bool kvm_vcpu_dabt_isvalid(const struct kvm_vcpu *vcpu) | |||
178 | return !!(kvm_vcpu_get_hsr(vcpu) & ESR_ELx_ISV); | 178 | return !!(kvm_vcpu_get_hsr(vcpu) & ESR_ELx_ISV); |
179 | } | 179 | } |
180 | 180 | ||
181 | static inline bool kvm_vcpu_dabt_iswrite(const struct kvm_vcpu *vcpu) | ||
182 | { | ||
183 | return !!(kvm_vcpu_get_hsr(vcpu) & ESR_ELx_WNR); | ||
184 | } | ||
185 | |||
186 | static inline bool kvm_vcpu_dabt_issext(const struct kvm_vcpu *vcpu) | 181 | static inline bool kvm_vcpu_dabt_issext(const struct kvm_vcpu *vcpu) |
187 | { | 182 | { |
188 | return !!(kvm_vcpu_get_hsr(vcpu) & ESR_ELx_SSE); | 183 | return !!(kvm_vcpu_get_hsr(vcpu) & ESR_ELx_SSE); |
@@ -203,6 +198,12 @@ static inline bool kvm_vcpu_dabt_iss1tw(const struct kvm_vcpu *vcpu) | |||
203 | return !!(kvm_vcpu_get_hsr(vcpu) & ESR_ELx_S1PTW); | 198 | return !!(kvm_vcpu_get_hsr(vcpu) & ESR_ELx_S1PTW); |
204 | } | 199 | } |
205 | 200 | ||
201 | static inline bool kvm_vcpu_dabt_iswrite(const struct kvm_vcpu *vcpu) | ||
202 | { | ||
203 | return !!(kvm_vcpu_get_hsr(vcpu) & ESR_ELx_WNR) || | ||
204 | kvm_vcpu_dabt_iss1tw(vcpu); /* AF/DBM update */ | ||
205 | } | ||
206 | |||
206 | static inline bool kvm_vcpu_dabt_is_cm(const struct kvm_vcpu *vcpu) | 207 | static inline bool kvm_vcpu_dabt_is_cm(const struct kvm_vcpu *vcpu) |
207 | { | 208 | { |
208 | return !!(kvm_vcpu_get_hsr(vcpu) & ESR_ELx_CM); | 209 | return !!(kvm_vcpu_get_hsr(vcpu) & ESR_ELx_CM); |