Commit be3ebfe8 authored by Ian Munsie's avatar Ian Munsie Committed by Michael Ellerman

powerpc/cell: Make spu_flush_all_slbs() generic

This moves spu_flush_all_slbs() into a generic call copro_flush_all_slbs().

This will be useful when we add cxl which also needs a similar SLB flush call.
Signed-off-by: default avatarIan Munsie <imunsie@au1.ibm.com>
Signed-off-by: default avatarMichael Neuling <mikey@neuling.org>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
parent 73d16a6e
...@@ -20,4 +20,10 @@ int copro_handle_mm_fault(struct mm_struct *mm, unsigned long ea, ...@@ -20,4 +20,10 @@ int copro_handle_mm_fault(struct mm_struct *mm, unsigned long ea,
int copro_calculate_slb(struct mm_struct *mm, u64 ea, struct copro_slb *slb); int copro_calculate_slb(struct mm_struct *mm, u64 ea, struct copro_slb *slb);
#ifdef CONFIG_PPC_COPRO_BASE
void copro_flush_all_slbs(struct mm_struct *mm);
#else
static inline void copro_flush_all_slbs(struct mm_struct *mm) {}
#endif
#endif /* _ASM_POWERPC_COPRO_H */ #endif /* _ASM_POWERPC_COPRO_H */
...@@ -25,6 +25,7 @@ ...@@ -25,6 +25,7 @@
#include <linux/export.h> #include <linux/export.h>
#include <asm/reg.h> #include <asm/reg.h>
#include <asm/copro.h> #include <asm/copro.h>
#include <asm/spu.h>
/* /*
* This ought to be kept in sync with the powerpc specific do_page_fault * This ought to be kept in sync with the powerpc specific do_page_fault
...@@ -136,3 +137,11 @@ int copro_calculate_slb(struct mm_struct *mm, u64 ea, struct copro_slb *slb) ...@@ -136,3 +137,11 @@ int copro_calculate_slb(struct mm_struct *mm, u64 ea, struct copro_slb *slb)
return 0; return 0;
} }
EXPORT_SYMBOL_GPL(copro_calculate_slb); EXPORT_SYMBOL_GPL(copro_calculate_slb);
void copro_flush_all_slbs(struct mm_struct *mm)
{
#ifdef CONFIG_SPU_BASE
spu_flush_all_slbs(mm);
#endif
}
EXPORT_SYMBOL_GPL(copro_flush_all_slbs);
...@@ -51,7 +51,7 @@ ...@@ -51,7 +51,7 @@
#include <asm/cacheflush.h> #include <asm/cacheflush.h>
#include <asm/cputable.h> #include <asm/cputable.h>
#include <asm/sections.h> #include <asm/sections.h>
#include <asm/spu.h> #include <asm/copro.h>
#include <asm/udbg.h> #include <asm/udbg.h>
#include <asm/code-patching.h> #include <asm/code-patching.h>
#include <asm/fadump.h> #include <asm/fadump.h>
...@@ -901,9 +901,7 @@ void demote_segment_4k(struct mm_struct *mm, unsigned long addr) ...@@ -901,9 +901,7 @@ void demote_segment_4k(struct mm_struct *mm, unsigned long addr)
if (get_slice_psize(mm, addr) == MMU_PAGE_4K) if (get_slice_psize(mm, addr) == MMU_PAGE_4K)
return; return;
slice_set_range_psize(mm, addr, 1, MMU_PAGE_4K); slice_set_range_psize(mm, addr, 1, MMU_PAGE_4K);
#ifdef CONFIG_SPU_BASE copro_flush_all_slbs(mm);
spu_flush_all_slbs(mm);
#endif
if (get_paca_psize(addr) != MMU_PAGE_4K) { if (get_paca_psize(addr) != MMU_PAGE_4K) {
get_paca()->context = mm->context; get_paca()->context = mm->context;
slb_flush_and_rebolt(); slb_flush_and_rebolt();
...@@ -1141,9 +1139,7 @@ int hash_page(unsigned long ea, unsigned long access, unsigned long trap) ...@@ -1141,9 +1139,7 @@ int hash_page(unsigned long ea, unsigned long access, unsigned long trap)
"to 4kB pages because of " "to 4kB pages because of "
"non-cacheable mapping\n"); "non-cacheable mapping\n");
psize = mmu_vmalloc_psize = MMU_PAGE_4K; psize = mmu_vmalloc_psize = MMU_PAGE_4K;
#ifdef CONFIG_SPU_BASE copro_flush_all_slbs(mm);
spu_flush_all_slbs(mm);
#endif
} }
} }
......
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
#include <linux/hugetlb.h> #include <linux/hugetlb.h>
#include <asm/mman.h> #include <asm/mman.h>
#include <asm/mmu.h> #include <asm/mmu.h>
#include <asm/spu.h> #include <asm/copro.h>
#include <asm/hugetlb.h> #include <asm/hugetlb.h>
/* some sanity checks */ /* some sanity checks */
...@@ -234,9 +234,7 @@ static void slice_convert(struct mm_struct *mm, struct slice_mask mask, int psiz ...@@ -234,9 +234,7 @@ static void slice_convert(struct mm_struct *mm, struct slice_mask mask, int psiz
spin_unlock_irqrestore(&slice_convert_lock, flags); spin_unlock_irqrestore(&slice_convert_lock, flags);
#ifdef CONFIG_SPU_BASE copro_flush_all_slbs(mm);
spu_flush_all_slbs(mm);
#endif
} }
/* /*
...@@ -673,9 +671,7 @@ void slice_set_psize(struct mm_struct *mm, unsigned long address, ...@@ -673,9 +671,7 @@ void slice_set_psize(struct mm_struct *mm, unsigned long address,
spin_unlock_irqrestore(&slice_convert_lock, flags); spin_unlock_irqrestore(&slice_convert_lock, flags);
#ifdef CONFIG_SPU_BASE copro_flush_all_slbs(mm);
spu_flush_all_slbs(mm);
#endif
} }
void slice_set_range_psize(struct mm_struct *mm, unsigned long start, void slice_set_range_psize(struct mm_struct *mm, unsigned long start,
......
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