Page MenuHomeFreeBSD

D46389.diff
No OneTemporary

D46389.diff

diff --git a/sys/arm/nvidia/drm2/tegra_bo.c b/sys/arm/nvidia/drm2/tegra_bo.c
--- a/sys/arm/nvidia/drm2/tegra_bo.c
+++ b/sys/arm/nvidia/drm2/tegra_bo.c
@@ -62,7 +62,7 @@
for (i = 0; i < bo->npages; i++) {
m = bo->m[i];
vm_page_busy_acquire(m, 0);
- cdev_pager_free_page(bo->cdev_pager, m);
+ cdev_mgtdev_pager_free_page(bo->cdev_pager, m);
m->flags &= ~PG_FICTITIOUS;
vm_page_unwire_noq(m);
vm_page_free(m);
diff --git a/sys/compat/linuxkpi/common/src/linux_page.c b/sys/compat/linuxkpi/common/src/linux_page.c
--- a/sys/compat/linuxkpi/common/src/linux_page.c
+++ b/sys/compat/linuxkpi/common/src/linux_page.c
@@ -436,7 +436,7 @@
continue;
if (!vm_page_busy_acquire(page, VM_ALLOC_WAITFAIL))
goto retry;
- cdev_pager_free_page(devobj, page);
+ cdev_mgtdev_pager_free_page(devobj, page);
}
VM_OBJECT_WUNLOCK(devobj);
vm_object_deallocate(devobj);
diff --git a/sys/dev/drm2/ttm/ttm_bo_vm.c b/sys/dev/drm2/ttm/ttm_bo_vm.c
--- a/sys/dev/drm2/ttm/ttm_bo_vm.c
+++ b/sys/dev/drm2/ttm/ttm_bo_vm.c
@@ -376,7 +376,7 @@
continue;
if (vm_page_busy_acquire(m, VM_ALLOC_WAITFAIL) == 0)
goto retry;
- cdev_pager_free_page(vm_obj, m);
+ cdev_mgtdev_pager_free_page(vm_obj, m);
}
VM_OBJECT_WUNLOCK(vm_obj);
diff --git a/sys/dev/xen/gntdev/gntdev.c b/sys/dev/xen/gntdev/gntdev.c
--- a/sys/dev/xen/gntdev/gntdev.c
+++ b/sys/dev/xen/gntdev/gntdev.c
@@ -600,7 +600,7 @@
continue;
if (vm_page_busy_acquire(m, VM_ALLOC_WAITFAIL) == 0)
goto retry;
- cdev_pager_free_page(gmap->map->mem, m);
+ cdev_mgtdev_pager_free_page(gmap->map->mem, m);
}
VM_OBJECT_WUNLOCK(gmap->map->mem);
diff --git a/sys/dev/xen/privcmd/privcmd.c b/sys/dev/xen/privcmd/privcmd.c
--- a/sys/dev/xen/privcmd/privcmd.c
+++ b/sys/dev/xen/privcmd/privcmd.c
@@ -135,7 +135,7 @@
continue;
if (vm_page_busy_acquire(m, VM_ALLOC_WAITFAIL) == 0)
goto retry;
- cdev_pager_free_page(map->mem, m);
+ cdev_mgtdev_pager_free_page(map->mem, m);
}
VM_OBJECT_WUNLOCK(map->mem);
diff --git a/sys/vm/device_pager.c b/sys/vm/device_pager.c
--- a/sys/vm/device_pager.c
+++ b/sys/vm/device_pager.c
@@ -262,13 +262,25 @@
cdev_pager_free_page(vm_object_t object, vm_page_t m)
{
- VM_OBJECT_ASSERT_WLOCKED(object);
- if (object->type == OBJT_MGTDEVICE) {
- KASSERT((m->oflags & VPO_UNMANAGED) == 0, ("unmanaged %p", m));
- pmap_remove_all(m);
- (void)vm_page_remove(m);
- } else if (object->type == OBJT_DEVICE)
+ if (object->type == OBJT_MGTDEVICE)
+ cdev_mgtdev_pager_free_page(object, m);
+ else if (object->type == OBJT_DEVICE)
dev_pager_free_page(object, m);
+ else
+ KASSERT(false,
+ ("Invalid device type obj %p m %p", object, m));
+}
+
+void
+cdev_mgtdev_pager_free_page(vm_object_t object, vm_page_t m)
+{
+
+ VM_OBJECT_ASSERT_WLOCKED(object);
+ KASSERT((object->type == OBJT_MGTDEVICE &&
+ (m->oflags & VPO_UNMANAGED) == 0),
+ ("Unmanaged device or page obj %p m %p", object, m));
+ pmap_remove_all(m);
+ (void)vm_page_remove(m);
}
static void
diff --git a/sys/vm/vm_pager.h b/sys/vm/vm_pager.h
--- a/sys/vm/vm_pager.h
+++ b/sys/vm/vm_pager.h
@@ -300,6 +300,7 @@
vm_ooffset_t foff, struct ucred *cred);
vm_object_t cdev_pager_lookup(void *handle);
void cdev_pager_free_page(vm_object_t object, vm_page_t m);
+void cdev_mgtdev_pager_free_page(vm_object_t object, vm_page_t m);
struct phys_pager_ops {
int (*phys_pg_getpages)(vm_object_t vm_obj, vm_page_t *m, int count,

File Metadata

Mime Type
text/plain
Expires
Fri, Feb 6, 5:55 PM (22 h, 1 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
28449468
Default Alt Text
D46389.diff (3 KB)

Event Timeline