/* * see if the entry is inserted into secondary pteg
*/
result = lv1_read_htab_entries(PS3_LPAR_VAS_ID_CURRENT,
inserted_index & ~0x3UL,
&hpte_v_array[0], &hpte_v_array[1],
&hpte_v_array[2], &hpte_v_array[3],
&hpte_rs);
BUG_ON(result);
if (hpte_v_array[inserted_index % 4] & HPTE_V_SECONDARY)
ret = (inserted_index & 7) | (1 << 3); else
ret = inserted_index & 7;
spin_unlock_irqrestore(&ps3_htab_lock, flags);
return ret;
}
staticlong ps3_hpte_remove(unsignedlong hpte_group)
{
panic("ps3_hpte_remove() not implemented"); return 0;
}
staticlong ps3_hpte_updatepp(unsignedlong slot, unsignedlong newpp, unsignedlong vpn, int psize, int apsize, int ssize, unsignedlong inv_flags)
{ int result;
u64 hpte_v, want_v, hpte_rs;
u64 hpte_v_array[4]; unsignedlong flags; long ret;
/* * As lv1_read_htab_entries() does not give us the RPN, we can * not synthesize the new hpte_r value here, and therefore can * not update the hpte with lv1_insert_htab_entry(), so we * instead invalidate it and ask the caller to update it via * ps3_hpte_insert() by returning a -1 value.
*/ if (!HPTE_V_COMPARE(hpte_v, want_v) || !(hpte_v & HPTE_V_VALID)) { /* not found */
ret = -1;
} else { /* entry found, just invalidate it */
result = lv1_write_htab_entry(PS3_LPAR_VAS_ID_CURRENT,
slot, 0, 0);
ret = -1;
}
staticvoid ps3_hpte_updateboltedpp(unsignedlong newpp, unsignedlong ea, int psize, int ssize)
{
pr_info("ps3_hpte_updateboltedpp() not implemented");
}
staticvoid ps3_hpte_invalidate(unsignedlong slot, unsignedlong vpn, int psize, int apsize, int ssize, int local)
{ unsignedlong flags; int result;
spin_lock_irqsave(&ps3_htab_lock, flags);
result = lv1_write_htab_entry(PS3_LPAR_VAS_ID_CURRENT, slot, 0, 0);
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.