Commit 1b644f57 authored by Anton Blanchard's avatar Anton Blanchard Committed by Michael Ellerman

powerpc/mm: Wire up hpte_removebolted for powernv

Adds support for removing bolted (i.e kernel linear mapping) mappings on
powernv. This is needed to support memory hot unplug operations which
are required for the teardown of DAX/PMEM devices.
Reviewed-by: default avatarBalbir Singh <bsingharora@gmail.com>
Reviewed-by: default avatarRashmica Gupta <rashmica.g@gmail.com>
Signed-off-by: default avatarAnton Blanchard <anton@samba.org>
Signed-off-by: default avatarOliver O'Halloran <oohall@gmail.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
parent ebd31197
...@@ -413,6 +413,38 @@ static void native_hpte_updateboltedpp(unsigned long newpp, unsigned long ea, ...@@ -413,6 +413,38 @@ static void native_hpte_updateboltedpp(unsigned long newpp, unsigned long ea,
tlbie(vpn, psize, psize, ssize, 0); tlbie(vpn, psize, psize, ssize, 0);
} }
/*
* Remove a bolted kernel entry. Memory hotplug uses this.
*
* No need to lock here because we should be the only user.
*/
static int native_hpte_removebolted(unsigned long ea, int psize, int ssize)
{
unsigned long vpn;
unsigned long vsid;
long slot;
struct hash_pte *hptep;
vsid = get_kernel_vsid(ea, ssize);
vpn = hpt_vpn(ea, vsid, ssize);
slot = native_hpte_find(vpn, psize, ssize);
if (slot == -1)
return -ENOENT;
hptep = htab_address + slot;
VM_WARN_ON(!(be64_to_cpu(hptep->v) & HPTE_V_BOLTED));
/* Invalidate the hpte */
hptep->v = 0;
/* Invalidate the TLB */
tlbie(vpn, psize, psize, ssize, 0);
return 0;
}
static void native_hpte_invalidate(unsigned long slot, unsigned long vpn, static void native_hpte_invalidate(unsigned long slot, unsigned long vpn,
int bpsize, int apsize, int ssize, int local) int bpsize, int apsize, int ssize, int local)
{ {
...@@ -731,6 +763,7 @@ void __init hpte_init_native(void) ...@@ -731,6 +763,7 @@ void __init hpte_init_native(void)
mmu_hash_ops.hpte_invalidate = native_hpte_invalidate; mmu_hash_ops.hpte_invalidate = native_hpte_invalidate;
mmu_hash_ops.hpte_updatepp = native_hpte_updatepp; mmu_hash_ops.hpte_updatepp = native_hpte_updatepp;
mmu_hash_ops.hpte_updateboltedpp = native_hpte_updateboltedpp; mmu_hash_ops.hpte_updateboltedpp = native_hpte_updateboltedpp;
mmu_hash_ops.hpte_removebolted = native_hpte_removebolted;
mmu_hash_ops.hpte_insert = native_hpte_insert; mmu_hash_ops.hpte_insert = native_hpte_insert;
mmu_hash_ops.hpte_remove = native_hpte_remove; mmu_hash_ops.hpte_remove = native_hpte_remove;
mmu_hash_ops.hpte_clear_all = native_hpte_clear; mmu_hash_ops.hpte_clear_all = native_hpte_clear;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment