| From bbbf21494eb97376a1d33a7555e557aba424adb0 Mon Sep 17 00:00:00 2001 |
| From: Alexey Kardashevskiy <aik@ozlabs.ru> |
| Date: Wed, 30 Nov 2016 17:51:59 +1100 |
| Subject: [PATCH] powerpc/iommu: Pass mm_struct to init/cleanup helpers |
| |
| commit 88f54a3581eb9deaa3bd1aade40aef266d782385 upstream. |
| |
| We are going to get rid of @current references in mmu_context_boos3s64.c |
| and cache mm_struct in the VFIO container. Since mm_context_t does not |
| have reference counting, we will be using mm_struct which does have |
| the reference counter. |
| |
| This changes mm_iommu_init/mm_iommu_cleanup to receive mm_struct rather |
| than mm_context_t (which is embedded into mm). |
| |
| This should not cause any behavioral change. |
| |
| Signed-off-by: Alexey Kardashevskiy <aik@ozlabs.ru> |
| Reviewed-by: David Gibson <david@gibson.dropbear.id.au> |
| Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> |
| Signed-off-by: Paul Gortmaker <paul.gortmaker@windriver.com> |
| |
| diff --git a/arch/powerpc/include/asm/mmu_context.h b/arch/powerpc/include/asm/mmu_context.h |
| index 9d2cd0c36ec2..31deb7d813e8 100644 |
| --- a/arch/powerpc/include/asm/mmu_context.h |
| +++ b/arch/powerpc/include/asm/mmu_context.h |
| @@ -22,8 +22,8 @@ extern bool mm_iommu_preregistered(void); |
| extern long mm_iommu_get(unsigned long ua, unsigned long entries, |
| struct mm_iommu_table_group_mem_t **pmem); |
| extern long mm_iommu_put(struct mm_iommu_table_group_mem_t *mem); |
| -extern void mm_iommu_init(mm_context_t *ctx); |
| -extern void mm_iommu_cleanup(mm_context_t *ctx); |
| +extern void mm_iommu_init(struct mm_struct *mm); |
| +extern void mm_iommu_cleanup(struct mm_struct *mm); |
| extern struct mm_iommu_table_group_mem_t *mm_iommu_lookup(unsigned long ua, |
| unsigned long size); |
| extern struct mm_iommu_table_group_mem_t *mm_iommu_find(unsigned long ua, |
| diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c |
| index dba265c586df..942cf4907796 100644 |
| --- a/arch/powerpc/kernel/setup-common.c |
| +++ b/arch/powerpc/kernel/setup-common.c |
| @@ -906,7 +906,7 @@ void __init setup_arch(char **cmdline_p) |
| init_mm.context.pte_frag = NULL; |
| #endif |
| #ifdef CONFIG_SPAPR_TCE_IOMMU |
| - mm_iommu_init(&init_mm.context); |
| + mm_iommu_init(&init_mm); |
| #endif |
| irqstack_early_init(); |
| exc_lvl_early_init(); |
| diff --git a/arch/powerpc/mm/mmu_context_book3s64.c b/arch/powerpc/mm/mmu_context_book3s64.c |
| index b114f8b93ec9..ad8273590975 100644 |
| --- a/arch/powerpc/mm/mmu_context_book3s64.c |
| +++ b/arch/powerpc/mm/mmu_context_book3s64.c |
| @@ -115,7 +115,7 @@ int init_new_context(struct task_struct *tsk, struct mm_struct *mm) |
| mm->context.pte_frag = NULL; |
| #endif |
| #ifdef CONFIG_SPAPR_TCE_IOMMU |
| - mm_iommu_init(&mm->context); |
| + mm_iommu_init(mm); |
| #endif |
| return 0; |
| } |
| @@ -160,7 +160,7 @@ static inline void destroy_pagetable_page(struct mm_struct *mm) |
| void destroy_context(struct mm_struct *mm) |
| { |
| #ifdef CONFIG_SPAPR_TCE_IOMMU |
| - mm_iommu_cleanup(&mm->context); |
| + mm_iommu_cleanup(mm); |
| #endif |
| |
| #ifdef CONFIG_PPC_ICSWX |
| diff --git a/arch/powerpc/mm/mmu_context_iommu.c b/arch/powerpc/mm/mmu_context_iommu.c |
| index da6a2168ae9e..699cd80f4e39 100644 |
| --- a/arch/powerpc/mm/mmu_context_iommu.c |
| +++ b/arch/powerpc/mm/mmu_context_iommu.c |
| @@ -300,16 +300,17 @@ void mm_iommu_mapped_dec(struct mm_iommu_table_group_mem_t *mem) |
| } |
| EXPORT_SYMBOL_GPL(mm_iommu_mapped_dec); |
| |
| -void mm_iommu_init(mm_context_t *ctx) |
| +void mm_iommu_init(struct mm_struct *mm) |
| { |
| - INIT_LIST_HEAD_RCU(&ctx->iommu_group_mem_list); |
| + INIT_LIST_HEAD_RCU(&mm->context.iommu_group_mem_list); |
| } |
| |
| -void mm_iommu_cleanup(mm_context_t *ctx) |
| +void mm_iommu_cleanup(struct mm_struct *mm) |
| { |
| struct mm_iommu_table_group_mem_t *mem, *tmp; |
| |
| - list_for_each_entry_safe(mem, tmp, &ctx->iommu_group_mem_list, next) { |
| + list_for_each_entry_safe(mem, tmp, &mm->context.iommu_group_mem_list, |
| + next) { |
| list_del_rcu(&mem->next); |
| mm_iommu_do_free(mem); |
| } |
| -- |
| 2.12.0 |
| |