645 {
646 ksegtbl_entry_t *ste = &kseg_table[0];
647 struct seg *tseg;
648
649 for (; ste->st_seg; ste++) {
650 tseg = (ste->st_addrtype == KSEG_PTR_ADDR) ?
651 *ste->st_seg : (struct seg *)ste->st_seg;
652
653 if (seg == tseg)
654 return (ste);
655 }
656
657 return ((ksegtbl_entry_t *)NULL);
658 }
659
660
661 /*
662 * Count pages within each kernel segment; call cpr_sparse_seg_check()
663 * to find out whether a sparsely filled segment needs special
664 * treatment (e.g. kvseg).
665 * Todo: A "SEGOP_CPR" like SEGOP_DUMP should be introduced, the cpr
666 * module shouldn't need to know segment details like if it is
667 * sparsely filled or not (makes kseg_table obsolete).
668 */
669 pgcnt_t
670 cpr_count_seg_pages(int mapflag, bitfunc_t bitfunc)
671 {
672 struct seg *segp;
673 pgcnt_t pages;
674 ksegtbl_entry_t *ste;
675
676 pages = 0;
677 for (segp = AS_SEGFIRST(&kas); segp; segp = AS_SEGNEXT(&kas, segp)) {
678 if (ste = cpr_sparse_seg_check(segp)) {
679 pages += (ste->st_fcn)(mapflag, bitfunc, segp);
680 } else {
681 pages += cpr_count_pages(segp->s_base,
682 segp->s_size, mapflag, bitfunc, DBG_SHOWRANGE);
683 }
684 }
685
|
645 {
646 ksegtbl_entry_t *ste = &kseg_table[0];
647 struct seg *tseg;
648
649 for (; ste->st_seg; ste++) {
650 tseg = (ste->st_addrtype == KSEG_PTR_ADDR) ?
651 *ste->st_seg : (struct seg *)ste->st_seg;
652
653 if (seg == tseg)
654 return (ste);
655 }
656
657 return ((ksegtbl_entry_t *)NULL);
658 }
659
660
661 /*
662 * Count pages within each kernel segment; call cpr_sparse_seg_check()
663 * to find out whether a sparsely filled segment needs special
664 * treatment (e.g. kvseg).
665 * Todo: A "segop_cpr" like segop_dump should be introduced, the cpr
666 * module shouldn't need to know segment details like if it is
667 * sparsely filled or not (makes kseg_table obsolete).
668 */
669 pgcnt_t
670 cpr_count_seg_pages(int mapflag, bitfunc_t bitfunc)
671 {
672 struct seg *segp;
673 pgcnt_t pages;
674 ksegtbl_entry_t *ste;
675
676 pages = 0;
677 for (segp = AS_SEGFIRST(&kas); segp; segp = AS_SEGNEXT(&kas, segp)) {
678 if (ste = cpr_sparse_seg_check(segp)) {
679 pages += (ste->st_fcn)(mapflag, bitfunc, segp);
680 } else {
681 pages += cpr_count_pages(segp->s_base,
682 segp->s_size, mapflag, bitfunc, DBG_SHOWRANGE);
683 }
684 }
685
|