Changeset View
Changeset View
Standalone View
Standalone View
sys/amd64/vmm/vmm.c
| Show First 20 Lines • Show All 646 Lines • ▼ Show 20 Lines | vm_iommu_map(struct vm *vm) | ||||
| vm_paddr_t gpa, hpa; | vm_paddr_t gpa, hpa; | ||||
| struct vm_mem_map *mm; | struct vm_mem_map *mm; | ||||
| int error, i; | int error, i; | ||||
| sx_assert(&vm->mem.mem_segs_lock, SX_LOCKED); | sx_assert(&vm->mem.mem_segs_lock, SX_LOCKED); | ||||
| pmap = vmspace_pmap(vm_vmspace(vm)); | pmap = vmspace_pmap(vm_vmspace(vm)); | ||||
| for (i = 0; i < VM_MAX_MEMMAPS; i++) { | for (i = 0; i < VM_MAX_MEMMAPS; i++) { | ||||
| if (!vm_memseg_sysmem(vm, i)) | mm = &vm->mem.mem_maps[i]; | ||||
| if (!vm_memseg_sysmem(vm, mm->segid)) | |||||
| continue; | continue; | ||||
| mm = &vm->mem.mem_maps[i]; | |||||
| KASSERT((mm->flags & VM_MEMMAP_F_IOMMU) == 0, | KASSERT((mm->flags & VM_MEMMAP_F_IOMMU) == 0, | ||||
| ("iommu map found invalid memmap %#lx/%#lx/%#x", | ("iommu map found invalid memmap %#lx/%#lx/%#x", | ||||
| mm->gpa, mm->len, mm->flags)); | mm->gpa, mm->len, mm->flags)); | ||||
| if ((mm->flags & VM_MEMMAP_F_WIRED) == 0) | if ((mm->flags & VM_MEMMAP_F_WIRED) == 0) | ||||
| continue; | continue; | ||||
| mm->flags |= VM_MEMMAP_F_IOMMU; | mm->flags |= VM_MEMMAP_F_IOMMU; | ||||
| for (gpa = mm->gpa; gpa < mm->gpa + mm->len; gpa += PAGE_SIZE) { | for (gpa = mm->gpa; gpa < mm->gpa + mm->len; gpa += PAGE_SIZE) { | ||||
| Show All 28 Lines | |||||
| { | { | ||||
| vm_paddr_t gpa; | vm_paddr_t gpa; | ||||
| struct vm_mem_map *mm; | struct vm_mem_map *mm; | ||||
| int error, i; | int error, i; | ||||
| sx_assert(&vm->mem.mem_segs_lock, SX_LOCKED); | sx_assert(&vm->mem.mem_segs_lock, SX_LOCKED); | ||||
| for (i = 0; i < VM_MAX_MEMMAPS; i++) { | for (i = 0; i < VM_MAX_MEMMAPS; i++) { | ||||
| if (!vm_memseg_sysmem(vm, i)) | mm = &vm->mem.mem_maps[i]; | ||||
| if (!vm_memseg_sysmem(vm, mm->segid)) | |||||
| continue; | continue; | ||||
| mm = &vm->mem.mem_maps[i]; | |||||
| if ((mm->flags & VM_MEMMAP_F_IOMMU) == 0) | if ((mm->flags & VM_MEMMAP_F_IOMMU) == 0) | ||||
| continue; | continue; | ||||
| mm->flags &= ~VM_MEMMAP_F_IOMMU; | mm->flags &= ~VM_MEMMAP_F_IOMMU; | ||||
| KASSERT((mm->flags & VM_MEMMAP_F_WIRED) != 0, | KASSERT((mm->flags & VM_MEMMAP_F_WIRED) != 0, | ||||
| ("iommu unmap found invalid memmap %#lx/%#lx/%#x", | ("iommu unmap found invalid memmap %#lx/%#lx/%#x", | ||||
| mm->gpa, mm->len, mm->flags)); | mm->gpa, mm->len, mm->flags)); | ||||
| for (gpa = mm->gpa; gpa < mm->gpa + mm->len; gpa += PAGE_SIZE) { | for (gpa = mm->gpa; gpa < mm->gpa + mm->len; gpa += PAGE_SIZE) { | ||||
| ▲ Show 20 Lines • Show All 2,002 Lines • Show Last 20 Lines | |||||