|
Link Here
|
| 518 |
swpctrie_zone = uma_zcreate("swpctrie", pctrie_node_size(), NULL, NULL, |
530 |
swpctrie_zone = uma_zcreate("swpctrie", pctrie_node_size(), NULL, NULL, |
| 519 |
pctrie_zone_init, NULL, UMA_ALIGN_PTR, |
531 |
pctrie_zone_init, NULL, UMA_ALIGN_PTR, |
| 520 |
UMA_ZONE_NOFREE | UMA_ZONE_VM); |
532 |
UMA_ZONE_NOFREE | UMA_ZONE_VM); |
| 521 |
if (swpctrie_zone == NULL) |
533 |
if (swpctrie_zone == NULL) { |
| 522 |
panic("failed to create swap pctrie zone."); |
534 |
printf("failed to create swap pctrie zone.\n"); |
|
|
535 |
goto error; |
| 536 |
} |
| 523 |
swblk_zone = uma_zcreate("swblk", sizeof(struct swblk), NULL, NULL, |
537 |
swblk_zone = uma_zcreate("swblk", sizeof(struct swblk), NULL, NULL, |
| 524 |
NULL, NULL, _Alignof(struct swblk) - 1, |
538 |
NULL, NULL, _Alignof(struct swblk) - 1, |
| 525 |
UMA_ZONE_NOFREE | UMA_ZONE_VM); |
539 |
UMA_ZONE_NOFREE | UMA_ZONE_VM); |
| 526 |
if (swblk_zone == NULL) |
540 |
if (swblk_zone == NULL) { |
| 527 |
panic("failed to create swap blk zone."); |
541 |
printf("failed to create swap blk zone.\n"); |
|
|
542 |
goto error; |
| 543 |
} |
| 528 |
n2 = n; |
544 |
n2 = n; |
| 529 |
do { |
545 |
do { |
| 530 |
if (uma_zone_reserve_kva(swblk_zone, n)) |
546 |
if (uma_zone_reserve_kva(swblk_zone, n)) |
|
Link Here
|
| 546 |
swap_maxpages = n * SWAP_META_PAGES; |
573 |
swap_maxpages = n * SWAP_META_PAGES; |
| 547 |
swzone = n * sizeof(struct swblk); |
574 |
swzone = n * sizeof(struct swblk); |
| 548 |
if (!uma_zone_reserve_kva(swpctrie_zone, n)) |
575 |
if (!uma_zone_reserve_kva(swpctrie_zone, n)) |
| 549 |
printf("Cannot reserve swap pctrie zone, " |
576 |
printf("Cannot reserve swap pctrie zone, " |
| 550 |
"reduce kern.maxswzone.\n"); |
577 |
"reduce kern.maxswzone.\n"); |
|
|
578 |
#if !defined(NO_SWAPPING) |
| 579 |
vm_swap_enabled = 1; |
| 580 |
#endif |
| 581 |
return; |
| 582 |
error: |
| 583 |
/* This works okay and disables swapping like swapon command. |
| 584 |
However,uma_zone_reserve_kva allocates memory from KVA. |
| 585 |
It will be much better enhancement if we can free them, too */ |
| 586 |
if (swblk_zone != NULL) { |
| 587 |
uma_zdestroy(swblk_zone); |
| 588 |
swblk_zone = NULL; |
| 589 |
} |
| 590 |
if (swpctrie_zone != NULL) { |
| 591 |
uma_zdestroy(swpctrie_zone); |
| 592 |
swpctrie_zone = NULL; |
| 593 |
} |
| 551 |
} |
594 |
} |
| 552 |
|
595 |
|
| 553 |
static vm_object_t |
596 |
static vm_object_t |