phys_pager.c (60757) | phys_pager.c (61081) |
---|---|
1/* 2 * Copyright (c) 2000 Peter Wemm 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. --- 8 unchanged lines hidden (view full) --- 17 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 18 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 19 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 20 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 21 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 22 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 23 * SUCH DAMAGE. 24 * | 1/* 2 * Copyright (c) 2000 Peter Wemm 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions 6 * are met: 7 * 1. Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. --- 8 unchanged lines hidden (view full) --- 17 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 18 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 19 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 20 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 21 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 22 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 23 * SUCH DAMAGE. 24 * |
25 * $FreeBSD: head/sys/vm/phys_pager.c 60757 2000-05-21 13:41:29Z peter $ | 25 * $FreeBSD: head/sys/vm/phys_pager.c 61081 2000-05-29 22:40:54Z dillon $ |
26 */ 27 28#include <sys/param.h> 29#include <sys/systm.h> 30#include <sys/linker_set.h> 31#include <sys/conf.h> 32#include <sys/mman.h> 33#include <sys/sysctl.h> --- 65 unchanged lines hidden (view full) --- 99 object = vm_pager_object_lookup(&phys_pager_object_list, handle); 100 if (object == NULL) { 101 /* 102 * Allocate object and associate it with the pager. 103 */ 104 object = vm_object_allocate(OBJT_PHYS, 105 OFF_TO_IDX(foff + size)); 106 object->handle = handle; | 26 */ 27 28#include <sys/param.h> 29#include <sys/systm.h> 30#include <sys/linker_set.h> 31#include <sys/conf.h> 32#include <sys/mman.h> 33#include <sys/sysctl.h> --- 65 unchanged lines hidden (view full) --- 99 object = vm_pager_object_lookup(&phys_pager_object_list, handle); 100 if (object == NULL) { 101 /* 102 * Allocate object and associate it with the pager. 103 */ 104 object = vm_object_allocate(OBJT_PHYS, 105 OFF_TO_IDX(foff + size)); 106 object->handle = handle; |
107#if 0 |
|
107 TAILQ_INIT(&object->un_pager.physp.physp_pglist); | 108 TAILQ_INIT(&object->un_pager.physp.physp_pglist); |
109#endif |
|
108 TAILQ_INSERT_TAIL(&phys_pager_object_list, object, 109 pager_object_list); 110 } else { 111 /* 112 * Gain a reference to the object. 113 */ 114 vm_object_reference(object); 115 if (OFF_TO_IDX(foff + size) > object->size) --- 10 unchanged lines hidden (view full) --- 126static void 127phys_pager_dealloc(object) 128 vm_object_t object; 129{ 130 vm_page_t m; 131 int s; 132 133 TAILQ_REMOVE(&phys_pager_object_list, object, pager_object_list); | 110 TAILQ_INSERT_TAIL(&phys_pager_object_list, object, 111 pager_object_list); 112 } else { 113 /* 114 * Gain a reference to the object. 115 */ 116 vm_object_reference(object); 117 if (OFF_TO_IDX(foff + size) > object->size) --- 10 unchanged lines hidden (view full) --- 128static void 129phys_pager_dealloc(object) 130 vm_object_t object; 131{ 132 vm_page_t m; 133 int s; 134 135 TAILQ_REMOVE(&phys_pager_object_list, object, pager_object_list); |
134 /* 135 * Free up our fake pages. 136 */ 137 s = splvm(); 138 while ((m = TAILQ_FIRST(&object->un_pager.physp.physp_pglist)) != 0) { 139 TAILQ_REMOVE(&object->un_pager.physp.physp_pglist, m, pageq); 140 /* return the page back to normal */ 141 m->flags &= ~PG_FICTITIOUS; 142 m->dirty = 0; 143 vm_page_unwire(m, 0); 144 vm_page_flag_clear(m, PG_ZERO); 145 vm_page_free(m); 146 } 147 splx(s); | |
148} 149 150static int 151phys_pager_getpages(object, m, count, reqpage) 152 vm_object_t object; 153 vm_page_t *m; 154 int count; 155 int reqpage; --- 4 unchanged lines hidden (view full) --- 160 /* 161 * Fill as many pages as vm_fault has allocated for us. 162 */ 163 for (i = 0; i < count; i++) { 164 if ((m[i]->flags & PG_ZERO) == 0) 165 vm_page_zero_fill(m[i]); 166 vm_page_flag_set(m[i], PG_ZERO); 167 /* Switch off pv_entries */ | 136} 137 138static int 139phys_pager_getpages(object, m, count, reqpage) 140 vm_object_t object; 141 vm_page_t *m; 142 int count; 143 int reqpage; --- 4 unchanged lines hidden (view full) --- 148 /* 149 * Fill as many pages as vm_fault has allocated for us. 150 */ 151 for (i = 0; i < count; i++) { 152 if ((m[i]->flags & PG_ZERO) == 0) 153 vm_page_zero_fill(m[i]); 154 vm_page_flag_set(m[i], PG_ZERO); 155 /* Switch off pv_entries */ |
168 vm_page_wire(m[i]); 169 vm_page_flag_set(m[i], PG_FICTITIOUS); | 156 vm_page_unmanage(m[i]); |
170 m[i]->valid = VM_PAGE_BITS_ALL; 171 m[i]->dirty = 0; 172 /* The requested page must remain busy, the others not. */ 173 if (reqpage != i) { 174 vm_page_flag_clear(m[i], PG_BUSY); 175 m[i]->busy = 0; 176 } | 157 m[i]->valid = VM_PAGE_BITS_ALL; 158 m[i]->dirty = 0; 159 /* The requested page must remain busy, the others not. */ 160 if (reqpage != i) { 161 vm_page_flag_clear(m[i], PG_BUSY); 162 m[i]->busy = 0; 163 } |
177 TAILQ_INSERT_TAIL(&object->un_pager.physp.physp_pglist, m[i], 178 pageq); | |
179 } 180 splx(s); 181 182 return (VM_PAGER_OK); 183} 184 185static void 186phys_pager_putpages(object, m, count, sync, rtvals) --- 36 unchanged lines hidden --- | 164 } 165 splx(s); 166 167 return (VM_PAGER_OK); 168} 169 170static void 171phys_pager_putpages(object, m, count, sync, rtvals) --- 36 unchanged lines hidden --- |