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 --- |