device_pager.c (945f418ab8a676a9675bf5b845514cf63dbc652a) device_pager.c (eb00b276ab2a5a549620ec3fe92c22fd0ddf948e)
1/*-
2 * Copyright (c) 1990 University of Utah.
3 * Copyright (c) 1991, 1993
4 * The Regents of the University of California. All rights reserved.
5 *
6 * This code is derived from software contributed to Berkeley by
7 * the Systems Programming Group of the University of Utah Computer
8 * Science Department.

--- 241 unchanged lines hidden (view full) ---

250 */
251 VM_OBJECT_LOCK(object);
252 dev_pager_updatefake(page, paddr, memattr);
253 if (count > 1) {
254
255 for (i = 0; i < count; i++) {
256 if (i != reqpage) {
257 vm_page_lock(m[i]);
1/*-
2 * Copyright (c) 1990 University of Utah.
3 * Copyright (c) 1991, 1993
4 * The Regents of the University of California. All rights reserved.
5 *
6 * This code is derived from software contributed to Berkeley by
7 * the Systems Programming Group of the University of Utah Computer
8 * Science Department.

--- 241 unchanged lines hidden (view full) ---

250 */
251 VM_OBJECT_LOCK(object);
252 dev_pager_updatefake(page, paddr, memattr);
253 if (count > 1) {
254
255 for (i = 0; i < count; i++) {
256 if (i != reqpage) {
257 vm_page_lock(m[i]);
258 vm_page_lock_queues();
259 vm_page_free(m[i]);
258 vm_page_free(m[i]);
260 vm_page_unlock_queues();
261 vm_page_unlock(m[i]);
262 }
263 }
264 }
265 } else {
266 /*
267 * Replace the passed in reqpage page with our own fake page and
268 * free up the all of the original pages.
269 */
270 page = dev_pager_getfake(paddr, memattr);
271 VM_OBJECT_LOCK(object);
272 TAILQ_INSERT_TAIL(&object->un_pager.devp.devp_pglist, page, pageq);
273 for (i = 0; i < count; i++) {
274 vm_page_lock(m[i]);
259 vm_page_unlock(m[i]);
260 }
261 }
262 }
263 } else {
264 /*
265 * Replace the passed in reqpage page with our own fake page and
266 * free up the all of the original pages.
267 */
268 page = dev_pager_getfake(paddr, memattr);
269 VM_OBJECT_LOCK(object);
270 TAILQ_INSERT_TAIL(&object->un_pager.devp.devp_pglist, page, pageq);
271 for (i = 0; i < count; i++) {
272 vm_page_lock(m[i]);
275 vm_page_lock_queues();
276 vm_page_free(m[i]);
273 vm_page_free(m[i]);
277 vm_page_unlock_queues();
278 vm_page_unlock(m[i]);
279 }
280 vm_page_insert(page, object, offset);
281 m[reqpage] = page;
282 }
283 page->valid = VM_PAGE_BITS_ALL;
284 return (VM_PAGER_OK);
285}

--- 72 unchanged lines hidden ---
274 vm_page_unlock(m[i]);
275 }
276 vm_page_insert(page, object, offset);
277 m[reqpage] = page;
278 }
279 page->valid = VM_PAGE_BITS_ALL;
280 return (VM_PAGER_OK);
281}

--- 72 unchanged lines hidden ---