aboutsummaryrefslogtreecommitdiffstats
path: root/include/asm-s390
diff options
context:
space:
mode:
Diffstat (limited to 'include/asm-s390')
-rw-r--r--include/asm-s390/atomic.h18
-rw-r--r--include/asm-s390/bitops.h48
-rw-r--r--include/asm-s390/bug.h5
-rw-r--r--include/asm-s390/compat.h5
-rw-r--r--include/asm-s390/page.h3
-rw-r--r--include/asm-s390/percpu.h7
-rw-r--r--include/asm-s390/pgalloc.h7
-rw-r--r--include/asm-s390/poll.h1
-rw-r--r--include/asm-s390/types.h5
9 files changed, 39 insertions, 60 deletions
diff --git a/include/asm-s390/atomic.h b/include/asm-s390/atomic.h
index be6fefe223d6..de1d9926aa60 100644
--- a/include/asm-s390/atomic.h
+++ b/include/asm-s390/atomic.h
@@ -89,10 +89,15 @@ static __inline__ int atomic_cmpxchg(atomic_t *v, int old, int new)
89static __inline__ int atomic_add_unless(atomic_t *v, int a, int u) 89static __inline__ int atomic_add_unless(atomic_t *v, int a, int u)
90{ 90{
91 int c, old; 91 int c, old;
92
93 c = atomic_read(v); 92 c = atomic_read(v);
94 while (c != u && (old = atomic_cmpxchg(v, c, c + a)) != c) 93 for (;;) {
94 if (unlikely(c == u))
95 break;
96 old = atomic_cmpxchg(v, c, c + a);
97 if (likely(old == c))
98 break;
95 c = old; 99 c = old;
100 }
96 return c != u; 101 return c != u;
97} 102}
98 103
@@ -167,10 +172,15 @@ static __inline__ int atomic64_add_unless(atomic64_t *v,
167 long long a, long long u) 172 long long a, long long u)
168{ 173{
169 long long c, old; 174 long long c, old;
170
171 c = atomic64_read(v); 175 c = atomic64_read(v);
172 while (c != u && (old = atomic64_cmpxchg(v, c, c + a)) != c) 176 for (;;) {
177 if (unlikely(c == u))
178 break;
179 old = atomic64_cmpxchg(v, c, c + a);
180 if (likely(old == c))
181 break;
173 c = old; 182 c = old;
183 }
174 return c != u; 184 return c != u;
175} 185}
176 186
diff --git a/include/asm-s390/bitops.h b/include/asm-s390/bitops.h
index 3628899f48bb..ca092ffb7a95 100644
--- a/include/asm-s390/bitops.h
+++ b/include/asm-s390/bitops.h
@@ -828,35 +828,12 @@ static inline int sched_find_first_bit(unsigned long *b)
828 return find_first_bit(b, 140); 828 return find_first_bit(b, 140);
829} 829}
830 830
831/* 831#include <asm-generic/bitops/ffs.h>
832 * ffs: find first bit set. This is defined the same way as
833 * the libc and compiler builtin ffs routines, therefore
834 * differs in spirit from the above ffz (man ffs).
835 */
836#define ffs(x) generic_ffs(x)
837 832
838/* 833#include <asm-generic/bitops/fls.h>
839 * fls: find last bit set. 834#include <asm-generic/bitops/fls64.h>
840 */
841#define fls(x) generic_fls(x)
842#define fls64(x) generic_fls64(x)
843
844/*
845 * hweightN: returns the hamming weight (i.e. the number
846 * of bits set) of a N-bit word
847 */
848#define hweight64(x) \
849({ \
850 unsigned long __x = (x); \
851 unsigned int __w; \
852 __w = generic_hweight32((unsigned int) __x); \
853 __w += generic_hweight32((unsigned int) (__x>>32)); \
854 __w; \
855})
856#define hweight32(x) generic_hweight32(x)
857#define hweight16(x) generic_hweight16(x)
858#define hweight8(x) generic_hweight8(x)
859 835
836#include <asm-generic/bitops/hweight.h>
860 837
861#ifdef __KERNEL__ 838#ifdef __KERNEL__
862 839
@@ -871,11 +848,11 @@ static inline int sched_find_first_bit(unsigned long *b)
871 */ 848 */
872 849
873#define ext2_set_bit(nr, addr) \ 850#define ext2_set_bit(nr, addr) \
874 test_and_set_bit((nr)^(__BITOPS_WORDSIZE - 8), (unsigned long *)addr) 851 __test_and_set_bit((nr)^(__BITOPS_WORDSIZE - 8), (unsigned long *)addr)
875#define ext2_set_bit_atomic(lock, nr, addr) \ 852#define ext2_set_bit_atomic(lock, nr, addr) \
876 test_and_set_bit((nr)^(__BITOPS_WORDSIZE - 8), (unsigned long *)addr) 853 test_and_set_bit((nr)^(__BITOPS_WORDSIZE - 8), (unsigned long *)addr)
877#define ext2_clear_bit(nr, addr) \ 854#define ext2_clear_bit(nr, addr) \
878 test_and_clear_bit((nr)^(__BITOPS_WORDSIZE - 8), (unsigned long *)addr) 855 __test_and_clear_bit((nr)^(__BITOPS_WORDSIZE - 8), (unsigned long *)addr)
879#define ext2_clear_bit_atomic(lock, nr, addr) \ 856#define ext2_clear_bit_atomic(lock, nr, addr) \
880 test_and_clear_bit((nr)^(__BITOPS_WORDSIZE - 8), (unsigned long *)addr) 857 test_and_clear_bit((nr)^(__BITOPS_WORDSIZE - 8), (unsigned long *)addr)
881#define ext2_test_bit(nr, addr) \ 858#define ext2_test_bit(nr, addr) \
@@ -1011,18 +988,7 @@ ext2_find_next_zero_bit(void *vaddr, unsigned long size, unsigned long offset)
1011 return offset + ext2_find_first_zero_bit(p, size); 988 return offset + ext2_find_first_zero_bit(p, size);
1012} 989}
1013 990
1014/* Bitmap functions for the minix filesystem. */ 991#include <asm-generic/bitops/minix.h>
1015/* FIXME !!! */
1016#define minix_test_and_set_bit(nr,addr) \
1017 test_and_set_bit(nr,(unsigned long *)addr)
1018#define minix_set_bit(nr,addr) \
1019 set_bit(nr,(unsigned long *)addr)
1020#define minix_test_and_clear_bit(nr,addr) \
1021 test_and_clear_bit(nr,(unsigned long *)addr)
1022#define minix_test_bit(nr,addr) \
1023 test_bit(nr,(unsigned long *)addr)
1024#define minix_find_first_zero_bit(addr,size) \
1025 find_first_zero_bit(addr,size)
1026 992
1027#endif /* __KERNEL__ */ 993#endif /* __KERNEL__ */
1028 994
diff --git a/include/asm-s390/bug.h b/include/asm-s390/bug.h
index a2e7430aafa6..7ddaa05b98d8 100644
--- a/include/asm-s390/bug.h
+++ b/include/asm-s390/bug.h
@@ -4,9 +4,10 @@
4#include <linux/kernel.h> 4#include <linux/kernel.h>
5 5
6#ifdef CONFIG_BUG 6#ifdef CONFIG_BUG
7
7#define BUG() do { \ 8#define BUG() do { \
8 printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); \ 9 printk("kernel BUG at %s:%d!\n", __FILE__, __LINE__); \
9 __asm__ __volatile__(".long 0"); \ 10 __builtin_trap(); \
10} while (0) 11} while (0)
11 12
12#define HAVE_ARCH_BUG 13#define HAVE_ARCH_BUG
diff --git a/include/asm-s390/compat.h b/include/asm-s390/compat.h
index a007715f4aea..356a0b183539 100644
--- a/include/asm-s390/compat.h
+++ b/include/asm-s390/compat.h
@@ -128,6 +128,11 @@ static inline void __user *compat_ptr(compat_uptr_t uptr)
128 return (void __user *)(unsigned long)(uptr & 0x7fffffffUL); 128 return (void __user *)(unsigned long)(uptr & 0x7fffffffUL);
129} 129}
130 130
131static inline compat_uptr_t ptr_to_compat(void __user *uptr)
132{
133 return (u32)(unsigned long)uptr;
134}
135
131static inline void __user *compat_alloc_user_space(long len) 136static inline void __user *compat_alloc_user_space(long len)
132{ 137{
133 unsigned long stack; 138 unsigned long stack;
diff --git a/include/asm-s390/page.h b/include/asm-s390/page.h
index 2430c561e021..3b1138ac7e79 100644
--- a/include/asm-s390/page.h
+++ b/include/asm-s390/page.h
@@ -181,8 +181,6 @@ page_get_storage_key(unsigned long addr)
181#define PAGE_OFFSET 0x0UL 181#define PAGE_OFFSET 0x0UL
182#define __pa(x) (unsigned long)(x) 182#define __pa(x) (unsigned long)(x)
183#define __va(x) (void *)(unsigned long)(x) 183#define __va(x) (void *)(unsigned long)(x)
184#define pfn_to_page(pfn) (mem_map + (pfn))
185#define page_to_pfn(page) ((unsigned long)((page) - mem_map))
186#define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT) 184#define virt_to_page(kaddr) pfn_to_page(__pa(kaddr) >> PAGE_SHIFT)
187 185
188#define pfn_valid(pfn) ((pfn) < max_mapnr) 186#define pfn_valid(pfn) ((pfn) < max_mapnr)
@@ -193,6 +191,7 @@ page_get_storage_key(unsigned long addr)
193 191
194#endif /* __KERNEL__ */ 192#endif /* __KERNEL__ */
195 193
194#include <asm-generic/memory_model.h>
196#include <asm-generic/page.h> 195#include <asm-generic/page.h>
197 196
198#endif /* _S390_PAGE_H */ 197#endif /* _S390_PAGE_H */
diff --git a/include/asm-s390/percpu.h b/include/asm-s390/percpu.h
index 123fcaca295e..e10ed87094f0 100644
--- a/include/asm-s390/percpu.h
+++ b/include/asm-s390/percpu.h
@@ -46,10 +46,9 @@ extern unsigned long __per_cpu_offset[NR_CPUS];
46#define percpu_modcopy(pcpudst, src, size) \ 46#define percpu_modcopy(pcpudst, src, size) \
47do { \ 47do { \
48 unsigned int __i; \ 48 unsigned int __i; \
49 for (__i = 0; __i < NR_CPUS; __i++) \ 49 for_each_cpu(__i) \
50 if (cpu_possible(__i)) \ 50 memcpy((pcpudst)+__per_cpu_offset[__i], \
51 memcpy((pcpudst)+__per_cpu_offset[__i], \ 51 (src), (size)); \
52 (src), (size)); \
53} while (0) 52} while (0)
54 53
55#else /* ! SMP */ 54#else /* ! SMP */
diff --git a/include/asm-s390/pgalloc.h b/include/asm-s390/pgalloc.h
index 3417dd71ab43..e28aaf28e4a8 100644
--- a/include/asm-s390/pgalloc.h
+++ b/include/asm-s390/pgalloc.h
@@ -158,11 +158,4 @@ static inline void pte_free(struct page *pte)
158 158
159#define __pte_free_tlb(tlb,pte) tlb_remove_page(tlb,pte) 159#define __pte_free_tlb(tlb,pte) tlb_remove_page(tlb,pte)
160 160
161/*
162 * This establishes kernel virtual mappings (e.g., as a result of a
163 * vmalloc call). Since s390-esame uses a separate kernel page table,
164 * there is nothing to do here... :)
165 */
166#define set_pgdir(addr,entry) do { } while(0)
167
168#endif /* _S390_PGALLOC_H */ 161#endif /* _S390_PGALLOC_H */
diff --git a/include/asm-s390/poll.h b/include/asm-s390/poll.h
index e90a5ca42061..6f7f65ac7d27 100644
--- a/include/asm-s390/poll.h
+++ b/include/asm-s390/poll.h
@@ -24,6 +24,7 @@
24#define POLLWRBAND 0x0200 24#define POLLWRBAND 0x0200
25#define POLLMSG 0x0400 25#define POLLMSG 0x0400
26#define POLLREMOVE 0x1000 26#define POLLREMOVE 0x1000
27#define POLLRDHUP 0x2000
27 28
28struct pollfd { 29struct pollfd {
29 int fd; 30 int fd;
diff --git a/include/asm-s390/types.h b/include/asm-s390/types.h
index d0be3e477013..5738ad63537c 100644
--- a/include/asm-s390/types.h
+++ b/include/asm-s390/types.h
@@ -93,6 +93,11 @@ typedef u64 sector_t;
93#define HAVE_SECTOR_T 93#define HAVE_SECTOR_T
94#endif 94#endif
95 95
96#ifdef CONFIG_LSF
97typedef u64 blkcnt_t;
98#define HAVE_BLKCNT_T
99#endif
100
96#endif /* ! __s390x__ */ 101#endif /* ! __s390x__ */
97#endif /* __ASSEMBLY__ */ 102#endif /* __ASSEMBLY__ */
98#endif /* __KERNEL__ */ 103#endif /* __KERNEL__ */