uipc_shm.c (63e9755548e4feebf798686ab8bce0cdaaaf7b46) uipc_shm.c (0012f373e43db2341c20329163ed2d5ad3b0f341)
1/*-
2 * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3 *
4 * Copyright (c) 2006, 2011, 2016-2017 Robert N. M. Watson
5 * All rights reserved.
6 *
7 * Portions of this software were developed by BAE Systems, the University of
8 * Cambridge Computer Laboratory, and Memorial University under DARPA/AFRL

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

454 * Zero the truncated part of the last page.
455 */
456 base = length & PAGE_MASK;
457 if (base != 0) {
458 idx = OFF_TO_IDX(length);
459retry:
460 m = vm_page_grab(object, idx, VM_ALLOC_NOCREAT);
461 if (m != NULL) {
1/*-
2 * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
3 *
4 * Copyright (c) 2006, 2011, 2016-2017 Robert N. M. Watson
5 * All rights reserved.
6 *
7 * Portions of this software were developed by BAE Systems, the University of
8 * Cambridge Computer Laboratory, and Memorial University under DARPA/AFRL

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

454 * Zero the truncated part of the last page.
455 */
456 base = length & PAGE_MASK;
457 if (base != 0) {
458 idx = OFF_TO_IDX(length);
459retry:
460 m = vm_page_grab(object, idx, VM_ALLOC_NOCREAT);
461 if (m != NULL) {
462 MPASS(m->valid == VM_PAGE_BITS_ALL);
462 MPASS(vm_page_all_valid(m));
463 } else if (vm_pager_has_page(object, idx, NULL, NULL)) {
464 m = vm_page_alloc(object, idx,
465 VM_ALLOC_NORMAL | VM_ALLOC_WAITFAIL);
466 if (m == NULL)
467 goto retry;
468 rv = vm_pager_get_pages(object, &m, 1, NULL,
469 NULL);
470 if (rv == VM_PAGER_OK) {

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

480 } else {
481 vm_page_free(m);
482 VM_OBJECT_WUNLOCK(object);
483 return (EIO);
484 }
485 }
486 if (m != NULL) {
487 pmap_zero_page_area(m, base, PAGE_SIZE - base);
463 } else if (vm_pager_has_page(object, idx, NULL, NULL)) {
464 m = vm_page_alloc(object, idx,
465 VM_ALLOC_NORMAL | VM_ALLOC_WAITFAIL);
466 if (m == NULL)
467 goto retry;
468 rv = vm_pager_get_pages(object, &m, 1, NULL,
469 NULL);
470 if (rv == VM_PAGER_OK) {

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

480 } else {
481 vm_page_free(m);
482 VM_OBJECT_WUNLOCK(object);
483 return (EIO);
484 }
485 }
486 if (m != NULL) {
487 pmap_zero_page_area(m, base, PAGE_SIZE - base);
488 KASSERT(m->valid == VM_PAGE_BITS_ALL,
488 KASSERT(vm_page_all_valid(m),
489 ("shm_dotruncate: page %p is invalid", m));
490 vm_page_dirty(m);
491 vm_page_xunbusy(m);
492 vm_pager_page_unswapped(m);
493 }
494 }
495 delta = IDX_TO_OFF(object->size - nobjsize);
496

--- 1009 unchanged lines hidden ---
489 ("shm_dotruncate: page %p is invalid", m));
490 vm_page_dirty(m);
491 vm_page_xunbusy(m);
492 vm_pager_page_unswapped(m);
493 }
494 }
495 delta = IDX_TO_OFF(object->size - nobjsize);
496

--- 1009 unchanged lines hidden ---