#include <asm/kvm_pkvm.h>
#include <nvhe/gfp.h>
#include <nvhe/spinlock.h>
Go to the source code of this file.
◆ __pkvm_init_vcpu()
int __pkvm_init_vcpu |
( |
pkvm_handle_t |
handle, |
|
|
struct kvm_vcpu * |
host_vcpu, |
|
|
unsigned long |
vcpu_hva |
|
) |
| |
Definition at line 539 of file pkvm.c.
560 if (idx >= hyp_vm->
kvm.created_vcpus) {
569 hyp_vm->
vcpus[idx] = hyp_vcpu;
static void * map_donated_memory(unsigned long host_va, size_t size)
static void unmap_donated_memory(void *va, size_t size)
static int init_pkvm_hyp_vcpu(struct pkvm_hyp_vcpu *hyp_vcpu, struct pkvm_hyp_vm *hyp_vm, struct kvm_vcpu *host_vcpu, unsigned int vcpu_idx)
static struct pkvm_hyp_vm * get_vm_by_handle(pkvm_handle_t handle)
static void hyp_spin_unlock(hyp_spinlock_t *lock)
static void hyp_spin_lock(hyp_spinlock_t *lock)
struct pkvm_hyp_vcpu * vcpus[]
◆ __pkvm_init_vm()
int __pkvm_init_vm |
( |
struct kvm * |
host_kvm, |
|
|
unsigned long |
vm_hva, |
|
|
unsigned long |
pgd_hva |
|
) |
| |
Definition at line 470 of file pkvm.c.
474 size_t vm_size, pgd_size;
496 goto err_remove_mappings;
500 goto err_remove_mappings;
511 goto err_remove_vm_table_entry;
514 return hyp_vm->
kvm.arch.pkvm.handle;
516 err_remove_vm_table_entry:
static void remove_vm_table_entry(pkvm_handle_t handle)
static size_t pkvm_get_hyp_vm_size(unsigned int nr_vcpus)
static pkvm_handle_t insert_vm_table_entry(struct kvm *host_kvm, struct pkvm_hyp_vm *hyp_vm)
static void * map_donated_memory_noclear(unsigned long host_va, size_t size)
static void init_pkvm_hyp_vm(struct kvm *host_kvm, struct pkvm_hyp_vm *hyp_vm, unsigned int nr_vcpus)
void hyp_unpin_shared_mem(void *from, void *to)
int hyp_pin_shared_mem(void *from, void *to)
int kvm_guest_prepare_stage2(struct pkvm_hyp_vm *vm, void *pgd)
size_t kvm_pgtable_stage2_pgd_size(u64 vtcr)
◆ __pkvm_teardown_vm()
int __pkvm_teardown_vm |
( |
pkvm_handle_t |
handle | ) |
|
Definition at line 592 of file pkvm.c.
594 struct kvm_hyp_memcache *mc;
596 struct kvm *host_kvm;
621 mc = &host_kvm->arch.pkvm.teardown_mc;
626 for (idx = 0; idx < hyp_vm->
nr_vcpus; ++idx) {
static void teardown_donated_memory(struct kvm_hyp_memcache *mc, void *addr, size_t size)
static void unpin_host_vcpus(struct pkvm_hyp_vcpu *hyp_vcpus[], unsigned int nr_vcpus)
void reclaim_guest_pages(struct pkvm_hyp_vm *vm, struct kvm_hyp_memcache *mc)
static int hyp_page_count(void *addr)
void __kvm_tlb_flush_vmid(struct kvm_s2_mmu *mmu)
◆ pkvm_hyp_vcpu_to_hyp_vm()
◆ pkvm_hyp_vm_table_init()
void pkvm_hyp_vm_table_init |
( |
void * |
tbl | ) |
|
Definition at line 244 of file pkvm.c.
static struct pkvm_hyp_vm ** vm_table
◆ pkvm_load_hyp_vcpu()
struct pkvm_hyp_vcpu* pkvm_load_hyp_vcpu |
( |
pkvm_handle_t |
handle, |
|
|
unsigned int |
vcpu_idx |
|
) |
| |
Definition at line 263 of file pkvm.c.
271 if (!hyp_vm || hyp_vm->
nr_vcpus <= vcpu_idx)
274 hyp_vcpu = hyp_vm->
vcpus[vcpu_idx];
#define hyp_virt_to_page(virt)
static void hyp_page_ref_inc(struct hyp_page *p)
◆ pkvm_put_hyp_vcpu()
Definition at line 281 of file pkvm.c.
static void hyp_page_ref_dec(struct hyp_page *p)
static struct pkvm_hyp_vm * pkvm_hyp_vcpu_to_hyp_vm(struct pkvm_hyp_vcpu *hyp_vcpu)