Page MenuHomeFreeBSD

D8466.id22061.diff
No OneTemporary

D8466.id22061.diff

Index: sys/dev/drm2/i915/i915_gem.c
===================================================================
--- sys/dev/drm2/i915/i915_gem.c
+++ sys/dev/drm2/i915/i915_gem.c
@@ -1483,11 +1483,7 @@
drm_i915_private_t *dev_priv = dev->dev_private;
vm_page_t page;
int ret = 0;
-#ifdef FREEBSD_WIP
bool write = (prot & VM_PROT_WRITE) != 0;
-#else
- bool write = true;
-#endif /* FREEBSD_WIP */
bool pinned;
vm_object_pip_add(vm_obj, 1);
@@ -4770,7 +4766,8 @@
page = vm_page_grab(object, pindex, VM_ALLOC_NORMAL);
if (page->valid != VM_PAGE_BITS_ALL) {
if (vm_pager_has_page(object, pindex, NULL, NULL)) {
- rv = vm_pager_get_pages(object, &page, 1, NULL, NULL);
+ rv = vm_pager_get_pages(object, &page, 1, VM_PROT_ALL,
+ NULL, NULL);
if (rv != VM_PAGER_OK) {
vm_page_lock(page);
vm_page_free(page);
Index: sys/dev/drm2/ttm/ttm_tt.c
===================================================================
--- sys/dev/drm2/ttm/ttm_tt.c
+++ sys/dev/drm2/ttm/ttm_tt.c
@@ -292,7 +292,7 @@
if (from_page->valid != VM_PAGE_BITS_ALL) {
if (vm_pager_has_page(obj, i, NULL, NULL)) {
rv = vm_pager_get_pages(obj, &from_page, 1,
- NULL, NULL);
+ VM_PROT_ALL, NULL, NULL);
if (rv != VM_PAGER_OK) {
vm_page_lock(from_page);
vm_page_free(from_page);
Index: sys/dev/md/md.c
===================================================================
--- sys/dev/md/md.c
+++ sys/dev/md/md.c
@@ -1015,7 +1015,7 @@
rv = VM_PAGER_OK;
else
rv = vm_pager_get_pages(sc->object, &m, 1,
- NULL, NULL);
+ VM_PROT_ALL, NULL, NULL);
if (rv == VM_PAGER_ERROR) {
vm_page_xunbusy(m);
break;
@@ -1043,7 +1043,7 @@
} else if (bp->bio_cmd == BIO_WRITE) {
if (len != PAGE_SIZE && m->valid != VM_PAGE_BITS_ALL)
rv = vm_pager_get_pages(sc->object, &m, 1,
- NULL, NULL);
+ VM_PROT_ALL, NULL, NULL);
else
rv = VM_PAGER_OK;
if (rv == VM_PAGER_ERROR) {
@@ -1063,7 +1063,7 @@
} else if (bp->bio_cmd == BIO_DELETE) {
if (len != PAGE_SIZE && m->valid != VM_PAGE_BITS_ALL)
rv = vm_pager_get_pages(sc->object, &m, 1,
- NULL, NULL);
+ VM_PROT_ALL, NULL, NULL);
else
rv = VM_PAGER_OK;
if (rv == VM_PAGER_ERROR) {
Index: sys/fs/tmpfs/tmpfs_subr.c
===================================================================
--- sys/fs/tmpfs/tmpfs_subr.c
+++ sys/fs/tmpfs/tmpfs_subr.c
@@ -1374,7 +1374,7 @@
goto retry;
} else if (m->valid != VM_PAGE_BITS_ALL)
rv = vm_pager_get_pages(uobj, &m, 1,
- NULL, NULL);
+ VM_PROT_ALL, NULL, NULL);
else
/* A cached page was reactivated. */
rv = VM_PAGER_OK;
Index: sys/kern/kern_exec.c
===================================================================
--- sys/kern/kern_exec.c
+++ sys/kern/kern_exec.c
@@ -1012,7 +1012,8 @@
}
}
initial_pagein = i;
- rv = vm_pager_get_pages(object, ma, initial_pagein, NULL, NULL);
+ rv = vm_pager_get_pages(object, ma, initial_pagein, VM_PROT_ALL,
+ NULL, NULL);
if (rv != VM_PAGER_OK) {
for (i = 0; i < initial_pagein; i++) {
vm_page_lock(ma[i]);
Index: sys/kern/kern_sendfile.c
===================================================================
--- sys/kern/kern_sendfile.c
+++ sys/kern/kern_sendfile.c
@@ -387,8 +387,8 @@
count = min(a + 1, npages - i);
refcount_acquire(&sfio->nios);
- rv = vm_pager_get_pages_async(obj, pa + i, count, NULL,
- i + count == npages ? &rhpages : NULL,
+ rv = vm_pager_get_pages_async(obj, pa + i, count, VM_PROT_ALL,
+ NULL, i + count == npages ? &rhpages : NULL,
&sendfile_iodone, sfio);
KASSERT(rv == VM_PAGER_OK, ("%s: pager fail obj %p page %p",
__func__, obj, pa[i]));
Index: sys/kern/uipc_shm.c
===================================================================
--- sys/kern/uipc_shm.c
+++ sys/kern/uipc_shm.c
@@ -186,7 +186,8 @@
if (m->valid != VM_PAGE_BITS_ALL) {
vm_page_xbusy(m);
if (vm_pager_has_page(obj, idx, NULL, NULL)) {
- rv = vm_pager_get_pages(obj, &m, 1, NULL, NULL);
+ rv = vm_pager_get_pages(obj, &m, 1, VM_PROT_ALL,
+ NULL, NULL);
if (rv != VM_PAGER_OK) {
printf(
"uiomove_object: vm_obj %p idx %jd valid %x pager error %d\n",
@@ -457,7 +458,7 @@
goto retry;
} else if (m->valid != VM_PAGE_BITS_ALL)
rv = vm_pager_get_pages(object, &m, 1,
- NULL, NULL);
+ VM_PROT_ALL, NULL, NULL);
else
/* A cached page was reactivated. */
rv = VM_PAGER_OK;
Index: sys/vm/default_pager.c
===================================================================
--- sys/vm/default_pager.c
+++ sys/vm/default_pager.c
@@ -56,11 +56,12 @@
static vm_object_t default_pager_alloc(void *, vm_ooffset_t, vm_prot_t,
vm_ooffset_t, struct ucred *);
static void default_pager_dealloc(vm_object_t);
-static int default_pager_getpages(vm_object_t, vm_page_t *, int, int *, int *);
+static int default_pager_getpages(vm_object_t, vm_page_t *, int, int, int *,
+ int *);
static void default_pager_putpages(vm_object_t, vm_page_t *, int,
- boolean_t, int *);
+ boolean_t, int *);
static boolean_t default_pager_haspage(vm_object_t, vm_pindex_t, int *,
- int *);
+ int *);
/*
* pagerops for OBJT_DEFAULT - "default pager".
*/
@@ -122,7 +123,7 @@
* see a vm_page with assigned swap here.
*/
static int
-default_pager_getpages(vm_object_t object, vm_page_t *m, int count,
+default_pager_getpages(vm_object_t object, vm_page_t *m, int count, int prot,
int *rbehind, int *rahead)
{
Index: sys/vm/device_pager.c
===================================================================
--- sys/vm/device_pager.c
+++ sys/vm/device_pager.c
@@ -59,7 +59,7 @@
static vm_object_t dev_pager_alloc(void *, vm_ooffset_t, vm_prot_t,
vm_ooffset_t, struct ucred *);
static void dev_pager_dealloc(vm_object_t);
-static int dev_pager_getpages(vm_object_t, vm_page_t *, int, int *, int *);
+static int dev_pager_getpages(vm_object_t, vm_page_t *, int, int, int *, int *);
static void dev_pager_putpages(vm_object_t, vm_page_t *, int, int, int *);
static boolean_t dev_pager_haspage(vm_object_t, vm_pindex_t, int *, int *);
static void dev_pager_free_page(vm_object_t object, vm_page_t m);
@@ -260,8 +260,8 @@
}
static int
-dev_pager_getpages(vm_object_t object, vm_page_t *ma, int count, int *rbehind,
- int *rahead)
+dev_pager_getpages(vm_object_t object, vm_page_t *ma, int count, int prot,
+ int *rbehind, int *rahead)
{
int error;
@@ -269,7 +269,7 @@
KASSERT(count == 1, ("%s: count %d", __func__, count));
VM_OBJECT_ASSERT_WLOCKED(object);
error = object->un_pager.devp.ops->cdev_pg_fault(object,
- IDX_TO_OFF(ma[0]->pindex), PROT_READ, &ma[0]);
+ IDX_TO_OFF(ma[0]->pindex), prot, &ma[0]);
VM_OBJECT_ASSERT_WLOCKED(object);
Index: sys/vm/phys_pager.c
===================================================================
--- sys/vm/phys_pager.c
+++ sys/vm/phys_pager.c
@@ -139,8 +139,8 @@
* Fill as many pages as vm_fault has allocated for us.
*/
static int
-phys_pager_getpages(vm_object_t object, vm_page_t *m, int count, int *rbehind,
- int *rahead)
+phys_pager_getpages(vm_object_t object, vm_page_t *m, int count, int prot,
+ int *rbehind, int *rahead)
{
int i;
Index: sys/vm/sg_pager.c
===================================================================
--- sys/vm/sg_pager.c
+++ sys/vm/sg_pager.c
@@ -49,11 +49,9 @@
static vm_object_t sg_pager_alloc(void *, vm_ooffset_t, vm_prot_t,
vm_ooffset_t, struct ucred *);
static void sg_pager_dealloc(vm_object_t);
-static int sg_pager_getpages(vm_object_t, vm_page_t *, int, int *, int *);
-static void sg_pager_putpages(vm_object_t, vm_page_t *, int,
- boolean_t, int *);
-static boolean_t sg_pager_haspage(vm_object_t, vm_pindex_t, int *,
- int *);
+static int sg_pager_getpages(vm_object_t, vm_page_t *, int, int, int *, int *);
+static void sg_pager_putpages(vm_object_t, vm_page_t *, int, boolean_t, int *);
+static boolean_t sg_pager_haspage(vm_object_t, vm_pindex_t, int *, int *);
struct pagerops sgpagerops = {
.pgo_alloc = sg_pager_alloc,
@@ -135,8 +133,8 @@
}
static int
-sg_pager_getpages(vm_object_t object, vm_page_t *m, int count, int *rbehind,
- int *rahead)
+sg_pager_getpages(vm_object_t object, vm_page_t *m, int count, int prot,
+ int *rbehind, int *rahead)
{
struct sglist *sg;
vm_page_t m_paddr, page;
Index: sys/vm/swap_pager.c
===================================================================
--- sys/vm/swap_pager.c
+++ sys/vm/swap_pager.c
@@ -357,10 +357,10 @@
swap_pager_alloc(void *handle, vm_ooffset_t size,
vm_prot_t prot, vm_ooffset_t offset, struct ucred *);
static void swap_pager_dealloc(vm_object_t object);
-static int swap_pager_getpages(vm_object_t, vm_page_t *, int, int *,
- int *);
-static int swap_pager_getpages_async(vm_object_t, vm_page_t *, int, int *,
- int *, pgo_getpages_iodone_t, void *);
+static int swap_pager_getpages(vm_object_t, vm_page_t *, int, int, int *,
+ int *);
+static int swap_pager_getpages_async(vm_object_t, vm_page_t *, int, int,
+ int *, int *, pgo_getpages_iodone_t, void *);
static void swap_pager_putpages(vm_object_t, vm_page_t *, int, boolean_t, int *);
static boolean_t
swap_pager_haspage(vm_object_t object, vm_pindex_t pindex, int *before, int *after);
@@ -1079,8 +1079,8 @@
* The pages in "m" must be busied and will remain busied upon return.
*/
static int
-swap_pager_getpages(vm_object_t object, vm_page_t *m, int count, int *rbehind,
- int *rahead)
+swap_pager_getpages(vm_object_t object, vm_page_t *m, int count, int prot,
+ int *rbehind, int *rahead)
{
struct buf *bp;
vm_page_t mpred, msucc, p;
@@ -1239,12 +1239,12 @@
* swap_pager_getpages().
*/
static int
-swap_pager_getpages_async(vm_object_t object, vm_page_t *m, int count,
+swap_pager_getpages_async(vm_object_t object, vm_page_t *m, int count, int prot,
int *rbehind, int *rahead, pgo_getpages_iodone_t iodone, void *arg)
{
int r, error;
- r = swap_pager_getpages(object, m, count, rbehind, rahead);
+ r = swap_pager_getpages(object, m, count, prot, rbehind, rahead);
VM_OBJECT_WUNLOCK(object);
switch (r) {
case VM_PAGER_OK:
@@ -1664,7 +1664,8 @@
return;
}
- if (swap_pager_getpages(object, &m, 1, NULL, NULL) != VM_PAGER_OK)
+ if (swap_pager_getpages(object, &m, 1, VM_PROT_ALL, NULL, NULL) !=
+ VM_PAGER_OK)
panic("swap_pager_force_pagein: read from swap failed");/*XXX*/
vm_object_pip_wakeup(object);
vm_page_dirty(m);
Index: sys/vm/vm_fault.c
===================================================================
--- sys/vm/vm_fault.c
+++ sys/vm/vm_fault.c
@@ -700,7 +700,7 @@
}
ahead = ulmin(ahead, atop(e_end - vaddr) - 1);
}
- rv = vm_pager_get_pages(fs.object, &fs.m, 1,
+ rv = vm_pager_get_pages(fs.object, &fs.m, 1, prot,
&behind, &ahead);
if (rv == VM_PAGER_OK) {
faultcount = behind + 1 + ahead;
Index: sys/vm/vm_glue.c
===================================================================
--- sys/vm/vm_glue.c
+++ sys/vm/vm_glue.c
@@ -239,7 +239,7 @@
m = vm_page_grab(object, pindex, VM_ALLOC_NORMAL | VM_ALLOC_NOBUSY);
if (m->valid != VM_PAGE_BITS_ALL) {
vm_page_xbusy(m);
- rv = vm_pager_get_pages(object, &m, 1, NULL, NULL);
+ rv = vm_pager_get_pages(object, &m, 1, VM_PROT_ALL, NULL, NULL);
if (rv != VM_PAGER_OK) {
vm_page_lock(m);
vm_page_free(m);
@@ -592,7 +592,8 @@
rv = vm_pager_has_page(ksobj, ma[i]->pindex, NULL, &a);
KASSERT(rv == 1, ("%s: missing page %p", __func__, ma[i]));
count = min(a + 1, j - i);
- rv = vm_pager_get_pages(ksobj, ma + i, count, NULL, NULL);
+ rv = vm_pager_get_pages(ksobj, ma + i, count, VM_PROT_ALL,
+ NULL, NULL);
KASSERT(rv == VM_PAGER_OK, ("%s: cannot get kstack for proc %d",
__func__, td->td_proc->p_pid));
vm_object_pip_wakeup(ksobj);
Index: sys/vm/vm_object.c
===================================================================
--- sys/vm/vm_object.c
+++ sys/vm/vm_object.c
@@ -2025,7 +2025,8 @@
for (pindex = start; pindex < end; pindex++) {
m = vm_page_grab(object, pindex, VM_ALLOC_NORMAL);
if (m->valid != VM_PAGE_BITS_ALL) {
- rv = vm_pager_get_pages(object, &m, 1, NULL, NULL);
+ rv = vm_pager_get_pages(object, &m, 1, VM_PROT_ALL,
+ NULL, NULL);
if (rv != VM_PAGER_OK) {
vm_page_lock(m);
vm_page_free(m);
Index: sys/vm/vm_pager.h
===================================================================
--- sys/vm/vm_pager.h
+++ sys/vm/vm_pager.h
@@ -50,10 +50,10 @@
typedef vm_object_t pgo_alloc_t(void *, vm_ooffset_t, vm_prot_t, vm_ooffset_t,
struct ucred *);
typedef void pgo_dealloc_t(vm_object_t);
-typedef int pgo_getpages_t(vm_object_t, vm_page_t *, int, int *, int *);
+typedef int pgo_getpages_t(vm_object_t, vm_page_t *, int, int, int *, int *);
typedef void pgo_getpages_iodone_t(void *, vm_page_t *, int, int);
-typedef int pgo_getpages_async_t(vm_object_t, vm_page_t *, int, int *, int *,
- pgo_getpages_iodone_t, void *);
+typedef int pgo_getpages_async_t(vm_object_t, vm_page_t *, int, int, int *,
+ int *, pgo_getpages_iodone_t, void *);
typedef void pgo_putpages_t(vm_object_t, vm_page_t *, int, int, int *);
typedef boolean_t pgo_haspage_t(vm_object_t, vm_pindex_t, int *, int *);
typedef void pgo_pageunswapped_t(vm_page_t);
@@ -106,8 +106,8 @@
vm_ooffset_t, struct ucred *);
void vm_pager_bufferinit(void);
void vm_pager_deallocate(vm_object_t);
-int vm_pager_get_pages(vm_object_t, vm_page_t *, int, int *, int *);
-int vm_pager_get_pages_async(vm_object_t, vm_page_t *, int, int *, int *,
+int vm_pager_get_pages(vm_object_t, vm_page_t *, int, int, int *, int *);
+int vm_pager_get_pages_async(vm_object_t, vm_page_t *, int, int, int *, int *,
pgo_getpages_iodone_t, void *);
void vm_pager_init(void);
vm_object_t vm_pager_object_lookup(struct pagerlst *, void *);
Index: sys/vm/vm_pager.c
===================================================================
--- sys/vm/vm_pager.c
+++ sys/vm/vm_pager.c
@@ -88,7 +88,8 @@
struct buf *swbuf;
-static int dead_pager_getpages(vm_object_t, vm_page_t *, int, int *, int *);
+static int dead_pager_getpages(vm_object_t, vm_page_t *, int, int, int *,
+ int *);
static vm_object_t dead_pager_alloc(void *, vm_ooffset_t, vm_prot_t,
vm_ooffset_t, struct ucred *);
static void dead_pager_putpages(vm_object_t, vm_page_t *, int, int, int *);
@@ -96,8 +97,8 @@
static void dead_pager_dealloc(vm_object_t);
static int
-dead_pager_getpages(vm_object_t obj, vm_page_t *ma, int count, int *rbehind,
- int *rahead)
+dead_pager_getpages(vm_object_t obj, vm_page_t *ma, int count, int prot,
+ int *rbehind, int *rahead)
{
return (VM_PAGER_FAIL);
@@ -278,8 +279,8 @@
* The requested page must be fully valid on successful return.
*/
int
-vm_pager_get_pages(vm_object_t object, vm_page_t *m, int count, int *rbehind,
- int *rahead)
+vm_pager_get_pages(vm_object_t object, vm_page_t *m, int count, int prot,
+ int *rbehind, int *rahead)
{
#ifdef INVARIANTS
vm_pindex_t pindex = m[0]->pindex;
@@ -288,8 +289,8 @@
vm_pager_assert_in(object, m, count);
- r = (*pagertab[object->type]->pgo_getpages)(object, m, count, rbehind,
- rahead);
+ r = (*pagertab[object->type]->pgo_getpages)(object, m, count, prot,
+ rbehind, rahead);
if (r != VM_PAGER_OK)
return (r);
@@ -311,14 +312,14 @@
}
int
-vm_pager_get_pages_async(vm_object_t object, vm_page_t *m, int count,
+vm_pager_get_pages_async(vm_object_t object, vm_page_t *m, int count, int prot,
int *rbehind, int *rahead, pgo_getpages_iodone_t iodone, void *arg)
{
vm_pager_assert_in(object, m, count);
return ((*pagertab[object->type]->pgo_getpages_async)(object, m,
- count, rbehind, rahead, iodone, arg));
+ count, prot, rbehind, rahead, iodone, arg));
}
/*
Index: sys/vm/vnode_pager.c
===================================================================
--- sys/vm/vnode_pager.c
+++ sys/vm/vnode_pager.c
@@ -84,8 +84,9 @@
static int vnode_pager_input_smlfs(vm_object_t object, vm_page_t m);
static int vnode_pager_input_old(vm_object_t object, vm_page_t m);
static void vnode_pager_dealloc(vm_object_t);
-static int vnode_pager_getpages(vm_object_t, vm_page_t *, int, int *, int *);
-static int vnode_pager_getpages_async(vm_object_t, vm_page_t *, int, int *,
+static int vnode_pager_getpages(vm_object_t, vm_page_t *, int, int, int *,
+ int *);
+static int vnode_pager_getpages_async(vm_object_t, vm_page_t *, int, int, int *,
int *, vop_getpages_iodone_t, void *);
static void vnode_pager_putpages(vm_object_t, vm_page_t *, int, int, int *);
static boolean_t vnode_pager_haspage(vm_object_t, vm_pindex_t, int *, int *);
@@ -683,8 +684,8 @@
* backing vp's VOP_GETPAGES.
*/
static int
-vnode_pager_getpages(vm_object_t object, vm_page_t *m, int count, int *rbehind,
- int *rahead)
+vnode_pager_getpages(vm_object_t object, vm_page_t *m, int count, int prot,
+ int *rbehind, int *rahead)
{
struct vnode *vp;
int rtval;
@@ -700,7 +701,8 @@
static int
vnode_pager_getpages_async(vm_object_t object, vm_page_t *m, int count,
- int *rbehind, int *rahead, vop_getpages_iodone_t iodone, void *arg)
+ int prot, int *rbehind, int *rahead, vop_getpages_iodone_t iodone,
+ void *arg)
{
struct vnode *vp;
int rtval;

File Metadata

Mime Type
text/plain
Expires
Tue, Oct 20, 2:08 AM (54 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
41079698
Default Alt Text
D8466.id22061.diff (16 KB)

Event Timeline