static long iSeries_hpte_remove(unsigned long hpte_group) { unsigned long slot_offset; int i; HPTE lhpte; /* Pick a random slot to start at */ slot_offset = mftb() & 0x7; iSeries_hlock(hpte_group); for (i = 0; i < HPTES_PER_GROUP; i++) { lhpte.dw0.dword0 = iSeries_hpte_getword0(hpte_group + slot_offset); if (!lhpte.dw0.dw0.bolted) { HvCallHpt_invalidateSetSwBitsGet(hpte_group + slot_offset, 0, 0); iSeries_hunlock(hpte_group); return i; } slot_offset++; slot_offset &= 0x7; } iSeries_hunlock(hpte_group); return -1; }
static void iSeries_hpte_invalidate(unsigned long slot, unsigned long va, int large, int local) { HPTE lhpte; unsigned long avpn = va >> 23; unsigned long flags; local_irq_save(flags); iSeries_hlock(slot); lhpte.dw0.dword0 = iSeries_hpte_getword0(slot); if ((lhpte.dw0.dw0.avpn == avpn) && lhpte.dw0.dw0.v) HvCallHpt_invalidateSetSwBitsGet(slot, 0, 0); iSeries_hunlock(slot); local_irq_restore(flags); }
static void iSeries_hpte_invalidate(unsigned long slot, unsigned long va, int psize, int local) { unsigned long hpte_v; unsigned long avpn = va >> 23; unsigned long flags; local_irq_save(flags); iSeries_hlock(slot); hpte_v = iSeries_hpte_getword0(slot); if ((HPTE_V_AVPN_VAL(hpte_v) == avpn) && (hpte_v & HPTE_V_VALID)) HvCallHpt_invalidateSetSwBitsGet(slot, 0, 0); iSeries_hunlock(slot); local_irq_restore(flags); }