Deleted Added
full compact
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 ---