powerpc: introduce pte_get_hash_gslot() helper
Introduce pte_get_hash_gslot()() which returns the global slot number of the HPTE in the global hash table. This function will come in handy as we work towards re-arranging the PTE bits in the later patches. Reviewed-by: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> Signed-off-by: Ram Pai <linuxram@us.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
parent
59aa31fd6f
commit
318995b4f5
|
@ -167,6 +167,9 @@ static inline int hash__pte_none(pte_t pte)
|
|||
return (pte_val(pte) & ~H_PTE_NONE_MASK) == 0;
|
||||
}
|
||||
|
||||
unsigned long pte_get_hash_gslot(unsigned long vpn, unsigned long shift,
|
||||
int ssize, real_pte_t rpte, unsigned int subpg_index);
|
||||
|
||||
/* This low level function performs the actual PTE insertion
|
||||
* Setting the PTE depends on the MMU type and other factors. It's
|
||||
* an horrible mess that I'm not going to try to clean up now but
|
||||
|
|
|
@ -1592,6 +1592,24 @@ static inline void tm_flush_hash_page(int local)
|
|||
}
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Return the global hash slot, corresponding to the given PTE, which contains
|
||||
* the HPTE.
|
||||
*/
|
||||
unsigned long pte_get_hash_gslot(unsigned long vpn, unsigned long shift,
|
||||
int ssize, real_pte_t rpte, unsigned int subpg_index)
|
||||
{
|
||||
unsigned long hash, gslot, hidx;
|
||||
|
||||
hash = hpt_hash(vpn, shift, ssize);
|
||||
hidx = __rpte_to_hidx(rpte, subpg_index);
|
||||
if (hidx & _PTEIDX_SECONDARY)
|
||||
hash = ~hash;
|
||||
gslot = (hash & htab_hash_mask) * HPTES_PER_GROUP;
|
||||
gslot += hidx & _PTEIDX_GROUP_IX;
|
||||
return gslot;
|
||||
}
|
||||
|
||||
/* WARNING: This is called from hash_low_64.S, if you change this prototype,
|
||||
* do not forget to update the assembly call site !
|
||||
*/
|
||||
|
|
Loading…
Reference in a new issue