Lines Matching defs:kpme
44 static int sfmmu_kpme_lookup(struct kpme *, page_t *);
45 static void sfmmu_kpme_add(struct kpme *, page_t *);
46 static void sfmmu_kpme_sub(struct kpme *, page_t *);
75 * When a kpme is provided by the caller it is added to
80 hat_kpm_mapin(struct page *pp, struct kpme *kpme)
101 if (kpme != NULL) {
103 * Tolerate multiple mapins for the same kpme to avoid
106 if ((sfmmu_kpme_lookup(kpme, pp)) == 0)
107 sfmmu_kpme_add(kpme, pp);
121 * When a kpme is provided by the caller it is removed from
125 * case that a kpme is used and the underlying page is unlocked.
129 hat_kpm_mapout(struct page *pp, struct kpme *kpme, caddr_t vaddr)
148 if (kpme != NULL) {
149 ASSERT(pp == kpme->kpe_page);
150 pp = kpme->kpe_page;
153 if (sfmmu_kpme_lookup(kpme, pp) == 0)
154 panic("hat_kpm_mapout: kpme not found pp=%p",
158 sfmmu_kpme_sub(kpme, pp);
617 * Lookup a kpme in the p_kpmelist.
620 sfmmu_kpme_lookup(struct kpme *kpme, page_t *pp)
622 struct kpme *p;
625 if (p == kpme)
632 * Insert a kpme into the p_kpmelist and increment
636 sfmmu_kpme_add(struct kpme *kpme, page_t *pp)
641 kpme->kpe_prev = NULL;
642 kpme->kpe_next = pp->p_kpmelist;
645 pp->p_kpmelist->kpe_prev = kpme;
647 pp->p_kpmelist = kpme;
648 kpme->kpe_page = pp;
653 * Remove a kpme from the p_kpmelist and decrement
657 sfmmu_kpme_sub(struct kpme *kpme, page_t *pp)
661 if (kpme->kpe_prev) {
662 ASSERT(pp->p_kpmelist != kpme);
663 ASSERT(kpme->kpe_prev->kpe_page == pp);
664 kpme->kpe_prev->kpe_next = kpme->kpe_next;
666 ASSERT(pp->p_kpmelist == kpme);
667 pp->p_kpmelist = kpme->kpe_next;
670 if (kpme->kpe_next) {
671 ASSERT(kpme->kpe_next->kpe_page == pp);
672 kpme->kpe_next->kpe_prev = kpme->kpe_prev;
675 kpme->kpe_next = kpme->kpe_prev = NULL;
676 kpme->kpe_page = NULL;
1722 * Remove all kpm mappings using kpme's for pp and check that
1723 * all kpm mappings (w/ and w/o kpme's) are gone.
1729 struct kpme *kpme, *nkpme;
1737 for (kpme = pp->p_kpmelist; kpme; kpme = nkpme) {
1738 ASSERT(kpme->kpe_page == pp);
1742 "kpme=%p", (void *)pp, (void *)kpme);
1744 nkpme = kpme->kpe_next;
1747 sfmmu_kpme_sub(kpme, pp);
1751 * Also correct after mixed kpme/nonkpme mappings. If nonkpme