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: Alexey Kardashevskiy <aik@ozlabs.ru> Reviewed-by: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
This commit is contained in:
parent
f6853eb561
commit
88f54a3581
|
@ -23,8 +23,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,
|
||||
|
|
|
@ -915,7 +915,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();
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -373,16 +373,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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue