Changeset View
Changeset View
Standalone View
Standalone View
sys/amd64/vmm/vmm.c
Show First 20 Lines • Show All 128 Lines • ▼ Show 20 Lines | |||||
#define vcpu_unlock(v) mtx_unlock_spin(&((v)->mtx)) | #define vcpu_unlock(v) mtx_unlock_spin(&((v)->mtx)) | ||||
#define vcpu_assert_locked(v) mtx_assert(&((v)->mtx), MA_OWNED) | #define vcpu_assert_locked(v) mtx_assert(&((v)->mtx), MA_OWNED) | ||||
struct mem_seg { | struct mem_seg { | ||||
size_t len; | size_t len; | ||||
bool sysmem; | bool sysmem; | ||||
struct vm_object *object; | struct vm_object *object; | ||||
}; | }; | ||||
#define VM_MAX_MEMSEGS 3 | #define VM_MAX_MEMSEGS 4 | ||||
struct mem_map { | struct mem_map { | ||||
vm_paddr_t gpa; | vm_paddr_t gpa; | ||||
size_t len; | size_t len; | ||||
vm_ooffset_t segoff; | vm_ooffset_t segoff; | ||||
int segid; | int segid; | ||||
int prot; | int prot; | ||||
int flags; | int flags; | ||||
▲ Show 20 Lines • Show All 644 Lines • ▼ Show 20 Lines | vm_mmap_memseg(struct vm *vm, vm_paddr_t gpa, int segid, vm_ooffset_t first, | ||||
map->gpa = gpa; | map->gpa = gpa; | ||||
map->len = len; | map->len = len; | ||||
map->segoff = first; | map->segoff = first; | ||||
map->segid = segid; | map->segid = segid; | ||||
map->prot = prot; | map->prot = prot; | ||||
map->flags = flags; | map->flags = flags; | ||||
return (0); | return (0); | ||||
} | |||||
int | |||||
vm_munmap_memseg(struct vm *vm, vm_paddr_t gpa, size_t len) | |||||
{ | |||||
struct mem_map *m; | |||||
int i; | |||||
for (i = 0; i < VM_MAX_MEMMAPS; i++) { | |||||
m = &vm->mem_maps[i]; | |||||
if (m->gpa == gpa && m->len == len && | |||||
(m->flags & VM_MEMMAP_F_IOMMU) == 0) { | |||||
vm_free_memmap(vm, i); | |||||
return (0); | |||||
} | |||||
} | |||||
return (EINVAL); | |||||
} | } | ||||
int | int | ||||
vm_mmap_getnext(struct vm *vm, vm_paddr_t *gpa, int *segid, | vm_mmap_getnext(struct vm *vm, vm_paddr_t *gpa, int *segid, | ||||
vm_ooffset_t *segoff, size_t *len, int *prot, int *flags) | vm_ooffset_t *segoff, size_t *len, int *prot, int *flags) | ||||
{ | { | ||||
struct mem_map *mm, *mmnext; | struct mem_map *mm, *mmnext; | ||||
int i; | int i; | ||||
▲ Show 20 Lines • Show All 2,129 Lines • Show Last 20 Lines |