|
Lines 212-218
Link Here
|
| 212 |
/* the biggest memory array is the second group of pages */ |
212 |
/* the biggest memory array is the second group of pages */ |
| 213 |
vm_paddr_t end; |
213 |
vm_paddr_t end; |
| 214 |
vm_paddr_t biggestsize; |
214 |
vm_paddr_t biggestsize; |
| 215 |
vm_paddr_t low_water, high_water; |
215 |
vm_paddr_t low_water; |
| 216 |
int biggestone; |
216 |
int biggestone; |
| 217 |
|
217 |
|
| 218 |
vm_paddr_t total; |
218 |
vm_paddr_t total; |
|
Lines 221-226
Link Here
|
| 221 |
biggestsize = 0; |
221 |
biggestsize = 0; |
| 222 |
biggestone = 0; |
222 |
biggestone = 0; |
| 223 |
nblocks = 0; |
223 |
nblocks = 0; |
|
|
224 |
page_range = 0; |
| 224 |
vaddr = round_page(vaddr); |
225 |
vaddr = round_page(vaddr); |
| 225 |
|
226 |
|
| 226 |
for (i = 0; phys_avail[i + 1]; i += 2) { |
227 |
for (i = 0; phys_avail[i + 1]; i += 2) { |
|
Lines 229-248
Link Here
|
| 229 |
} |
230 |
} |
| 230 |
|
231 |
|
| 231 |
low_water = phys_avail[0]; |
232 |
low_water = phys_avail[0]; |
| 232 |
high_water = phys_avail[1]; |
|
|
| 233 |
|
233 |
|
| 234 |
for (i = 0; phys_avail[i + 1]; i += 2) { |
234 |
for (i = 0; phys_avail[i + 1]; i += 2) { |
| 235 |
vm_paddr_t size = phys_avail[i + 1] - phys_avail[i]; |
235 |
vm_paddr_t size = phys_avail[i + 1] - phys_avail[i]; |
| 236 |
|
236 |
|
| 237 |
if (size > biggestsize) { |
237 |
if ((size > biggestsize) && (size > (boot_pages * UMA_SLAB_SIZE))) { |
| 238 |
biggestone = i; |
238 |
biggestone = i; |
| 239 |
biggestsize = size; |
239 |
biggestsize = size; |
| 240 |
} |
240 |
} |
|
|
241 |
|
| 241 |
if (phys_avail[i] < low_water) |
242 |
if (phys_avail[i] < low_water) |
| 242 |
low_water = phys_avail[i]; |
243 |
low_water = phys_avail[i]; |
| 243 |
if (phys_avail[i + 1] > high_water) |
|
|
| 244 |
high_water = phys_avail[i + 1]; |
| 245 |
++nblocks; |
244 |
++nblocks; |
|
|
245 |
page_range += size/PAGE_SIZE; |
| 246 |
total += size; |
246 |
total += size; |
| 247 |
} |
247 |
} |
| 248 |
|
248 |
|
|
Lines 297-304
Link Here
|
| 297 |
* use (taking into account the overhead of a page structure per |
297 |
* use (taking into account the overhead of a page structure per |
| 298 |
* page). |
298 |
* page). |
| 299 |
*/ |
299 |
*/ |
|
|
300 |
|
| 300 |
first_page = low_water / PAGE_SIZE; |
301 |
first_page = low_water / PAGE_SIZE; |
| 301 |
page_range = high_water / PAGE_SIZE - first_page; |
302 |
total = page_range * PAGE_SIZE; |
| 302 |
npages = (total - (page_range * sizeof(struct vm_page)) - |
303 |
npages = (total - (page_range * sizeof(struct vm_page)) - |
| 303 |
(end - new_end)) / PAGE_SIZE; |
304 |
(end - new_end)) / PAGE_SIZE; |
| 304 |
end = new_end; |
305 |
end = new_end; |