Lines Matching +full:spe +full:- +full:pmu
1 // SPDX-License-Identifier: GPL-2.0-only
39 * Linux guests assume support for floating-point and Advanced SIMD. Do in pvm_init_traps_aa64pfr0()
71 vcpu->arch.hcr_el2 |= hcr_set; in pvm_init_traps_aa64pfr0()
72 vcpu->arch.hcr_el2 &= ~hcr_clear; in pvm_init_traps_aa64pfr0()
73 vcpu->arch.cptr_el2 |= cptr_set; in pvm_init_traps_aa64pfr0()
74 vcpu->arch.cptr_el2 &= ~cptr_clear; in pvm_init_traps_aa64pfr0()
92 vcpu->arch.hcr_el2 |= hcr_set; in pvm_init_traps_aa64pfr1()
93 vcpu->arch.hcr_el2 &= ~hcr_clear; in pvm_init_traps_aa64pfr1()
106 /* Trap/constrain PMU */ in pvm_init_traps_aa64dfr0()
121 /* Trap SPE */ in pvm_init_traps_aa64dfr0()
143 vcpu->arch.mdcr_el2 |= mdcr_set; in pvm_init_traps_aa64dfr0()
144 vcpu->arch.mdcr_el2 &= ~mdcr_clear; in pvm_init_traps_aa64dfr0()
145 vcpu->arch.cptr_el2 |= cptr_set; in pvm_init_traps_aa64dfr0()
160 vcpu->arch.mdcr_el2 |= mdcr_set; in pvm_init_traps_aa64mmfr0()
175 vcpu->arch.hcr_el2 |= hcr_set; in pvm_init_traps_aa64mmfr1()
188 * - Feature id registers: to control features exposed to guests in pvm_init_trap_regs()
189 * - Implementation-defined features in pvm_init_trap_regs()
191 vcpu->arch.hcr_el2 |= hcr_trap_feat_regs | hcr_trap_impdef; in pvm_init_trap_regs()
194 vcpu->arch.hcr_el2 &= ~(HCR_RES0); in pvm_init_trap_regs()
195 vcpu->arch.mdcr_el2 &= ~(MDCR_EL2_RES0); in pvm_init_trap_regs()
197 vcpu->arch.cptr_el2 |= CPTR_NVHE_EL2_RES1; in pvm_init_trap_regs()
198 vcpu->arch.cptr_el2 &= ~(CPTR_NVHE_EL2_RES0); in pvm_init_trap_regs()
223 return handle - HANDLE_OFFSET; in vm_handle_to_idx()
271 if (!hyp_vm || hyp_vm->nr_vcpus <= vcpu_idx) in pkvm_load_hyp_vcpu()
274 hyp_vcpu = hyp_vm->vcpus[vcpu_idx]; in pkvm_load_hyp_vcpu()
302 unpin_host_vcpu(hyp_vcpus[i]->host_vcpu); in unpin_host_vcpus()
308 hyp_vm->host_kvm = host_kvm; in init_pkvm_hyp_vm()
309 hyp_vm->kvm.created_vcpus = nr_vcpus; in init_pkvm_hyp_vm()
310 hyp_vm->kvm.arch.mmu.vtcr = host_mmu.arch.mmu.vtcr; in init_pkvm_hyp_vm()
321 return -EBUSY; in init_pkvm_hyp_vcpu()
323 if (host_vcpu->vcpu_idx != vcpu_idx) { in init_pkvm_hyp_vcpu()
324 ret = -EINVAL; in init_pkvm_hyp_vcpu()
328 hyp_vcpu->host_vcpu = host_vcpu; in init_pkvm_hyp_vcpu()
330 hyp_vcpu->vcpu.kvm = &hyp_vm->kvm; in init_pkvm_hyp_vcpu()
331 hyp_vcpu->vcpu.vcpu_id = READ_ONCE(host_vcpu->vcpu_id); in init_pkvm_hyp_vcpu()
332 hyp_vcpu->vcpu.vcpu_idx = vcpu_idx; in init_pkvm_hyp_vcpu()
334 hyp_vcpu->vcpu.arch.hw_mmu = &hyp_vm->kvm.arch.mmu; in init_pkvm_hyp_vcpu()
335 hyp_vcpu->vcpu.arch.cflags = READ_ONCE(host_vcpu->arch.cflags); in init_pkvm_hyp_vcpu()
351 return -ENOMEM; in find_free_vm_table_entry()
363 struct kvm_s2_mmu *mmu = &hyp_vm->kvm.arch.mmu; in insert_vm_table_entry()
374 return -EINVAL; in insert_vm_table_entry()
380 hyp_vm->kvm.arch.pkvm.handle = idx_to_vm_handle(idx); in insert_vm_table_entry()
383 atomic64_set(&mmu->vmid.id, idx + 1); in insert_vm_table_entry()
385 mmu->arch = &hyp_vm->kvm.arch; in insert_vm_table_entry()
386 mmu->pgt = &hyp_vm->pgt; in insert_vm_table_entry()
389 return hyp_vm->kvm.arch.pkvm.handle; in insert_vm_table_entry()
463 * pgd_hva: The host va of the area being donated for the stage-2 PGD for
483 nr_vcpus = READ_ONCE(host_kvm->created_vcpus); in __pkvm_init_vm()
485 ret = -EINVAL; in __pkvm_init_vm()
492 ret = -ENOMEM; in __pkvm_init_vm()
514 return hyp_vm->kvm.arch.pkvm.handle; in __pkvm_init_vm()
517 remove_vm_table_entry(hyp_vm->kvm.arch.pkvm.handle); in __pkvm_init_vm()
536 * the page-aligned size of 'struct pkvm_hyp_vcpu'.
549 return -ENOMEM; in __pkvm_init_vcpu()
555 ret = -ENOENT; in __pkvm_init_vcpu()
559 idx = hyp_vm->nr_vcpus; in __pkvm_init_vcpu()
560 if (idx >= hyp_vm->kvm.created_vcpus) { in __pkvm_init_vcpu()
561 ret = -EINVAL; in __pkvm_init_vcpu()
569 hyp_vm->vcpus[idx] = hyp_vcpu; in __pkvm_init_vcpu()
570 hyp_vm->nr_vcpus++; in __pkvm_init_vcpu()
604 err = -ENOENT; in __pkvm_teardown_vm()
609 err = -EBUSY; in __pkvm_teardown_vm()
613 host_kvm = hyp_vm->host_kvm; in __pkvm_teardown_vm()
616 __kvm_tlb_flush_vmid(&hyp_vm->kvm.arch.mmu); in __pkvm_teardown_vm()
620 /* Reclaim guest pages (including page-table pages) */ in __pkvm_teardown_vm()
621 mc = &host_kvm->arch.pkvm.teardown_mc; in __pkvm_teardown_vm()
623 unpin_host_vcpus(hyp_vm->vcpus, hyp_vm->nr_vcpus); in __pkvm_teardown_vm()
626 for (idx = 0; idx < hyp_vm->nr_vcpus; ++idx) { in __pkvm_teardown_vm()
627 struct pkvm_hyp_vcpu *hyp_vcpu = hyp_vm->vcpus[idx]; in __pkvm_teardown_vm()
632 vm_size = pkvm_get_hyp_vm_size(hyp_vm->kvm.created_vcpus); in __pkvm_teardown_vm()