diff options
Diffstat (limited to 'include/asm-alpha')
-rw-r--r-- | include/asm-alpha/atomic.h | 2 | ||||
-rw-r--r-- | include/asm-alpha/bitops.h | 1 | ||||
-rw-r--r-- | include/asm-alpha/cache.h | 1 | ||||
-rw-r--r-- | include/asm-alpha/compiler.h | 2 | ||||
-rw-r--r-- | include/asm-alpha/dma-mapping.h | 2 | ||||
-rw-r--r-- | include/asm-alpha/futex.h | 49 | ||||
-rw-r--r-- | include/asm-alpha/hardirq.h | 2 | ||||
-rw-r--r-- | include/asm-alpha/mman.h | 1 | ||||
-rw-r--r-- | include/asm-alpha/mmu_context.h | 6 | ||||
-rw-r--r-- | include/asm-alpha/mutex.h | 9 | ||||
-rw-r--r-- | include/asm-alpha/processor.h | 34 | ||||
-rw-r--r-- | include/asm-alpha/ptrace.h | 6 | ||||
-rw-r--r-- | include/asm-alpha/system.h | 18 | ||||
-rw-r--r-- | include/asm-alpha/thread_info.h | 2 |
14 files changed, 39 insertions, 96 deletions
diff --git a/include/asm-alpha/atomic.h b/include/asm-alpha/atomic.h index 6183eab006d4..fc77f7413083 100644 --- a/include/asm-alpha/atomic.h +++ b/include/asm-alpha/atomic.h | |||
@@ -176,6 +176,7 @@ static __inline__ long atomic64_sub_return(long i, atomic64_t * v) | |||
176 | } | 176 | } |
177 | 177 | ||
178 | #define atomic_cmpxchg(v, o, n) ((int)cmpxchg(&((v)->counter), (o), (n))) | 178 | #define atomic_cmpxchg(v, o, n) ((int)cmpxchg(&((v)->counter), (o), (n))) |
179 | #define atomic_xchg(v, new) (xchg(&((v)->counter), new)) | ||
179 | 180 | ||
180 | #define atomic_add_unless(v, a, u) \ | 181 | #define atomic_add_unless(v, a, u) \ |
181 | ({ \ | 182 | ({ \ |
@@ -216,4 +217,5 @@ static __inline__ long atomic64_sub_return(long i, atomic64_t * v) | |||
216 | #define smp_mb__before_atomic_inc() smp_mb() | 217 | #define smp_mb__before_atomic_inc() smp_mb() |
217 | #define smp_mb__after_atomic_inc() smp_mb() | 218 | #define smp_mb__after_atomic_inc() smp_mb() |
218 | 219 | ||
220 | #include <asm-generic/atomic.h> | ||
219 | #endif /* _ALPHA_ATOMIC_H */ | 221 | #endif /* _ALPHA_ATOMIC_H */ |
diff --git a/include/asm-alpha/bitops.h b/include/asm-alpha/bitops.h index 578ed3f1a607..302201f1a097 100644 --- a/include/asm-alpha/bitops.h +++ b/include/asm-alpha/bitops.h | |||
@@ -321,6 +321,7 @@ static inline int fls(int word) | |||
321 | #else | 321 | #else |
322 | #define fls generic_fls | 322 | #define fls generic_fls |
323 | #endif | 323 | #endif |
324 | #define fls64 generic_fls64 | ||
324 | 325 | ||
325 | /* Compute powers of two for the given integer. */ | 326 | /* Compute powers of two for the given integer. */ |
326 | static inline long floor_log2(unsigned long word) | 327 | static inline long floor_log2(unsigned long word) |
diff --git a/include/asm-alpha/cache.h b/include/asm-alpha/cache.h index e69b29501a5f..e6d4d1695e25 100644 --- a/include/asm-alpha/cache.h +++ b/include/asm-alpha/cache.h | |||
@@ -20,6 +20,5 @@ | |||
20 | 20 | ||
21 | #define L1_CACHE_ALIGN(x) (((x)+(L1_CACHE_BYTES-1))&~(L1_CACHE_BYTES-1)) | 21 | #define L1_CACHE_ALIGN(x) (((x)+(L1_CACHE_BYTES-1))&~(L1_CACHE_BYTES-1)) |
22 | #define SMP_CACHE_BYTES L1_CACHE_BYTES | 22 | #define SMP_CACHE_BYTES L1_CACHE_BYTES |
23 | #define L1_CACHE_SHIFT_MAX L1_CACHE_SHIFT | ||
24 | 23 | ||
25 | #endif | 24 | #endif |
diff --git a/include/asm-alpha/compiler.h b/include/asm-alpha/compiler.h index 0a4a8b40dfcd..00c6f57ad9a7 100644 --- a/include/asm-alpha/compiler.h +++ b/include/asm-alpha/compiler.h | |||
@@ -98,9 +98,7 @@ | |||
98 | #undef inline | 98 | #undef inline |
99 | #undef __inline__ | 99 | #undef __inline__ |
100 | #undef __inline | 100 | #undef __inline |
101 | #if __GNUC__ == 3 && __GNUC_MINOR__ >= 1 || __GNUC__ > 3 | ||
102 | #undef __always_inline | 101 | #undef __always_inline |
103 | #define __always_inline inline __attribute__((always_inline)) | 102 | #define __always_inline inline __attribute__((always_inline)) |
104 | #endif | ||
105 | 103 | ||
106 | #endif /* __ALPHA_COMPILER_H */ | 104 | #endif /* __ALPHA_COMPILER_H */ |
diff --git a/include/asm-alpha/dma-mapping.h b/include/asm-alpha/dma-mapping.h index 680f7ecbb28f..9dc7256cf979 100644 --- a/include/asm-alpha/dma-mapping.h +++ b/include/asm-alpha/dma-mapping.h | |||
@@ -16,7 +16,7 @@ | |||
16 | #define dma_free_coherent(dev, size, va, addr) \ | 16 | #define dma_free_coherent(dev, size, va, addr) \ |
17 | pci_free_consistent(alpha_gendev_to_pci(dev), size, va, addr) | 17 | pci_free_consistent(alpha_gendev_to_pci(dev), size, va, addr) |
18 | #define dma_map_page(dev, page, off, size, dir) \ | 18 | #define dma_map_page(dev, page, off, size, dir) \ |
19 | pci_map_single(alpha_gendev_to_pci(dev), page, off, size, dir) | 19 | pci_map_page(alpha_gendev_to_pci(dev), page, off, size, dir) |
20 | #define dma_unmap_page(dev, addr, size, dir) \ | 20 | #define dma_unmap_page(dev, addr, size, dir) \ |
21 | pci_unmap_page(alpha_gendev_to_pci(dev), addr, size, dir) | 21 | pci_unmap_page(alpha_gendev_to_pci(dev), addr, size, dir) |
22 | #define dma_map_sg(dev, sg, nents, dir) \ | 22 | #define dma_map_sg(dev, sg, nents, dir) \ |
diff --git a/include/asm-alpha/futex.h b/include/asm-alpha/futex.h index 9feff4ce1424..6a332a9f099c 100644 --- a/include/asm-alpha/futex.h +++ b/include/asm-alpha/futex.h | |||
@@ -1,53 +1,6 @@ | |||
1 | #ifndef _ASM_FUTEX_H | 1 | #ifndef _ASM_FUTEX_H |
2 | #define _ASM_FUTEX_H | 2 | #define _ASM_FUTEX_H |
3 | 3 | ||
4 | #ifdef __KERNEL__ | 4 | #include <asm-generic/futex.h> |
5 | 5 | ||
6 | #include <linux/futex.h> | ||
7 | #include <asm/errno.h> | ||
8 | #include <asm/uaccess.h> | ||
9 | |||
10 | static inline int | ||
11 | futex_atomic_op_inuser (int encoded_op, int __user *uaddr) | ||
12 | { | ||
13 | int op = (encoded_op >> 28) & 7; | ||
14 | int cmp = (encoded_op >> 24) & 15; | ||
15 | int oparg = (encoded_op << 8) >> 20; | ||
16 | int cmparg = (encoded_op << 20) >> 20; | ||
17 | int oldval = 0, ret; | ||
18 | if (encoded_op & (FUTEX_OP_OPARG_SHIFT << 28)) | ||
19 | oparg = 1 << oparg; | ||
20 | |||
21 | if (! access_ok (VERIFY_WRITE, uaddr, sizeof(int))) | ||
22 | return -EFAULT; | ||
23 | |||
24 | inc_preempt_count(); | ||
25 | |||
26 | switch (op) { | ||
27 | case FUTEX_OP_SET: | ||
28 | case FUTEX_OP_ADD: | ||
29 | case FUTEX_OP_OR: | ||
30 | case FUTEX_OP_ANDN: | ||
31 | case FUTEX_OP_XOR: | ||
32 | default: | ||
33 | ret = -ENOSYS; | ||
34 | } | ||
35 | |||
36 | dec_preempt_count(); | ||
37 | |||
38 | if (!ret) { | ||
39 | switch (cmp) { | ||
40 | case FUTEX_OP_CMP_EQ: ret = (oldval == cmparg); break; | ||
41 | case FUTEX_OP_CMP_NE: ret = (oldval != cmparg); break; | ||
42 | case FUTEX_OP_CMP_LT: ret = (oldval < cmparg); break; | ||
43 | case FUTEX_OP_CMP_GE: ret = (oldval >= cmparg); break; | ||
44 | case FUTEX_OP_CMP_LE: ret = (oldval <= cmparg); break; | ||
45 | case FUTEX_OP_CMP_GT: ret = (oldval > cmparg); break; | ||
46 | default: ret = -ENOSYS; | ||
47 | } | ||
48 | } | ||
49 | return ret; | ||
50 | } | ||
51 | |||
52 | #endif | ||
53 | #endif | 6 | #endif |
diff --git a/include/asm-alpha/hardirq.h b/include/asm-alpha/hardirq.h index c0593f9b21e1..7bb6a36c96a1 100644 --- a/include/asm-alpha/hardirq.h +++ b/include/asm-alpha/hardirq.h | |||
@@ -13,6 +13,8 @@ typedef struct { | |||
13 | 13 | ||
14 | #include <linux/irq_cpustat.h> /* Standard mappings for irq_cpustat_t above */ | 14 | #include <linux/irq_cpustat.h> /* Standard mappings for irq_cpustat_t above */ |
15 | 15 | ||
16 | void ack_bad_irq(unsigned int irq); | ||
17 | |||
16 | #define HARDIRQ_BITS 12 | 18 | #define HARDIRQ_BITS 12 |
17 | 19 | ||
18 | /* | 20 | /* |
diff --git a/include/asm-alpha/mman.h b/include/asm-alpha/mman.h index eb9c279045ef..f6439532a262 100644 --- a/include/asm-alpha/mman.h +++ b/include/asm-alpha/mman.h | |||
@@ -42,6 +42,7 @@ | |||
42 | #define MADV_WILLNEED 3 /* will need these pages */ | 42 | #define MADV_WILLNEED 3 /* will need these pages */ |
43 | #define MADV_SPACEAVAIL 5 /* ensure resources are available */ | 43 | #define MADV_SPACEAVAIL 5 /* ensure resources are available */ |
44 | #define MADV_DONTNEED 6 /* don't need these pages */ | 44 | #define MADV_DONTNEED 6 /* don't need these pages */ |
45 | #define MADV_REMOVE 7 /* remove these pages & resources */ | ||
45 | 46 | ||
46 | /* compatibility flags */ | 47 | /* compatibility flags */ |
47 | #define MAP_ANON MAP_ANONYMOUS | 48 | #define MAP_ANON MAP_ANONYMOUS |
diff --git a/include/asm-alpha/mmu_context.h b/include/asm-alpha/mmu_context.h index a714d0cdc204..6f92482cc96c 100644 --- a/include/asm-alpha/mmu_context.h +++ b/include/asm-alpha/mmu_context.h | |||
@@ -156,7 +156,7 @@ ev5_switch_mm(struct mm_struct *prev_mm, struct mm_struct *next_mm, | |||
156 | /* Always update the PCB ASN. Another thread may have allocated | 156 | /* Always update the PCB ASN. Another thread may have allocated |
157 | a new mm->context (via flush_tlb_mm) without the ASN serial | 157 | a new mm->context (via flush_tlb_mm) without the ASN serial |
158 | number wrapping. We have no way to detect when this is needed. */ | 158 | number wrapping. We have no way to detect when this is needed. */ |
159 | next->thread_info->pcb.asn = mmc & HARDWARE_ASN_MASK; | 159 | task_thread_info(next)->pcb.asn = mmc & HARDWARE_ASN_MASK; |
160 | } | 160 | } |
161 | 161 | ||
162 | __EXTERN_INLINE void | 162 | __EXTERN_INLINE void |
@@ -235,7 +235,7 @@ init_new_context(struct task_struct *tsk, struct mm_struct *mm) | |||
235 | if (cpu_online(i)) | 235 | if (cpu_online(i)) |
236 | mm->context[i] = 0; | 236 | mm->context[i] = 0; |
237 | if (tsk != current) | 237 | if (tsk != current) |
238 | tsk->thread_info->pcb.ptbr | 238 | task_thread_info(tsk)->pcb.ptbr |
239 | = ((unsigned long)mm->pgd - IDENT_ADDR) >> PAGE_SHIFT; | 239 | = ((unsigned long)mm->pgd - IDENT_ADDR) >> PAGE_SHIFT; |
240 | return 0; | 240 | return 0; |
241 | } | 241 | } |
@@ -249,7 +249,7 @@ destroy_context(struct mm_struct *mm) | |||
249 | static inline void | 249 | static inline void |
250 | enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk) | 250 | enter_lazy_tlb(struct mm_struct *mm, struct task_struct *tsk) |
251 | { | 251 | { |
252 | tsk->thread_info->pcb.ptbr | 252 | task_thread_info(tsk)->pcb.ptbr |
253 | = ((unsigned long)mm->pgd - IDENT_ADDR) >> PAGE_SHIFT; | 253 | = ((unsigned long)mm->pgd - IDENT_ADDR) >> PAGE_SHIFT; |
254 | } | 254 | } |
255 | 255 | ||
diff --git a/include/asm-alpha/mutex.h b/include/asm-alpha/mutex.h new file mode 100644 index 000000000000..458c1f7fbc18 --- /dev/null +++ b/include/asm-alpha/mutex.h | |||
@@ -0,0 +1,9 @@ | |||
1 | /* | ||
2 | * Pull in the generic implementation for the mutex fastpath. | ||
3 | * | ||
4 | * TODO: implement optimized primitives instead, or leave the generic | ||
5 | * implementation in place, or pick the atomic_xchg() based generic | ||
6 | * implementation. (see asm-generic/mutex-xchg.h for details) | ||
7 | */ | ||
8 | |||
9 | #include <asm-generic/mutex-dec.h> | ||
diff --git a/include/asm-alpha/processor.h b/include/asm-alpha/processor.h index 059780a7d3d7..425b7b6d28cb 100644 --- a/include/asm-alpha/processor.h +++ b/include/asm-alpha/processor.h | |||
@@ -52,19 +52,10 @@ extern long kernel_thread(int (*fn)(void *), void *arg, unsigned long flags); | |||
52 | 52 | ||
53 | unsigned long get_wchan(struct task_struct *p); | 53 | unsigned long get_wchan(struct task_struct *p); |
54 | 54 | ||
55 | /* See arch/alpha/kernel/ptrace.c for details. */ | 55 | #define KSTK_EIP(tsk) (task_pt_regs(tsk)->pc) |
56 | #define PT_REG(reg) \ | ||
57 | (PAGE_SIZE*2 - sizeof(struct pt_regs) + offsetof(struct pt_regs, reg)) | ||
58 | |||
59 | #define SW_REG(reg) \ | ||
60 | (PAGE_SIZE*2 - sizeof(struct pt_regs) - sizeof(struct switch_stack) \ | ||
61 | + offsetof(struct switch_stack, reg)) | ||
62 | |||
63 | #define KSTK_EIP(tsk) \ | ||
64 | (*(unsigned long *)(PT_REG(pc) + (unsigned long) ((tsk)->thread_info))) | ||
65 | 56 | ||
66 | #define KSTK_ESP(tsk) \ | 57 | #define KSTK_ESP(tsk) \ |
67 | ((tsk) == current ? rdusp() : (tsk)->thread_info->pcb.usp) | 58 | ((tsk) == current ? rdusp() : task_thread_info(tsk)->pcb.usp) |
68 | 59 | ||
69 | #define cpu_relax() barrier() | 60 | #define cpu_relax() barrier() |
70 | 61 | ||
@@ -77,7 +68,6 @@ unsigned long get_wchan(struct task_struct *p); | |||
77 | #define spin_lock_prefetch(lock) do { } while (0) | 68 | #define spin_lock_prefetch(lock) do { } while (0) |
78 | #endif | 69 | #endif |
79 | 70 | ||
80 | #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1) | ||
81 | extern inline void prefetch(const void *ptr) | 71 | extern inline void prefetch(const void *ptr) |
82 | { | 72 | { |
83 | __builtin_prefetch(ptr, 0, 3); | 73 | __builtin_prefetch(ptr, 0, 3); |
@@ -95,24 +85,4 @@ extern inline void spin_lock_prefetch(const void *ptr) | |||
95 | } | 85 | } |
96 | #endif | 86 | #endif |
97 | 87 | ||
98 | #else | ||
99 | extern inline void prefetch(const void *ptr) | ||
100 | { | ||
101 | __asm__ ("ldl $31,%0" : : "m"(*(char *)ptr)); | ||
102 | } | ||
103 | |||
104 | extern inline void prefetchw(const void *ptr) | ||
105 | { | ||
106 | __asm__ ("ldq $31,%0" : : "m"(*(char *)ptr)); | ||
107 | } | ||
108 | |||
109 | #ifdef CONFIG_SMP | ||
110 | extern inline void spin_lock_prefetch(const void *ptr) | ||
111 | { | ||
112 | __asm__ ("ldq $31,%0" : : "m"(*(char *)ptr)); | ||
113 | } | ||
114 | #endif | ||
115 | |||
116 | #endif /* GCC 3.1 */ | ||
117 | |||
118 | #endif /* __ASM_ALPHA_PROCESSOR_H */ | 88 | #endif /* __ASM_ALPHA_PROCESSOR_H */ |
diff --git a/include/asm-alpha/ptrace.h b/include/asm-alpha/ptrace.h index 072375c135b4..9933b8b3612e 100644 --- a/include/asm-alpha/ptrace.h +++ b/include/asm-alpha/ptrace.h | |||
@@ -75,10 +75,10 @@ struct switch_stack { | |||
75 | #define profile_pc(regs) instruction_pointer(regs) | 75 | #define profile_pc(regs) instruction_pointer(regs) |
76 | extern void show_regs(struct pt_regs *); | 76 | extern void show_regs(struct pt_regs *); |
77 | 77 | ||
78 | #define alpha_task_regs(task) \ | 78 | #define task_pt_regs(task) \ |
79 | ((struct pt_regs *) ((long) (task)->thread_info + 2*PAGE_SIZE) - 1) | 79 | ((struct pt_regs *) (task_stack_page(task) + 2*PAGE_SIZE) - 1) |
80 | 80 | ||
81 | #define force_successful_syscall_return() (alpha_task_regs(current)->r0 = 0) | 81 | #define force_successful_syscall_return() (task_pt_regs(current)->r0 = 0) |
82 | 82 | ||
83 | #endif | 83 | #endif |
84 | 84 | ||
diff --git a/include/asm-alpha/system.h b/include/asm-alpha/system.h index 050e86d12891..cc9c7e8cced5 100644 --- a/include/asm-alpha/system.h +++ b/include/asm-alpha/system.h | |||
@@ -131,15 +131,25 @@ struct el_common_EV6_mcheck { | |||
131 | extern void halt(void) __attribute__((noreturn)); | 131 | extern void halt(void) __attribute__((noreturn)); |
132 | #define __halt() __asm__ __volatile__ ("call_pal %0 #halt" : : "i" (PAL_halt)) | 132 | #define __halt() __asm__ __volatile__ ("call_pal %0 #halt" : : "i" (PAL_halt)) |
133 | 133 | ||
134 | #define switch_to(P,N,L) \ | 134 | #define switch_to(P,N,L) \ |
135 | do { \ | 135 | do { \ |
136 | (L) = alpha_switch_to(virt_to_phys(&(N)->thread_info->pcb), (P)); \ | 136 | (L) = alpha_switch_to(virt_to_phys(&task_thread_info(N)->pcb), (P)); \ |
137 | check_mmu_context(); \ | 137 | check_mmu_context(); \ |
138 | } while (0) | 138 | } while (0) |
139 | 139 | ||
140 | struct task_struct; | 140 | struct task_struct; |
141 | extern struct task_struct *alpha_switch_to(unsigned long, struct task_struct*); | 141 | extern struct task_struct *alpha_switch_to(unsigned long, struct task_struct*); |
142 | 142 | ||
143 | /* | ||
144 | * On SMP systems, when the scheduler does migration-cost autodetection, | ||
145 | * it needs a way to flush as much of the CPU's caches as possible. | ||
146 | * | ||
147 | * TODO: fill this in! | ||
148 | */ | ||
149 | static inline void sched_cacheflush(void) | ||
150 | { | ||
151 | } | ||
152 | |||
143 | #define imb() \ | 153 | #define imb() \ |
144 | __asm__ __volatile__ ("call_pal %0 #imb" : : "i" (PAL_imb) : "memory") | 154 | __asm__ __volatile__ ("call_pal %0 #imb" : : "i" (PAL_imb) : "memory") |
145 | 155 | ||
diff --git a/include/asm-alpha/thread_info.h b/include/asm-alpha/thread_info.h index d51491ed00b8..69ffd93f8e22 100644 --- a/include/asm-alpha/thread_info.h +++ b/include/asm-alpha/thread_info.h | |||
@@ -54,8 +54,6 @@ register struct thread_info *__current_thread_info __asm__("$8"); | |||
54 | #define alloc_thread_info(tsk) \ | 54 | #define alloc_thread_info(tsk) \ |
55 | ((struct thread_info *) __get_free_pages(GFP_KERNEL,1)) | 55 | ((struct thread_info *) __get_free_pages(GFP_KERNEL,1)) |
56 | #define free_thread_info(ti) free_pages((unsigned long) (ti), 1) | 56 | #define free_thread_info(ti) free_pages((unsigned long) (ti), 1) |
57 | #define get_thread_info(ti) get_task_struct((ti)->task) | ||
58 | #define put_thread_info(ti) put_task_struct((ti)->task) | ||
59 | 57 | ||
60 | #endif /* __ASSEMBLY__ */ | 58 | #endif /* __ASSEMBLY__ */ |
61 | 59 | ||