Skip to content

Commit b494ddd

Browse files
jwrobersonzeising
authored andcommitted
Adapt to recent VM busy changes.
1 parent cd2b6d7 commit b494ddd

File tree

2 files changed

+13
-24
lines changed

2 files changed

+13
-24
lines changed

drivers/gpu/drm/i915/intel_freebsd.c

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -189,21 +189,13 @@ remap_io_mapping(struct vm_area_struct *vma, unsigned long addr,
189189
for (pidx = pidx_start; pidx < pidx_start + count;
190190
pidx++, pa += PAGE_SIZE) {
191191
retry:
192-
m = vm_page_lookup(vm_obj, pidx);
193-
if (m != NULL) {
194-
/* XXX need to unpin object first */
195-
if (vm_page_sleep_if_busy(m, "i915flt"))
196-
goto retry;
197-
} else {
192+
m = vm_page_grab(vm_obj, pidx, VM_ALLOC_NOCREAT);
193+
if (m == NULL) {
198194
m = PHYS_TO_VM_PAGE(pa);
199-
if (vm_page_busied(m)) {
200-
vm_page_lock(m);
201-
VM_OBJECT_WUNLOCK(vm_obj);
202-
vm_page_busy_sleep(m, "i915flt", false);
203-
VM_OBJECT_WLOCK(vm_obj);
195+
if (!vm_page_busy_acquire(m, VM_ALLOC_WAITFAIL))
204196
goto retry;
205-
}
206197
if (vm_page_insert(m, vm_obj, pidx)) {
198+
vm_page_xunbusy(m);
207199
VM_OBJECT_WUNLOCK(vm_obj);
208200
#ifdef VM_WAIT
209201
VM_WAIT;
@@ -213,9 +205,8 @@ remap_io_mapping(struct vm_area_struct *vma, unsigned long addr,
213205
VM_OBJECT_WLOCK(vm_obj);
214206
goto retry;
215207
}
216-
m->valid = VM_PAGE_BITS_ALL;
208+
vm_page_valid(m);
217209
}
218-
vm_page_xbusy(m);
219210
pmap_page_set_memattr(m, attr);
220211
vma->vm_pfn_count++;
221212
}

drivers/gpu/drm/ttm/ttm_bo_vm.c

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -312,11 +312,8 @@ static int ttm_bo_vm_fault(struct vm_area_struct *dummy, struct vm_fault *vmf)
312312
for (i = 0; i < TTM_BO_VM_NUM_PREFAULT && page_offset < page_last;
313313
i++, page_offset++, pidx++) {
314314
retry:
315-
page = vm_page_lookup(obj, pidx);
316-
if (page != NULL) {
317-
if (vm_page_sleep_if_busy(page, "ttmflt"))
318-
goto retry;
319-
} else {
315+
page = vm_page_grab(obj, pidx, VM_ALLOC_NOCREAT);
316+
if (page == NULL) {
320317
if (bo->mem.bus.is_iomem) {
321318
pfn = ttm_bo_io_mem_pfn(bo, page_offset);
322319
page = PHYS_TO_VM_PAGE(IDX_TO_OFF(pfn));
@@ -326,15 +323,16 @@ static int ttm_bo_vm_fault(struct vm_area_struct *dummy, struct vm_fault *vmf)
326323
goto fail;
327324
page->oflags &= ~VPO_UNMANAGED;
328325
}
329-
if (vm_page_busied(page))
330-
goto fail;
331-
if (vm_page_insert(page, obj, pidx))
326+
if (!vm_page_busy_acquire(page, VM_ALLOC_WAITFAIL))
327+
goto retry;
328+
if (vm_page_insert(page, obj, pidx)) {
329+
vm_page_xunbusy(page);
332330
goto fail;
333-
page->valid = VM_PAGE_BITS_ALL;
331+
}
332+
vm_page_valid(page);
334333
}
335334
pmap_page_set_memattr(page,
336335
pgprot2cachemode(cvma.vm_page_prot));
337-
vm_page_xbusy(page);
338336
vma->vm_pfn_count++;
339337
continue;
340338
fail:

0 commit comments

Comments
 (0)