Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F176465980
D8466.id22061.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
16 KB
Referenced Files
None
Subscribers
None
D8466.id22061.diff
View Options
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
Details
Attached
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)
Attached To
Mode
D8466: Pass the fault type to the pager getpages routine
Attached
Detach File
Event Timeline
Log In to Comment