Merge tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm
Pull KVM updates from Paolo Bonzini: "s390: - implement diag318 x86: - Report last CPU for debugging - Emulate smaller MAXPHYADDR in the guest than in the host - .noinstr and tracing fixes from Thomas - nested SVM page table switching optimization and fixes Generic: - Unify shadow MMU cache data structures across architectures" * tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm: (127 commits) KVM: SVM: Fix sev_pin_memory() error handling KVM: LAPIC: Set the TDCR settable bits KVM: x86: Specify max TDP level via kvm_configure_mmu() KVM: x86/mmu: Rename max_page_level to max_huge_page_level KVM: x86: Dynamically calculate TDP level from max level and MAXPHYADDR KVM: VXM: Remove temporary WARN on expected vs. actual EPTP level mismatch KVM: x86: Pull the PGD's level from the MMU instead of recalculating it KVM: VMX: Make vmx_load_mmu_pgd() static KVM: x86/mmu: Add separate helper for shadow NPT root page role calc KVM: VMX: Drop a duplicate declaration of construct_eptp() KVM: nSVM: Correctly set the shadow NPT root level in its MMU role KVM: Using macros instead of magic values MIPS: KVM: Fix build error caused by 'kvm_run' cleanup KVM: nSVM: remove nonsensical EXITINFO1 adjustment on nested NPF KVM: x86: Add a capability for GUEST_MAXPHYADDR < HOST_MAXPHYADDR support KVM: VMX: optimize #PF injection when MAXPHYADDR does not match KVM: VMX: Add guest physical address check in EPT violation and misconfig KVM: VMX: introduce vmx_need_pf_intercept KVM: x86: update exception bitmap on CPUID changes KVM: x86: rename update_bp_intercept to update_exception_bitmap ...
This commit is contained in:
@@ -874,7 +874,6 @@ static void kvm_write_maari(struct kvm_vcpu *vcpu, unsigned long val)
|
||||
|
||||
static enum emulation_result kvm_vz_gpsi_cop0(union mips_instruction inst,
|
||||
u32 *opc, u32 cause,
|
||||
struct kvm_run *run,
|
||||
struct kvm_vcpu *vcpu)
|
||||
{
|
||||
struct mips_coproc *cop0 = vcpu->arch.cop0;
|
||||
@@ -1074,7 +1073,6 @@ static enum emulation_result kvm_vz_gpsi_cop0(union mips_instruction inst,
|
||||
|
||||
static enum emulation_result kvm_vz_gpsi_cache(union mips_instruction inst,
|
||||
u32 *opc, u32 cause,
|
||||
struct kvm_run *run,
|
||||
struct kvm_vcpu *vcpu)
|
||||
{
|
||||
enum emulation_result er = EMULATE_DONE;
|
||||
@@ -1217,7 +1215,6 @@ static enum emulation_result kvm_trap_vz_handle_gpsi(u32 cause, u32 *opc,
|
||||
{
|
||||
enum emulation_result er = EMULATE_DONE;
|
||||
struct kvm_vcpu_arch *arch = &vcpu->arch;
|
||||
struct kvm_run *run = vcpu->run;
|
||||
union mips_instruction inst;
|
||||
int rd, rt, sel;
|
||||
int err;
|
||||
@@ -1233,12 +1230,12 @@ static enum emulation_result kvm_trap_vz_handle_gpsi(u32 cause, u32 *opc,
|
||||
|
||||
switch (inst.r_format.opcode) {
|
||||
case cop0_op:
|
||||
er = kvm_vz_gpsi_cop0(inst, opc, cause, run, vcpu);
|
||||
er = kvm_vz_gpsi_cop0(inst, opc, cause, vcpu);
|
||||
break;
|
||||
#ifndef CONFIG_CPU_MIPSR6
|
||||
case cache_op:
|
||||
trace_kvm_exit(vcpu, KVM_TRACE_EXIT_CACHE);
|
||||
er = kvm_vz_gpsi_cache(inst, opc, cause, run, vcpu);
|
||||
er = kvm_vz_gpsi_cache(inst, opc, cause, vcpu);
|
||||
break;
|
||||
#endif
|
||||
#ifdef CONFIG_CPU_LOONGSON64
|
||||
@@ -1251,7 +1248,7 @@ static enum emulation_result kvm_trap_vz_handle_gpsi(u32 cause, u32 *opc,
|
||||
#ifdef CONFIG_CPU_MIPSR6
|
||||
case cache6_op:
|
||||
trace_kvm_exit(vcpu, KVM_TRACE_EXIT_CACHE);
|
||||
er = kvm_vz_gpsi_cache(inst, opc, cause, run, vcpu);
|
||||
er = kvm_vz_gpsi_cache(inst, opc, cause, vcpu);
|
||||
break;
|
||||
#endif
|
||||
case rdhwr_op:
|
||||
@@ -1553,7 +1550,6 @@ static int kvm_trap_vz_handle_guest_exit(struct kvm_vcpu *vcpu)
|
||||
*/
|
||||
static int kvm_trap_vz_handle_cop_unusable(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
struct kvm_run *run = vcpu->run;
|
||||
u32 cause = vcpu->arch.host_cp0_cause;
|
||||
enum emulation_result er = EMULATE_FAIL;
|
||||
int ret = RESUME_GUEST;
|
||||
@@ -1581,7 +1577,7 @@ static int kvm_trap_vz_handle_cop_unusable(struct kvm_vcpu *vcpu)
|
||||
break;
|
||||
|
||||
case EMULATE_FAIL:
|
||||
run->exit_reason = KVM_EXIT_INTERNAL_ERROR;
|
||||
vcpu->run->exit_reason = KVM_EXIT_INTERNAL_ERROR;
|
||||
ret = RESUME_HOST;
|
||||
break;
|
||||
|
||||
@@ -1600,8 +1596,6 @@ static int kvm_trap_vz_handle_cop_unusable(struct kvm_vcpu *vcpu)
|
||||
*/
|
||||
static int kvm_trap_vz_handle_msa_disabled(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
struct kvm_run *run = vcpu->run;
|
||||
|
||||
/*
|
||||
* If MSA not present or not exposed to guest or FR=0, the MSA operation
|
||||
* should have been treated as a reserved instruction!
|
||||
@@ -1612,7 +1606,7 @@ static int kvm_trap_vz_handle_msa_disabled(struct kvm_vcpu *vcpu)
|
||||
(read_gc0_status() & (ST0_CU1 | ST0_FR)) == ST0_CU1 ||
|
||||
!(read_gc0_config5() & MIPS_CONF5_MSAEN) ||
|
||||
vcpu->arch.aux_inuse & KVM_MIPS_AUX_MSA) {
|
||||
run->exit_reason = KVM_EXIT_INTERNAL_ERROR;
|
||||
vcpu->run->exit_reason = KVM_EXIT_INTERNAL_ERROR;
|
||||
return RESUME_HOST;
|
||||
}
|
||||
|
||||
@@ -1648,7 +1642,7 @@ static int kvm_trap_vz_handle_tlb_ld_miss(struct kvm_vcpu *vcpu)
|
||||
}
|
||||
|
||||
/* Treat as MMIO */
|
||||
er = kvm_mips_emulate_load(inst, cause, run, vcpu);
|
||||
er = kvm_mips_emulate_load(inst, cause, vcpu);
|
||||
if (er == EMULATE_FAIL) {
|
||||
kvm_err("Guest Emulate Load from MMIO space failed: PC: %p, BadVaddr: %#lx\n",
|
||||
opc, badvaddr);
|
||||
@@ -1695,7 +1689,7 @@ static int kvm_trap_vz_handle_tlb_st_miss(struct kvm_vcpu *vcpu)
|
||||
}
|
||||
|
||||
/* Treat as MMIO */
|
||||
er = kvm_mips_emulate_store(inst, cause, run, vcpu);
|
||||
er = kvm_mips_emulate_store(inst, cause, vcpu);
|
||||
if (er == EMULATE_FAIL) {
|
||||
kvm_err("Guest Emulate Store to MMIO space failed: PC: %p, BadVaddr: %#lx\n",
|
||||
opc, badvaddr);
|
||||
@@ -3242,7 +3236,7 @@ static void kvm_vz_flush_shadow_memslot(struct kvm *kvm,
|
||||
kvm_vz_flush_shadow_all(kvm);
|
||||
}
|
||||
|
||||
static void kvm_vz_vcpu_reenter(struct kvm_run *run, struct kvm_vcpu *vcpu)
|
||||
static void kvm_vz_vcpu_reenter(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
int cpu = smp_processor_id();
|
||||
int preserve_guest_tlb;
|
||||
@@ -3258,7 +3252,7 @@ static void kvm_vz_vcpu_reenter(struct kvm_run *run, struct kvm_vcpu *vcpu)
|
||||
kvm_vz_vcpu_load_wired(vcpu);
|
||||
}
|
||||
|
||||
static int kvm_vz_vcpu_run(struct kvm_run *run, struct kvm_vcpu *vcpu)
|
||||
static int kvm_vz_vcpu_run(struct kvm_vcpu *vcpu)
|
||||
{
|
||||
int cpu = smp_processor_id();
|
||||
int r;
|
||||
@@ -3271,7 +3265,7 @@ static int kvm_vz_vcpu_run(struct kvm_run *run, struct kvm_vcpu *vcpu)
|
||||
kvm_vz_vcpu_load_tlb(vcpu, cpu);
|
||||
kvm_vz_vcpu_load_wired(vcpu);
|
||||
|
||||
r = vcpu->arch.vcpu_run(run, vcpu);
|
||||
r = vcpu->arch.vcpu_run(vcpu->run, vcpu);
|
||||
|
||||
kvm_vz_vcpu_save_wired(vcpu);
|
||||
|
||||
|
Reference in New Issue
Block a user