Lines Matching defs:ht

111 static x86pte_t hati_update_pte(htable_t *ht, uint_t entry, x86pte_t expected,
246 htable_t *ht; /* top level htable */
308 ht = htable_create(hat, (uintptr_t)0, TOP_LEVEL(hat), NULL);
309 hat->hat_htable = ht;
322 ht = hat->hat_htable;
324 ht = htable_create(hat, va, rp->hkr_level,
327 start = htable_va2entry(va, ht);
328 cnt = HTABLE_NUM_PTES(ht) - start;
333 cnt = htable_va2entry(rp->hkr_end_va, ht) -
337 if (ht->ht_flags & HTABLE_VLP) {
346 x86pte_copy(src, ht, start, cnt);
896 htable_t *ht;
903 (ht = htable_getpage(kas.a_hat, va, NULL)) !=
905 htable_release(ht);
1146 htable_t *ht = NULL;
1165 (void) htable_walk(hat, &ht, &vaddr, eaddr);
1166 if (ht == NULL)
1174 l = ht->ht_level;
1175 if (ht->ht_flags & HTABLE_SHARED_PFN) {
1176 vaddr = ht->ht_vaddr + LEVEL_SIZE(l + 1);
1177 htable_release(ht);
1178 ht = NULL;
1185 if (ht->ht_lock_cnt == 0)
1193 if (ht->ht_lock_cnt > 0 && l == 0)
1194 vaddr = ht->ht_vaddr + LEVEL_SIZE(1);
1198 if (ht)
1199 htable_release(ht);
1297 htable_t *ht,
1304 hat_t *hat = ht->ht_hat;
1306 level_t l = ht->ht_level;
1323 HTABLE_LOCK_INC(ht);
1331 hm = hment_prepare(ht, entry, pp);
1337 old_pte = x86pte_set(ht, entry, pte, pte_ptr);
1344 HTABLE_LOCK_DEC(ht);
1360 hment_assign(ht, entry, pp, hm);
1366 if (ht->ht_flags & HTABLE_VLP) {
1372 HTABLE_INC(ht->ht_valid_cnt);
1429 htable_t *ht;
1449 ht = htable_lookup(hat, va, level);
1457 if (ht == NULL) {
1458 ht = htable_create(hat, va, level, NULL);
1459 ASSERT(ht != NULL);
1461 entry = htable_va2entry(va, ht);
1466 ASSERT(ht->ht_busy > 0);
1467 if (ht->ht_vaddr > va || va > HTABLE_LAST_PAGE(ht))
1469 (void *)ht, (void *)va);
1470 ASSERT(ht->ht_level == level);
1484 rv = hati_pte_map(ht, entry, pp, pte, flags, NULL);
1489 htable_release(ht);
1508 htable_t *ht;
1527 ht = mmu.kmap_htables[(va - mmu.kmap_htables[0]->ht_vaddr) >>
1529 entry = htable_va2entry(va, ht);
1532 (void) hati_pte_map(ht, entry, pp, pte, flags, pte_ptr);
1875 htable_t *ht = NULL;
1891 (void) htable_walk(hat, &ht, &vaddr, eaddr);
1892 if (ht == NULL)
1897 if (ht->ht_lock_cnt < 1)
1899 "htable=%p, vaddr=%p\n", (void *)ht, (void *)vaddr);
1900 HTABLE_LOCK_DEC(ht);
1902 vaddr += LEVEL_SIZE(ht->ht_level);
1904 if (ht)
1905 htable_release(ht);
2174 htable_t *ht,
2181 hat_t *hat = ht->ht_hat;
2184 level_t l = ht->ht_level;
2191 ASSERT(ht->ht_lock_cnt > 0);
2192 HTABLE_LOCK_DEC(ht);
2201 ASSERT(ht->ht_busy > 0);
2214 FMT_PTE " ht=%lx entry=0x%x pte_ptr=%lx",
2215 old_pte, (uintptr_t)ht, entry,
2221 old_pte = x86pte_inval(ht, entry, old_pte, pte_ptr, tlb);
2256 hm = hment_remove(pp, ht, entry);
2265 ASSERT(ht->ht_valid_cnt > 0);
2266 HTABLE_DEC(ht->ht_valid_cnt);
2279 htable_t *ht;
2295 ht = mmu.kmap_htables[(va - mmu.kmap_htables[0]->ht_vaddr)
2297 entry = htable_va2entry(va, ht);
2302 hat_pte_unmap(ht, entry, flags, old_pte, pte_ptr, B_TRUE);
2383 htable_t *ht = NULL;
2400 ht = htable_getpte(hat, vaddr, &entry, &old_pte, 0);
2401 if (ht != NULL) {
2403 hat_pte_unmap(ht, entry, flags, old_pte,
2406 htable_release(ht);
2413 old_pte = htable_walk(hat, &ht, &vaddr, eaddr);
2414 if (ht == NULL)
2426 (r_cnt > 0 && r[r_cnt - 1].rng_level != ht->ht_level)) {
2433 r[r_cnt].rng_level = ht->ht_level;
2446 entry = htable_va2entry(vaddr, ht);
2447 hat_pte_unmap(ht, entry, flags, old_pte, NULL, B_FALSE);
2448 ASSERT(ht->ht_level <= mmu.max_page_level);
2449 vaddr += LEVEL_SIZE(ht->ht_level);
2453 if (ht)
2454 htable_release(ht);
2505 htable_t *ht = NULL;
2518 for (; vaddr < eaddr; vaddr += LEVEL_SIZE(ht->ht_level)) {
2520 pte = htable_walk(hat, &ht, &vaddr, eaddr);
2521 if (ht == NULL)
2523 entry = htable_va2entry(vaddr, ht);
2533 pp = page_numtopp_nolock(PTE2PFN(pte, ht->ht_level));
2538 pte = x86pte_get(ht, entry);
2556 pte = hati_update_pte(ht, entry, pte, new);
2565 hati_sync_pte_to_page(pp, save_pte, ht->ht_level);
2569 if (ht)
2570 htable_release(ht);
2594 htable_t *ht = NULL;
2602 ht = htable_getpte(hat, vaddr, NULL, &pte, mmu.max_page_level);
2603 if (ht == NULL)
2606 if (!PTE_ISVALID(pte) || !PTE_ISPAGE(pte, ht->ht_level)) {
2607 htable_release(ht);
2620 htable_release(ht);
2636 htable_t *ht = NULL;
2645 for (; vaddr < eaddr; vaddr += LEVEL_SIZE(ht->ht_level)) {
2647 oldpte = htable_walk(hat, &ht, &vaddr, eaddr);
2648 if (ht == NULL)
2653 pp = page_numtopp_nolock(PTE2PFN(oldpte, ht->ht_level));
2717 entry = htable_va2entry(vaddr, ht);
2718 oldpte = hati_update_pte(ht, entry, oldpte, newpte);
2726 if (ht)
2727 htable_release(ht);
2771 htable_t *ht;
2777 ht = htable_getpage(hat, vaddr, NULL);
2778 if (ht == NULL)
2780 pagesize = LEVEL_SIZE(ht->ht_level);
2781 htable_release(ht);
2795 htable_t *ht;
2825 ht = htable_getpage(hat, vaddr, &entry);
2826 if (ht == NULL) {
2830 ASSERT(vaddr >= ht->ht_vaddr);
2831 ASSERT(vaddr <= HTABLE_LAST_PAGE(ht));
2832 pfn = PTE2PFN(x86pte_get(ht, entry), ht->ht_level);
2833 if (ht->ht_level > 0)
2834 pfn += mmu_btop(vaddr & LEVEL_OFFSET(ht->ht_level));
2835 htable_release(ht);
2850 htable_t *ht;
2871 ht = htable_getpage(hat, vaddr, &entry);
2872 htable_release(ht);
2873 return (ht != NULL);
2921 htable_t *ht;
2964 ht = htable_lookup(hat, vaddr, l);
2965 if (ht != NULL) {
2966 if (ht->ht_flags & HTABLE_SHARED_PFN)
2968 htable_release(ht);
3019 ht = htable_create(hat, vaddr, l, ism_ht);
3021 ASSERT(ht->ht_flags & HTABLE_SHARED_PFN);
3022 ASSERT(ht->ht_shares == ism_ht);
3024 (ism_ht->ht_valid_cnt - ht->ht_valid_cnt) <<
3025 (LEVEL_SHIFT(ht->ht_level) - MMU_PAGESHIFT);
3026 ht->ht_valid_cnt = ism_ht->ht_valid_cnt;
3027 htable_release(ht);
3106 htable_t *ht = NULL;
3134 ht = htable_lookup(hat, vaddr, l);
3135 if (ht == NULL)
3137 if (ht->ht_flags & HTABLE_SHARED_PFN) {
3142 hat->hat_ism_pgcnt -= ht->ht_valid_cnt <<
3143 (LEVEL_SHIFT(ht->ht_level) - MMU_PAGESHIFT);
3144 ht->ht_valid_cnt = 0;
3147 htable_release(ht);
3187 htable_t *ht;
3199 while ((hm = hment_walk(pp, &ht, &entry, hm)) != NULL) {
3200 if (ht->ht_level < pszc)
3202 old = x86pte_get(ht, entry);
3208 if (PTE2PFN(old, ht->ht_level) != pp->p_pagenum ||
3218 old = hati_update_pte(ht, entry, old, new);
3329 hati_page_unmap(page_t *pp, htable_t *ht, uint_t entry)
3341 htable_acquire(ht);
3346 old_pte = x86pte_inval(ht, entry, 0, NULL, B_TRUE);
3347 if (PTE2PFN(old_pte, ht->ht_level) != pfn) {
3349 " pfn being unmapped is %lx ht=0x%lx entry=0x%x",
3350 old_pte, pfn, (uintptr_t)ht, entry);
3356 ASSERT(ht->ht_valid_cnt > 0);
3357 HTABLE_DEC(ht->ht_valid_cnt);
3358 PGCNT_DEC(ht->ht_hat, ht->ht_level);
3364 hati_sync_pte_to_page(pp, old_pte, ht->ht_level);
3369 hm = hment_remove(pp, ht, entry);
3376 htable_release(ht);
3395 htable_t *ht;
3426 hm = hment_walk(cur_pp, &ht, &entry, prev);
3455 level = ht->ht_level;
3464 hm = hati_page_unmap(cur_pp, ht, entry);
3666 htable_t *ht;
3702 while ((hm = hment_walk(pp, &ht, &entry, hm)) != NULL) {
3703 if (ht->ht_level < pszc)
3705 old = x86pte_get(ht, entry);
3708 ASSERT(PTE2PFN(old, ht->ht_level) == pp->p_pagenum);
3722 old = hati_update_pte(ht, entry, old, new);
3734 hati_sync_pte_to_page(pp, old, ht->ht_level);
3873 htable_t *ht;
3882 ht = htable_getpte(kas.a_hat, va, &entry, &oldpte, 0);
3883 if (ht == NULL) {
3884 ht = htable_create(kas.a_hat, va, 0, NULL);
3885 entry = htable_va2entry(va, ht);
3886 ASSERT(ht->ht_level == 0);
3887 oldpte = x86pte_get(ht, entry);
3891 "ht=%p, entry=%d, pte=" FMT_PTE, (void *)ht, entry, oldpte);
3896 HTABLE_INC(ht->ht_valid_cnt);
3901 htable_release(ht);
3903 p = PT_INDEX_PHYSADDR(pfn_to_pa(ht->ht_pfn), entry);
3916 htable_t *ht;
3941 ht = htable_getpte(kas.a_hat, ALIGN2PAGE(addr), NULL, NULL, 0);
3942 if (ht == NULL)
3944 ASSERT(ht->ht_level == 0);
3945 HTABLE_DEC(ht->ht_valid_cnt);
3946 htable_release(ht);
3970 htable_t *ht;
3975 ht = htable_getpte(kas.a_hat, va, &entry, NULL, 0);
3976 ASSERT(ht != NULL);
3977 ASSERT(ht->ht_level == 0);
3978 ASSERT(ht->ht_valid_cnt > 0);
3979 ASSERT(ht->ht_pfn == mmu_btop(pte_pa));
3980 htable_release(ht);
4058 htable_t *ht = NULL;
4068 pte = htable_walk(kas.a_hat, &ht, &vaddr, high);
4069 if (ht == NULL)
4072 level = ht->ht_level;
4073 entry = htable_va2entry(vaddr, ht);
4080 (void) x86pte_inval(ht, entry, 0, NULL, B_TRUE);
4081 ASSERT(ht->ht_valid_cnt > 0);
4082 HTABLE_DEC(ht->ht_valid_cnt);
4083 PGCNT_DEC(ht->ht_hat, ht->ht_level);
4085 vaddr += LEVEL_SIZE(ht->ht_level);
4087 if (ht)
4088 htable_release(ht);
4100 hati_update_pte(htable_t *ht, uint_t entry, x86pte_t expected, x86pte_t new)
4111 ASSERT(!pfn_is_foreign(PTE2PFN(expected, ht->ht_level)));
4112 pp = page_numtopp_nolock(PTE2PFN(expected, ht->ht_level));
4121 replaced = x86pte_update(ht, entry, expected, new);
4129 pgcnt_t pgcnt = page_get_pagecnt(ht->ht_level);
4138 ASSERT(pp->p_szc >= ht->ht_level);
4458 htable_t *ht;
4463 ht = htable_create(hat, (uintptr_t)addr, 0, NULL);
4471 entry = htable_va2entry((uintptr_t)addr, ht);
4472 base_ma = pa_to_ma(ptob(ht->ht_pfn));
4481 htable_t *ht;
4485 ht = htable_lookup(hat, (uintptr_t)addr, 0);
4486 ASSERT(ht != NULL);
4487 ASSERT(ht->ht_busy >= 2);
4488 htable_release(ht);
4489 htable_release(ht);