Commit 88f54a35 authored by Alexey Kardashevskiy's avatar Alexey Kardashevskiy Committed by Michael Ellerman

powerpc/iommu: Pass mm_struct to init/cleanup helpers

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: default avatarAlexey Kardashevskiy <aik@ozlabs.ru>
Reviewed-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
parent f6853eb5
...@@ -23,8 +23,8 @@ extern bool mm_iommu_preregistered(void); ...@@ -23,8 +23,8 @@ extern bool mm_iommu_preregistered(void);
extern long mm_iommu_get(unsigned long ua, unsigned long entries, extern long mm_iommu_get(unsigned long ua, unsigned long entries,
struct mm_iommu_table_group_mem_t **pmem); struct mm_iommu_table_group_mem_t **pmem);
extern long mm_iommu_put(struct mm_iommu_table_group_mem_t *mem); 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_init(struct mm_struct *mm);
extern void mm_iommu_cleanup(mm_context_t *ctx); extern void mm_iommu_cleanup(struct mm_struct *mm);
extern struct mm_iommu_table_group_mem_t *mm_iommu_lookup(unsigned long ua, extern struct mm_iommu_table_group_mem_t *mm_iommu_lookup(unsigned long ua,
unsigned long size); unsigned long size);
extern struct mm_iommu_table_group_mem_t *mm_iommu_find(unsigned long ua, extern struct mm_iommu_table_group_mem_t *mm_iommu_find(unsigned long ua,
......
...@@ -915,7 +915,7 @@ void __init setup_arch(char **cmdline_p) ...@@ -915,7 +915,7 @@ void __init setup_arch(char **cmdline_p)
init_mm.context.pte_frag = NULL; init_mm.context.pte_frag = NULL;
#endif #endif
#ifdef CONFIG_SPAPR_TCE_IOMMU #ifdef CONFIG_SPAPR_TCE_IOMMU
mm_iommu_init(&init_mm.context); mm_iommu_init(&init_mm);
#endif #endif
irqstack_early_init(); irqstack_early_init();
exc_lvl_early_init(); exc_lvl_early_init();
......
...@@ -115,7 +115,7 @@ int init_new_context(struct task_struct *tsk, struct mm_struct *mm) ...@@ -115,7 +115,7 @@ int init_new_context(struct task_struct *tsk, struct mm_struct *mm)
mm->context.pte_frag = NULL; mm->context.pte_frag = NULL;
#endif #endif
#ifdef CONFIG_SPAPR_TCE_IOMMU #ifdef CONFIG_SPAPR_TCE_IOMMU
mm_iommu_init(&mm->context); mm_iommu_init(mm);
#endif #endif
return 0; return 0;
} }
...@@ -160,7 +160,7 @@ static inline void destroy_pagetable_page(struct mm_struct *mm) ...@@ -160,7 +160,7 @@ static inline void destroy_pagetable_page(struct mm_struct *mm)
void destroy_context(struct mm_struct *mm) void destroy_context(struct mm_struct *mm)
{ {
#ifdef CONFIG_SPAPR_TCE_IOMMU #ifdef CONFIG_SPAPR_TCE_IOMMU
mm_iommu_cleanup(&mm->context); mm_iommu_cleanup(mm);
#endif #endif
#ifdef CONFIG_PPC_ICSWX #ifdef CONFIG_PPC_ICSWX
......
...@@ -373,16 +373,17 @@ void mm_iommu_mapped_dec(struct mm_iommu_table_group_mem_t *mem) ...@@ -373,16 +373,17 @@ void mm_iommu_mapped_dec(struct mm_iommu_table_group_mem_t *mem)
} }
EXPORT_SYMBOL_GPL(mm_iommu_mapped_dec); 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; 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); list_del_rcu(&mem->next);
mm_iommu_do_free(mem); mm_iommu_do_free(mem);
} }
......
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