Hi Oliver,

> From: Rashmica Gupta <rashmic...@gmail.com>
> 
> 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.
> 
> Cc: Rashmica Gupta <rashmic...@gmail.com>
> Cc: Anton Blanchard <an...@samba.org>
> Signed-off-by: Oliver O'Halloran <ooh...@gmail.com>
> ---
> Could the original author of this add their S-o-b? I pulled it out of
> Rashmica's memtrace patch, but I remember someone saying Anton wrote
> it originally.

I did.

Signed-off-by: Anton Blanchard <an...@samba.org>

Anton

> ---
>  arch/powerpc/mm/hash_native_64.c | 31 +++++++++++++++++++++++++++++++
>  1 file changed, 31 insertions(+)
> 
> diff --git a/arch/powerpc/mm/hash_native_64.c
> b/arch/powerpc/mm/hash_native_64.c index 65bb8f33b399..9ba91d4905a4
> 100644 --- a/arch/powerpc/mm/hash_native_64.c
> +++ b/arch/powerpc/mm/hash_native_64.c
> @@ -407,6 +407,36 @@ static void native_hpte_updateboltedpp(unsigned
> long newpp, unsigned long ea, 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;
> +
> +     /* 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, int bpsize, int apsize, int ssize, int local)
>  {
> @@ -725,6 +755,7 @@ void __init hpte_init_native(void)
>       mmu_hash_ops.hpte_invalidate    = native_hpte_invalidate;
>       mmu_hash_ops.hpte_updatepp      = native_hpte_updatepp;
>       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_remove        = native_hpte_remove;
>       mmu_hash_ops.hpte_clear_all     = native_hpte_clear;

Reply via email to