slb
slb_fill(ppc64_slb_entry_t *slb, uint64_t ea, uint64_t i)
slb->slbv = KERNEL_VSID(esid) << SLBV_VSID_SHIFT;
slb->slbe = (esid << SLBE_ESID_SHIFT) | SLBE_VALID | i;
ppc64_slb_entry_t *slb;
for (ea = hdr->kernbase, i = 0, slb = data->slbs;
ea < hdr->kernend; ea += SEGMENT_LENGTH, i++, slb++)
slb_fill(slb, ea, i);
ea += SEGMENT_LENGTH, i++, slb++) {
slb_fill(slb, ea, i);
slb->slbv |= SLBV_L;
ppc64_slb_entry_t *slb;
slb = data->slbs;
for (i = 0; i < n; i++, slb++) {
if ((slb->slbe & SLBE_VALID) == 0)
if ((slb->slbe & SLBE_ESID_MASK) != (ea & SLBE_ESID_MASK))
i, (uintmax_t)slb->slbv, (uintmax_t)slb->slbe);
return (slb);
pte_search(kvm_t *kd, ppc64_slb_entry_t *slb, uint64_t hid, kvaddr_t ea,
b = slb->slbv & SLBV_L? LP_PAGE_SHIFT : PPC64_PAGE_SHIFT;
va_vsid = (slb->slbv & SLBV_VSID_MASK) >> SLBV_VSID_SHIFT;
return (pte_search(kd, slb, LPTEH_HID, ea, p));
ppc64_slb_entry_t *slb;
if ((slb = slb_search(kd, ea)) == NULL)
return (pte_search(kd, slb, 0, ea, pte));
ppc64_slb_entry_t *slb;
slb = data->slbs;
for (i = 0; i < n; i++, slb++) {
if ((slb->slbe & SLBE_VALID) &&
(slb->slbv & SLBV_VSID_MASK) == vsid)
return (slb);
ppc64_slb_entry_t *slb;
if ((slb = slb_vsid_search(kd, vsid)) == NULL)
ea = slb->slbe & SLBE_ESID_MASK;
b = slb->slbv & SLBV_L? LP_PAGE_SHIFT : PPC64_PAGE_SHIFT;
memcpy(pcpu->pc_aim.slb, PCPU_GET(aim.slb), sizeof(pcpu->pc_aim.slb));
pcpup->pc_aim.slb[i].slbv = 0;
pcpup->pc_aim.slb[i].slbe = 0;
struct slb *slb;
slb = user_va_to_slb_entry(pm, (vm_offset_t)uaddr);
if (slb == NULL) {
slbv = slb->slbv;
struct slb *cache;
struct slb entry;
cache = PCPU_GET(aim.slb);
struct slb *slb = PCPU_GET(aim.slb);
if (!(slb[i].slbe & SLBE_VALID))
"r"(slb[i].slbv), "r"(slb[i].slbe));
static struct slb *
struct slb *retval;
struct slb *
struct slb *entry;
struct slb *slb;
slb = &ua->u.slb_entries[idx];
slb = make_new_leaf(esid, slbv, ua);
slb = make_new_leaf(esid, slbv, inter);
slb_insert_user(pm, slb);
struct slb *slbcache;
slbcache = PCPU_GET(aim.slb);
slb_insert_user(pmap_t pm, struct slb *slb)
pm->pm_slb[i] = slb;
(n_slbs + 1)*sizeof(struct slb *), NULL, NULL, NULL, NULL,
struct slb **
slb_free_user_cache(struct slb **slb)
uma_zfree(slb_cache_zone, slb);
struct slb *slbcache;
slbcache = PCPU_GET(aim.slb);
struct slb *user_entry;
struct slb slb_entries[16];
struct slb slb[64]; \
struct slb **userslb; \
struct slb **pm_slb;
struct slb *user_va_to_slb_entry(pmap_t pm, vm_offset_t va);
void slb_insert_user(pmap_t pm, struct slb *slb);
struct slb **slb_alloc_user_cache(void);
void slb_free_user_cache(struct slb **);
ASSYM(PC_KERNSLB, offsetof(struct pcpu, pc_aim.slb));
struct slb *slb = PCPU_GET(aim.slb);
if (!(slb[i].slbe & SLBE_VALID))
"r"(slb[i].slbv), "r"(slb[i].slbe));
struct slb *slb = PCPU_GET(aim.slb);
if (!(slb[i].slbe & SLBE_VALID))
"r"(slb[i].slbv), "r"(slb[i].slbe));