diff options
Diffstat (limited to 'include/asm-arm26')
-rw-r--r-- | include/asm-arm26/atomic.h | 29 | ||||
-rw-r--r-- | include/asm-arm26/pgtable.h | 2 | ||||
-rw-r--r-- | include/asm-arm26/semaphore.h | 3 | ||||
-rw-r--r-- | include/asm-arm26/tlb.h | 47 | ||||
-rw-r--r-- | include/asm-arm26/unistd.h | 1 |
5 files changed, 45 insertions, 37 deletions
diff --git a/include/asm-arm26/atomic.h b/include/asm-arm26/atomic.h index 4a88235c0e76..a47cadc59686 100644 --- a/include/asm-arm26/atomic.h +++ b/include/asm-arm26/atomic.h | |||
@@ -62,6 +62,35 @@ static inline int atomic_sub_return(int i, atomic_t *v) | |||
62 | return val; | 62 | return val; |
63 | } | 63 | } |
64 | 64 | ||
65 | static inline int atomic_cmpxchg(atomic_t *v, int old, int new) | ||
66 | { | ||
67 | int ret; | ||
68 | unsigned long flags; | ||
69 | |||
70 | local_irq_save(flags); | ||
71 | ret = v->counter; | ||
72 | if (likely(ret == old)) | ||
73 | v->counter = new; | ||
74 | local_irq_restore(flags); | ||
75 | |||
76 | return ret; | ||
77 | } | ||
78 | |||
79 | static inline int atomic_add_unless(atomic_t *v, int a, int u) | ||
80 | { | ||
81 | int ret; | ||
82 | unsigned long flags; | ||
83 | |||
84 | local_irq_save(flags); | ||
85 | ret = v->counter; | ||
86 | if (ret != u) | ||
87 | v->counter += a; | ||
88 | local_irq_restore(flags); | ||
89 | |||
90 | return ret != u; | ||
91 | } | ||
92 | #define atomic_inc_not_zero(v) atomic_add_unless((v), 1, 0) | ||
93 | |||
65 | static inline void atomic_clear_mask(unsigned long mask, unsigned long *addr) | 94 | static inline void atomic_clear_mask(unsigned long mask, unsigned long *addr) |
66 | { | 95 | { |
67 | unsigned long flags; | 96 | unsigned long flags; |
diff --git a/include/asm-arm26/pgtable.h b/include/asm-arm26/pgtable.h index f602cf572411..a590250277f8 100644 --- a/include/asm-arm26/pgtable.h +++ b/include/asm-arm26/pgtable.h | |||
@@ -98,8 +98,6 @@ extern struct page *empty_zero_page; | |||
98 | #define pfn_pte(pfn,prot) (__pte(((pfn) << PAGE_SHIFT) | pgprot_val(prot))) | 98 | #define pfn_pte(pfn,prot) (__pte(((pfn) << PAGE_SHIFT) | pgprot_val(prot))) |
99 | #define pages_to_mb(x) ((x) >> (20 - PAGE_SHIFT)) | 99 | #define pages_to_mb(x) ((x) >> (20 - PAGE_SHIFT)) |
100 | #define mk_pte(page,prot) pfn_pte(page_to_pfn(page),prot) | 100 | #define mk_pte(page,prot) pfn_pte(page_to_pfn(page),prot) |
101 | #define page_pte_prot(page,prot) mk_pte(page, prot) | ||
102 | #define page_pte(page) mk_pte(page, __pgprot(0)) | ||
103 | 101 | ||
104 | /* | 102 | /* |
105 | * Terminology: PGD = Page Directory, PMD = Page Middle Directory, | 103 | * Terminology: PGD = Page Directory, PMD = Page Middle Directory, |
diff --git a/include/asm-arm26/semaphore.h b/include/asm-arm26/semaphore.h index c1b6a1edad92..ccf15e704109 100644 --- a/include/asm-arm26/semaphore.h +++ b/include/asm-arm26/semaphore.h | |||
@@ -25,9 +25,6 @@ struct semaphore { | |||
25 | .wait = __WAIT_QUEUE_HEAD_INITIALIZER((name).wait), \ | 25 | .wait = __WAIT_QUEUE_HEAD_INITIALIZER((name).wait), \ |
26 | } | 26 | } |
27 | 27 | ||
28 | #define __MUTEX_INITIALIZER(name) \ | ||
29 | __SEMAPHORE_INIT(name,1) | ||
30 | |||
31 | #define __DECLARE_SEMAPHORE_GENERIC(name,count) \ | 28 | #define __DECLARE_SEMAPHORE_GENERIC(name,count) \ |
32 | struct semaphore name = __SEMAPHORE_INIT(name,count) | 29 | struct semaphore name = __SEMAPHORE_INIT(name,count) |
33 | 30 | ||
diff --git a/include/asm-arm26/tlb.h b/include/asm-arm26/tlb.h index 1316352a58f3..08ddd85b8d35 100644 --- a/include/asm-arm26/tlb.h +++ b/include/asm-arm26/tlb.h | |||
@@ -10,24 +10,20 @@ | |||
10 | */ | 10 | */ |
11 | struct mmu_gather { | 11 | struct mmu_gather { |
12 | struct mm_struct *mm; | 12 | struct mm_struct *mm; |
13 | unsigned int freed; | 13 | unsigned int need_flush; |
14 | unsigned int fullmm; | 14 | unsigned int fullmm; |
15 | |||
16 | unsigned int flushes; | ||
17 | unsigned int avoided_flushes; | ||
18 | }; | 15 | }; |
19 | 16 | ||
20 | extern struct mmu_gather mmu_gathers[NR_CPUS]; | 17 | DECLARE_PER_CPU(struct mmu_gather, mmu_gathers); |
21 | 18 | ||
22 | static inline struct mmu_gather * | 19 | static inline struct mmu_gather * |
23 | tlb_gather_mmu(struct mm_struct *mm, unsigned int full_mm_flush) | 20 | tlb_gather_mmu(struct mm_struct *mm, unsigned int full_mm_flush) |
24 | { | 21 | { |
25 | int cpu = smp_processor_id(); | 22 | struct mmu_gather *tlb = &get_cpu_var(mmu_gathers); |
26 | struct mmu_gather *tlb = &mmu_gathers[cpu]; | ||
27 | 23 | ||
28 | tlb->mm = mm; | 24 | tlb->mm = mm; |
29 | tlb->freed = 0; | 25 | tlb->need_flush = 0; |
30 | tlb->fullmm = full_mm_flush; | 26 | tlb->fullmm = full_mm_flush; |
31 | 27 | ||
32 | return tlb; | 28 | return tlb; |
33 | } | 29 | } |
@@ -35,30 +31,13 @@ tlb_gather_mmu(struct mm_struct *mm, unsigned int full_mm_flush) | |||
35 | static inline void | 31 | static inline void |
36 | tlb_finish_mmu(struct mmu_gather *tlb, unsigned long start, unsigned long end) | 32 | tlb_finish_mmu(struct mmu_gather *tlb, unsigned long start, unsigned long end) |
37 | { | 33 | { |
38 | struct mm_struct *mm = tlb->mm; | 34 | if (tlb->need_flush) |
39 | unsigned long freed = tlb->freed; | 35 | flush_tlb_mm(tlb->mm); |
40 | int rss = get_mm_counter(mm, rss); | ||
41 | |||
42 | if (rss < freed) | ||
43 | freed = rss; | ||
44 | add_mm_counter(mm, rss, -freed); | ||
45 | |||
46 | if (freed) { | ||
47 | flush_tlb_mm(mm); | ||
48 | tlb->flushes++; | ||
49 | } else { | ||
50 | tlb->avoided_flushes++; | ||
51 | } | ||
52 | 36 | ||
53 | /* keep the page table cache within bounds */ | 37 | /* keep the page table cache within bounds */ |
54 | check_pgt_cache(); | 38 | check_pgt_cache(); |
55 | } | ||
56 | |||
57 | 39 | ||
58 | static inline unsigned int | 40 | put_cpu_var(mmu_gathers); |
59 | tlb_is_full_mm(struct mmu_gather *tlb) | ||
60 | { | ||
61 | return tlb->fullmm; | ||
62 | } | 41 | } |
63 | 42 | ||
64 | #define tlb_remove_tlb_entry(tlb,ptep,address) do { } while (0) | 43 | #define tlb_remove_tlb_entry(tlb,ptep,address) do { } while (0) |
@@ -71,7 +50,13 @@ tlb_is_full_mm(struct mmu_gather *tlb) | |||
71 | } while (0) | 50 | } while (0) |
72 | #define tlb_end_vma(tlb,vma) do { } while (0) | 51 | #define tlb_end_vma(tlb,vma) do { } while (0) |
73 | 52 | ||
74 | #define tlb_remove_page(tlb,page) free_page_and_swap_cache(page) | 53 | static inline void |
54 | tlb_remove_page(struct mmu_gather *tlb, struct page *page) | ||
55 | { | ||
56 | tlb->need_flush = 1; | ||
57 | free_page_and_swap_cache(page); | ||
58 | } | ||
59 | |||
75 | #define pte_free_tlb(tlb,ptep) pte_free(ptep) | 60 | #define pte_free_tlb(tlb,ptep) pte_free(ptep) |
76 | #define pmd_free_tlb(tlb,pmdp) pmd_free(pmdp) | 61 | #define pmd_free_tlb(tlb,pmdp) pmd_free(pmdp) |
77 | 62 | ||
diff --git a/include/asm-arm26/unistd.h b/include/asm-arm26/unistd.h index dfa0b0c30aa3..be4c2fb9c049 100644 --- a/include/asm-arm26/unistd.h +++ b/include/asm-arm26/unistd.h | |||
@@ -480,7 +480,6 @@ asmlinkage int sys_clone(unsigned long clone_flags, unsigned long newsp, | |||
480 | asmlinkage int sys_fork(struct pt_regs *regs); | 480 | asmlinkage int sys_fork(struct pt_regs *regs); |
481 | asmlinkage int sys_vfork(struct pt_regs *regs); | 481 | asmlinkage int sys_vfork(struct pt_regs *regs); |
482 | asmlinkage int sys_pipe(unsigned long *fildes); | 482 | asmlinkage int sys_pipe(unsigned long *fildes); |
483 | asmlinkage int sys_ptrace(long request, long pid, long addr, long data); | ||
484 | struct sigaction; | 483 | struct sigaction; |
485 | asmlinkage long sys_rt_sigaction(int sig, | 484 | asmlinkage long sys_rt_sigaction(int sig, |
486 | const struct sigaction __user *act, | 485 | const struct sigaction __user *act, |