forked from torvalds/linux
-
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.
Merge tag 'kvmarm-fixes-for-4.18-1' of git://git.kernel.org/pub/scm/l…
…inux/kernel/git/kvmarm/kvmarm KVM/arm fixes for 4.18, take #1 - Lazy FPSIMD switching fixes - Really disable compat ioctls on architectures that don't want it - Disable compat on arm64 (it was never implemented...) - Rely on architectural requirements for GICV on GICv3 - Detect bad alignments in unmap_stage2_range
- Loading branch information
Showing
7 changed files
with
51 additions
and
25 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 |
---|---|---|
|
@@ -5,13 +5,14 @@ | |
* Copyright 2018 Arm Limited | ||
* Author: Dave Martin <[email protected]> | ||
*/ | ||
#include <linux/bottom_half.h> | ||
#include <linux/irqflags.h> | ||
#include <linux/sched.h> | ||
#include <linux/thread_info.h> | ||
#include <linux/kvm_host.h> | ||
#include <asm/kvm_asm.h> | ||
#include <asm/kvm_host.h> | ||
#include <asm/kvm_mmu.h> | ||
#include <asm/sysreg.h> | ||
|
||
/* | ||
* Called on entry to KVM_RUN unless this vcpu previously ran at least | ||
|
@@ -61,10 +62,16 @@ void kvm_arch_vcpu_load_fp(struct kvm_vcpu *vcpu) | |
{ | ||
BUG_ON(!current->mm); | ||
|
||
vcpu->arch.flags &= ~(KVM_ARM64_FP_ENABLED | KVM_ARM64_HOST_SVE_IN_USE); | ||
vcpu->arch.flags &= ~(KVM_ARM64_FP_ENABLED | | ||
KVM_ARM64_HOST_SVE_IN_USE | | ||
KVM_ARM64_HOST_SVE_ENABLED); | ||
vcpu->arch.flags |= KVM_ARM64_FP_HOST; | ||
|
||
if (test_thread_flag(TIF_SVE)) | ||
vcpu->arch.flags |= KVM_ARM64_HOST_SVE_IN_USE; | ||
|
||
if (read_sysreg(cpacr_el1) & CPACR_EL1_ZEN_EL0EN) | ||
vcpu->arch.flags |= KVM_ARM64_HOST_SVE_ENABLED; | ||
} | ||
|
||
/* | ||
|
@@ -92,19 +99,30 @@ void kvm_arch_vcpu_ctxsync_fp(struct kvm_vcpu *vcpu) | |
*/ | ||
void kvm_arch_vcpu_put_fp(struct kvm_vcpu *vcpu) | ||
{ | ||
local_bh_disable(); | ||
unsigned long flags; | ||
|
||
update_thread_flag(TIF_SVE, | ||
vcpu->arch.flags & KVM_ARM64_HOST_SVE_IN_USE); | ||
local_irq_save(flags); | ||
|
||
if (vcpu->arch.flags & KVM_ARM64_FP_ENABLED) { | ||
/* Clean guest FP state to memory and invalidate cpu view */ | ||
fpsimd_save(); | ||
fpsimd_flush_cpu_state(); | ||
} else if (!test_thread_flag(TIF_FOREIGN_FPSTATE)) { | ||
/* Ensure user trap controls are correctly restored */ | ||
fpsimd_bind_task_to_cpu(); | ||
} else if (system_supports_sve()) { | ||
/* | ||
* The FPSIMD/SVE state in the CPU has not been touched, and we | ||
* have SVE (and VHE): CPACR_EL1 (alias CPTR_EL2) has been | ||
* reset to CPACR_EL1_DEFAULT by the Hyp code, disabling SVE | ||
* for EL0. To avoid spurious traps, restore the trap state | ||
* seen by kvm_arch_vcpu_load_fp(): | ||
*/ | ||
if (vcpu->arch.flags & KVM_ARM64_HOST_SVE_ENABLED) | ||
sysreg_clear_set(CPACR_EL1, 0, CPACR_EL1_ZEN_EL0EN); | ||
else | ||
sysreg_clear_set(CPACR_EL1, CPACR_EL1_ZEN_EL0EN, 0); | ||
} | ||
|
||
local_bh_enable(); | ||
update_thread_flag(TIF_SVE, | ||
vcpu->arch.flags & KVM_ARM64_HOST_SVE_IN_USE); | ||
|
||
local_irq_restore(flags); | ||
} |
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