1
2
3
4
5
6
7
8
9
10
11
12#ifndef _ASM_POWERPC_TLB_H
13#define _ASM_POWERPC_TLB_H
14#ifdef __KERNEL__
15
16#ifndef __powerpc64__
17#include <asm/pgtable.h>
18#endif
19#include <asm/pgalloc.h>
20#include <asm/tlbflush.h>
21#ifndef __powerpc64__
22#include <asm/page.h>
23#include <asm/mmu.h>
24#endif
25
26#include <linux/pagemap.h>
27
28#define tlb_start_vma(tlb, vma) do { } while (0)
29#define tlb_end_vma(tlb, vma) do { } while (0)
30#define __tlb_remove_tlb_entry __tlb_remove_tlb_entry
31#define tlb_remove_check_page_size_change tlb_remove_check_page_size_change
32
33extern void tlb_flush(struct mmu_gather *tlb);
34
35
36#include <asm-generic/tlb.h>
37
38extern void flush_hash_entry(struct mm_struct *mm, pte_t *ptep,
39 unsigned long address);
40
41static inline void __tlb_remove_tlb_entry(struct mmu_gather *tlb, pte_t *ptep,
42 unsigned long address)
43{
44#ifdef CONFIG_PPC_STD_MMU_32
45 if (pte_val(*ptep) & _PAGE_HASHPTE)
46 flush_hash_entry(tlb->mm, ptep, address);
47#endif
48}
49
50static inline void tlb_remove_check_page_size_change(struct mmu_gather *tlb,
51 unsigned int page_size)
52{
53 if (!tlb->page_size)
54 tlb->page_size = page_size;
55 else if (tlb->page_size != page_size) {
56 tlb_flush_mmu(tlb);
57
58
59
60
61 tlb->page_size = page_size;
62 }
63}
64
65#ifdef CONFIG_SMP
66static inline int mm_is_core_local(struct mm_struct *mm)
67{
68 return cpumask_subset(mm_cpumask(mm),
69 topology_sibling_cpumask(smp_processor_id()));
70}
71
72#ifdef CONFIG_PPC_BOOK3S_64
73static inline int mm_is_thread_local(struct mm_struct *mm)
74{
75 if (atomic_read(&mm->context.active_cpus) > 1)
76 return false;
77 return cpumask_test_cpu(smp_processor_id(), mm_cpumask(mm));
78}
79#else
80static inline int mm_is_thread_local(struct mm_struct *mm)
81{
82 return cpumask_equal(mm_cpumask(mm),
83 cpumask_of(smp_processor_id()));
84}
85#endif
86
87#else
88static inline int mm_is_core_local(struct mm_struct *mm)
89{
90 return 1;
91}
92
93static inline int mm_is_thread_local(struct mm_struct *mm)
94{
95 return 1;
96}
97#endif
98
99#endif
100#endif
101