Commit 5c75390924a402fd1f9194bd69abf54fcc2d446b
Committed by
Ben Myers
1 parent
1cb9386354
Exists in
smarc-imx_3.14.28_1.0.0_ga
and in
1 other branch
xfs: remove two unused macro definitions in xfs_linux.h
Signed-off-by: Zhi Yong Wu <wuzhy@linux.vnet.ibm.com> Reviewed-by: Mark Tinguely <tinguely@sgi.com> Signed-off-by: Ben Myers <bpm@sgi.com>
Showing 1 changed file with 0 additions and 2 deletions Inline Diff
fs/xfs/xfs_linux.h
1 | /* | 1 | /* |
2 | * Copyright (c) 2000-2005 Silicon Graphics, Inc. | 2 | * Copyright (c) 2000-2005 Silicon Graphics, Inc. |
3 | * All Rights Reserved. | 3 | * All Rights Reserved. |
4 | * | 4 | * |
5 | * This program is free software; you can redistribute it and/or | 5 | * This program is free software; you can redistribute it and/or |
6 | * modify it under the terms of the GNU General Public License as | 6 | * modify it under the terms of the GNU General Public License as |
7 | * published by the Free Software Foundation. | 7 | * published by the Free Software Foundation. |
8 | * | 8 | * |
9 | * This program is distributed in the hope that it would be useful, | 9 | * This program is distributed in the hope that it would be useful, |
10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
12 | * GNU General Public License for more details. | 12 | * GNU General Public License for more details. |
13 | * | 13 | * |
14 | * You should have received a copy of the GNU General Public License | 14 | * You should have received a copy of the GNU General Public License |
15 | * along with this program; if not, write the Free Software Foundation, | 15 | * along with this program; if not, write the Free Software Foundation, |
16 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA | 16 | * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
17 | */ | 17 | */ |
18 | #ifndef __XFS_LINUX__ | 18 | #ifndef __XFS_LINUX__ |
19 | #define __XFS_LINUX__ | 19 | #define __XFS_LINUX__ |
20 | 20 | ||
21 | #include <linux/types.h> | 21 | #include <linux/types.h> |
22 | 22 | ||
23 | /* | 23 | /* |
24 | * XFS_BIG_BLKNOS needs block layer disk addresses to be 64 bits. | 24 | * XFS_BIG_BLKNOS needs block layer disk addresses to be 64 bits. |
25 | * XFS_BIG_INUMS requires XFS_BIG_BLKNOS to be set. | 25 | * XFS_BIG_INUMS requires XFS_BIG_BLKNOS to be set. |
26 | */ | 26 | */ |
27 | #if defined(CONFIG_LBDAF) || (BITS_PER_LONG == 64) | 27 | #if defined(CONFIG_LBDAF) || (BITS_PER_LONG == 64) |
28 | # define XFS_BIG_BLKNOS 1 | 28 | # define XFS_BIG_BLKNOS 1 |
29 | # define XFS_BIG_INUMS 1 | 29 | # define XFS_BIG_INUMS 1 |
30 | #else | 30 | #else |
31 | # define XFS_BIG_BLKNOS 0 | 31 | # define XFS_BIG_BLKNOS 0 |
32 | # define XFS_BIG_INUMS 0 | 32 | # define XFS_BIG_INUMS 0 |
33 | #endif | 33 | #endif |
34 | 34 | ||
35 | /* | 35 | /* |
36 | * Kernel specific type declarations for XFS | 36 | * Kernel specific type declarations for XFS |
37 | */ | 37 | */ |
38 | typedef signed char __int8_t; | 38 | typedef signed char __int8_t; |
39 | typedef unsigned char __uint8_t; | 39 | typedef unsigned char __uint8_t; |
40 | typedef signed short int __int16_t; | 40 | typedef signed short int __int16_t; |
41 | typedef unsigned short int __uint16_t; | 41 | typedef unsigned short int __uint16_t; |
42 | typedef signed int __int32_t; | 42 | typedef signed int __int32_t; |
43 | typedef unsigned int __uint32_t; | 43 | typedef unsigned int __uint32_t; |
44 | typedef signed long long int __int64_t; | 44 | typedef signed long long int __int64_t; |
45 | typedef unsigned long long int __uint64_t; | 45 | typedef unsigned long long int __uint64_t; |
46 | 46 | ||
47 | typedef __uint32_t inst_t; /* an instruction */ | 47 | typedef __uint32_t inst_t; /* an instruction */ |
48 | 48 | ||
49 | typedef __s64 xfs_off_t; /* <file offset> type */ | 49 | typedef __s64 xfs_off_t; /* <file offset> type */ |
50 | typedef unsigned long long xfs_ino_t; /* <inode> type */ | 50 | typedef unsigned long long xfs_ino_t; /* <inode> type */ |
51 | typedef __s64 xfs_daddr_t; /* <disk address> type */ | 51 | typedef __s64 xfs_daddr_t; /* <disk address> type */ |
52 | typedef char * xfs_caddr_t; /* <core address> type */ | 52 | typedef char * xfs_caddr_t; /* <core address> type */ |
53 | typedef __u32 xfs_dev_t; | 53 | typedef __u32 xfs_dev_t; |
54 | typedef __u32 xfs_nlink_t; | 54 | typedef __u32 xfs_nlink_t; |
55 | 55 | ||
56 | /* __psint_t is the same size as a pointer */ | 56 | /* __psint_t is the same size as a pointer */ |
57 | #if (BITS_PER_LONG == 32) | 57 | #if (BITS_PER_LONG == 32) |
58 | typedef __int32_t __psint_t; | 58 | typedef __int32_t __psint_t; |
59 | typedef __uint32_t __psunsigned_t; | 59 | typedef __uint32_t __psunsigned_t; |
60 | #elif (BITS_PER_LONG == 64) | 60 | #elif (BITS_PER_LONG == 64) |
61 | typedef __int64_t __psint_t; | 61 | typedef __int64_t __psint_t; |
62 | typedef __uint64_t __psunsigned_t; | 62 | typedef __uint64_t __psunsigned_t; |
63 | #else | 63 | #else |
64 | #error BITS_PER_LONG must be 32 or 64 | 64 | #error BITS_PER_LONG must be 32 or 64 |
65 | #endif | 65 | #endif |
66 | 66 | ||
67 | #include "xfs_types.h" | 67 | #include "xfs_types.h" |
68 | 68 | ||
69 | #include "kmem.h" | 69 | #include "kmem.h" |
70 | #include "mrlock.h" | 70 | #include "mrlock.h" |
71 | #include "time.h" | 71 | #include "time.h" |
72 | #include "uuid.h" | 72 | #include "uuid.h" |
73 | 73 | ||
74 | #include <linux/semaphore.h> | 74 | #include <linux/semaphore.h> |
75 | #include <linux/mm.h> | 75 | #include <linux/mm.h> |
76 | #include <linux/kernel.h> | 76 | #include <linux/kernel.h> |
77 | #include <linux/blkdev.h> | 77 | #include <linux/blkdev.h> |
78 | #include <linux/slab.h> | 78 | #include <linux/slab.h> |
79 | #include <linux/crc32c.h> | 79 | #include <linux/crc32c.h> |
80 | #include <linux/module.h> | 80 | #include <linux/module.h> |
81 | #include <linux/mutex.h> | 81 | #include <linux/mutex.h> |
82 | #include <linux/file.h> | 82 | #include <linux/file.h> |
83 | #include <linux/swap.h> | 83 | #include <linux/swap.h> |
84 | #include <linux/errno.h> | 84 | #include <linux/errno.h> |
85 | #include <linux/sched.h> | 85 | #include <linux/sched.h> |
86 | #include <linux/bitops.h> | 86 | #include <linux/bitops.h> |
87 | #include <linux/major.h> | 87 | #include <linux/major.h> |
88 | #include <linux/pagemap.h> | 88 | #include <linux/pagemap.h> |
89 | #include <linux/vfs.h> | 89 | #include <linux/vfs.h> |
90 | #include <linux/seq_file.h> | 90 | #include <linux/seq_file.h> |
91 | #include <linux/init.h> | 91 | #include <linux/init.h> |
92 | #include <linux/list.h> | 92 | #include <linux/list.h> |
93 | #include <linux/proc_fs.h> | 93 | #include <linux/proc_fs.h> |
94 | #include <linux/sort.h> | 94 | #include <linux/sort.h> |
95 | #include <linux/cpu.h> | 95 | #include <linux/cpu.h> |
96 | #include <linux/notifier.h> | 96 | #include <linux/notifier.h> |
97 | #include <linux/delay.h> | 97 | #include <linux/delay.h> |
98 | #include <linux/log2.h> | 98 | #include <linux/log2.h> |
99 | #include <linux/spinlock.h> | 99 | #include <linux/spinlock.h> |
100 | #include <linux/random.h> | 100 | #include <linux/random.h> |
101 | #include <linux/ctype.h> | 101 | #include <linux/ctype.h> |
102 | #include <linux/writeback.h> | 102 | #include <linux/writeback.h> |
103 | #include <linux/capability.h> | 103 | #include <linux/capability.h> |
104 | #include <linux/kthread.h> | 104 | #include <linux/kthread.h> |
105 | #include <linux/freezer.h> | 105 | #include <linux/freezer.h> |
106 | #include <linux/list_sort.h> | 106 | #include <linux/list_sort.h> |
107 | #include <linux/ratelimit.h> | 107 | #include <linux/ratelimit.h> |
108 | 108 | ||
109 | #include <asm/page.h> | 109 | #include <asm/page.h> |
110 | #include <asm/div64.h> | 110 | #include <asm/div64.h> |
111 | #include <asm/param.h> | 111 | #include <asm/param.h> |
112 | #include <asm/uaccess.h> | 112 | #include <asm/uaccess.h> |
113 | #include <asm/byteorder.h> | 113 | #include <asm/byteorder.h> |
114 | #include <asm/unaligned.h> | 114 | #include <asm/unaligned.h> |
115 | 115 | ||
116 | #include "xfs_vnode.h" | 116 | #include "xfs_vnode.h" |
117 | #include "xfs_stats.h" | 117 | #include "xfs_stats.h" |
118 | #include "xfs_sysctl.h" | 118 | #include "xfs_sysctl.h" |
119 | #include "xfs_iops.h" | 119 | #include "xfs_iops.h" |
120 | #include "xfs_aops.h" | 120 | #include "xfs_aops.h" |
121 | #include "xfs_super.h" | 121 | #include "xfs_super.h" |
122 | #include "xfs_buf.h" | 122 | #include "xfs_buf.h" |
123 | #include "xfs_message.h" | 123 | #include "xfs_message.h" |
124 | 124 | ||
125 | #ifdef __BIG_ENDIAN | 125 | #ifdef __BIG_ENDIAN |
126 | #define XFS_NATIVE_HOST 1 | 126 | #define XFS_NATIVE_HOST 1 |
127 | #else | 127 | #else |
128 | #undef XFS_NATIVE_HOST | 128 | #undef XFS_NATIVE_HOST |
129 | #endif | 129 | #endif |
130 | 130 | ||
131 | /* | 131 | /* |
132 | * Feature macros (disable/enable) | 132 | * Feature macros (disable/enable) |
133 | */ | 133 | */ |
134 | #ifdef CONFIG_SMP | 134 | #ifdef CONFIG_SMP |
135 | #define HAVE_PERCPU_SB /* per cpu superblock counters are a 2.6 feature */ | 135 | #define HAVE_PERCPU_SB /* per cpu superblock counters are a 2.6 feature */ |
136 | #else | 136 | #else |
137 | #undef HAVE_PERCPU_SB /* per cpu superblock counters are a 2.6 feature */ | 137 | #undef HAVE_PERCPU_SB /* per cpu superblock counters are a 2.6 feature */ |
138 | #endif | 138 | #endif |
139 | 139 | ||
140 | #define irix_sgid_inherit xfs_params.sgid_inherit.val | 140 | #define irix_sgid_inherit xfs_params.sgid_inherit.val |
141 | #define irix_symlink_mode xfs_params.symlink_mode.val | 141 | #define irix_symlink_mode xfs_params.symlink_mode.val |
142 | #define xfs_panic_mask xfs_params.panic_mask.val | 142 | #define xfs_panic_mask xfs_params.panic_mask.val |
143 | #define xfs_error_level xfs_params.error_level.val | 143 | #define xfs_error_level xfs_params.error_level.val |
144 | #define xfs_syncd_centisecs xfs_params.syncd_timer.val | 144 | #define xfs_syncd_centisecs xfs_params.syncd_timer.val |
145 | #define xfs_stats_clear xfs_params.stats_clear.val | 145 | #define xfs_stats_clear xfs_params.stats_clear.val |
146 | #define xfs_inherit_sync xfs_params.inherit_sync.val | 146 | #define xfs_inherit_sync xfs_params.inherit_sync.val |
147 | #define xfs_inherit_nodump xfs_params.inherit_nodump.val | 147 | #define xfs_inherit_nodump xfs_params.inherit_nodump.val |
148 | #define xfs_inherit_noatime xfs_params.inherit_noatim.val | 148 | #define xfs_inherit_noatime xfs_params.inherit_noatim.val |
149 | #define xfs_buf_timer_centisecs xfs_params.xfs_buf_timer.val | ||
150 | #define xfs_buf_age_centisecs xfs_params.xfs_buf_age.val | ||
151 | #define xfs_inherit_nosymlinks xfs_params.inherit_nosym.val | 149 | #define xfs_inherit_nosymlinks xfs_params.inherit_nosym.val |
152 | #define xfs_rotorstep xfs_params.rotorstep.val | 150 | #define xfs_rotorstep xfs_params.rotorstep.val |
153 | #define xfs_inherit_nodefrag xfs_params.inherit_nodfrg.val | 151 | #define xfs_inherit_nodefrag xfs_params.inherit_nodfrg.val |
154 | #define xfs_fstrm_centisecs xfs_params.fstrm_timer.val | 152 | #define xfs_fstrm_centisecs xfs_params.fstrm_timer.val |
155 | #define xfs_eofb_secs xfs_params.eofb_timer.val | 153 | #define xfs_eofb_secs xfs_params.eofb_timer.val |
156 | 154 | ||
157 | #define current_cpu() (raw_smp_processor_id()) | 155 | #define current_cpu() (raw_smp_processor_id()) |
158 | #define current_pid() (current->pid) | 156 | #define current_pid() (current->pid) |
159 | #define current_test_flags(f) (current->flags & (f)) | 157 | #define current_test_flags(f) (current->flags & (f)) |
160 | #define current_set_flags_nested(sp, f) \ | 158 | #define current_set_flags_nested(sp, f) \ |
161 | (*(sp) = current->flags, current->flags |= (f)) | 159 | (*(sp) = current->flags, current->flags |= (f)) |
162 | #define current_clear_flags_nested(sp, f) \ | 160 | #define current_clear_flags_nested(sp, f) \ |
163 | (*(sp) = current->flags, current->flags &= ~(f)) | 161 | (*(sp) = current->flags, current->flags &= ~(f)) |
164 | #define current_restore_flags_nested(sp, f) \ | 162 | #define current_restore_flags_nested(sp, f) \ |
165 | (current->flags = ((current->flags & ~(f)) | (*(sp) & (f)))) | 163 | (current->flags = ((current->flags & ~(f)) | (*(sp) & (f)))) |
166 | 164 | ||
167 | #define spinlock_destroy(lock) | 165 | #define spinlock_destroy(lock) |
168 | 166 | ||
169 | #define NBBY 8 /* number of bits per byte */ | 167 | #define NBBY 8 /* number of bits per byte */ |
170 | 168 | ||
171 | /* | 169 | /* |
172 | * Size of block device i/o is parameterized here. | 170 | * Size of block device i/o is parameterized here. |
173 | * Currently the system supports page-sized i/o. | 171 | * Currently the system supports page-sized i/o. |
174 | */ | 172 | */ |
175 | #define BLKDEV_IOSHIFT PAGE_CACHE_SHIFT | 173 | #define BLKDEV_IOSHIFT PAGE_CACHE_SHIFT |
176 | #define BLKDEV_IOSIZE (1<<BLKDEV_IOSHIFT) | 174 | #define BLKDEV_IOSIZE (1<<BLKDEV_IOSHIFT) |
177 | /* number of BB's per block device block */ | 175 | /* number of BB's per block device block */ |
178 | #define BLKDEV_BB BTOBB(BLKDEV_IOSIZE) | 176 | #define BLKDEV_BB BTOBB(BLKDEV_IOSIZE) |
179 | 177 | ||
180 | #define ENOATTR ENODATA /* Attribute not found */ | 178 | #define ENOATTR ENODATA /* Attribute not found */ |
181 | #define EWRONGFS EINVAL /* Mount with wrong filesystem type */ | 179 | #define EWRONGFS EINVAL /* Mount with wrong filesystem type */ |
182 | #define EFSCORRUPTED EUCLEAN /* Filesystem is corrupted */ | 180 | #define EFSCORRUPTED EUCLEAN /* Filesystem is corrupted */ |
183 | 181 | ||
184 | #define SYNCHRONIZE() barrier() | 182 | #define SYNCHRONIZE() barrier() |
185 | #define __return_address __builtin_return_address(0) | 183 | #define __return_address __builtin_return_address(0) |
186 | 184 | ||
187 | #define XFS_PROJID_DEFAULT 0 | 185 | #define XFS_PROJID_DEFAULT 0 |
188 | #define MAXPATHLEN 1024 | 186 | #define MAXPATHLEN 1024 |
189 | 187 | ||
190 | #define MIN(a,b) (min(a,b)) | 188 | #define MIN(a,b) (min(a,b)) |
191 | #define MAX(a,b) (max(a,b)) | 189 | #define MAX(a,b) (max(a,b)) |
192 | #define howmany(x, y) (((x)+((y)-1))/(y)) | 190 | #define howmany(x, y) (((x)+((y)-1))/(y)) |
193 | 191 | ||
194 | /* Kernel uid/gid conversion. These are used to convert to/from the on disk | 192 | /* Kernel uid/gid conversion. These are used to convert to/from the on disk |
195 | * uid_t/gid_t types to the kuid_t/kgid_t types that the kernel uses internally. | 193 | * uid_t/gid_t types to the kuid_t/kgid_t types that the kernel uses internally. |
196 | * The conversion here is type only, the value will remain the same since we | 194 | * The conversion here is type only, the value will remain the same since we |
197 | * are converting to the init_user_ns. The uid is later mapped to a particular | 195 | * are converting to the init_user_ns. The uid is later mapped to a particular |
198 | * user namespace value when crossing the kernel/user boundary. | 196 | * user namespace value when crossing the kernel/user boundary. |
199 | */ | 197 | */ |
200 | static inline __uint32_t xfs_kuid_to_uid(kuid_t uid) | 198 | static inline __uint32_t xfs_kuid_to_uid(kuid_t uid) |
201 | { | 199 | { |
202 | return from_kuid(&init_user_ns, uid); | 200 | return from_kuid(&init_user_ns, uid); |
203 | } | 201 | } |
204 | 202 | ||
205 | static inline kuid_t xfs_uid_to_kuid(__uint32_t uid) | 203 | static inline kuid_t xfs_uid_to_kuid(__uint32_t uid) |
206 | { | 204 | { |
207 | return make_kuid(&init_user_ns, uid); | 205 | return make_kuid(&init_user_ns, uid); |
208 | } | 206 | } |
209 | 207 | ||
210 | static inline __uint32_t xfs_kgid_to_gid(kgid_t gid) | 208 | static inline __uint32_t xfs_kgid_to_gid(kgid_t gid) |
211 | { | 209 | { |
212 | return from_kgid(&init_user_ns, gid); | 210 | return from_kgid(&init_user_ns, gid); |
213 | } | 211 | } |
214 | 212 | ||
215 | static inline kgid_t xfs_gid_to_kgid(__uint32_t gid) | 213 | static inline kgid_t xfs_gid_to_kgid(__uint32_t gid) |
216 | { | 214 | { |
217 | return make_kgid(&init_user_ns, gid); | 215 | return make_kgid(&init_user_ns, gid); |
218 | } | 216 | } |
219 | 217 | ||
220 | /* | 218 | /* |
221 | * Various platform dependent calls that don't fit anywhere else | 219 | * Various platform dependent calls that don't fit anywhere else |
222 | */ | 220 | */ |
223 | #define xfs_sort(a,n,s,fn) sort(a,n,s,fn,NULL) | 221 | #define xfs_sort(a,n,s,fn) sort(a,n,s,fn,NULL) |
224 | #define xfs_stack_trace() dump_stack() | 222 | #define xfs_stack_trace() dump_stack() |
225 | 223 | ||
226 | 224 | ||
227 | /* Move the kernel do_div definition off to one side */ | 225 | /* Move the kernel do_div definition off to one side */ |
228 | 226 | ||
229 | #if defined __i386__ | 227 | #if defined __i386__ |
230 | /* For ia32 we need to pull some tricks to get past various versions | 228 | /* For ia32 we need to pull some tricks to get past various versions |
231 | * of the compiler which do not like us using do_div in the middle | 229 | * of the compiler which do not like us using do_div in the middle |
232 | * of large functions. | 230 | * of large functions. |
233 | */ | 231 | */ |
234 | static inline __u32 xfs_do_div(void *a, __u32 b, int n) | 232 | static inline __u32 xfs_do_div(void *a, __u32 b, int n) |
235 | { | 233 | { |
236 | __u32 mod; | 234 | __u32 mod; |
237 | 235 | ||
238 | switch (n) { | 236 | switch (n) { |
239 | case 4: | 237 | case 4: |
240 | mod = *(__u32 *)a % b; | 238 | mod = *(__u32 *)a % b; |
241 | *(__u32 *)a = *(__u32 *)a / b; | 239 | *(__u32 *)a = *(__u32 *)a / b; |
242 | return mod; | 240 | return mod; |
243 | case 8: | 241 | case 8: |
244 | { | 242 | { |
245 | unsigned long __upper, __low, __high, __mod; | 243 | unsigned long __upper, __low, __high, __mod; |
246 | __u64 c = *(__u64 *)a; | 244 | __u64 c = *(__u64 *)a; |
247 | __upper = __high = c >> 32; | 245 | __upper = __high = c >> 32; |
248 | __low = c; | 246 | __low = c; |
249 | if (__high) { | 247 | if (__high) { |
250 | __upper = __high % (b); | 248 | __upper = __high % (b); |
251 | __high = __high / (b); | 249 | __high = __high / (b); |
252 | } | 250 | } |
253 | asm("divl %2":"=a" (__low), "=d" (__mod):"rm" (b), "0" (__low), "1" (__upper)); | 251 | asm("divl %2":"=a" (__low), "=d" (__mod):"rm" (b), "0" (__low), "1" (__upper)); |
254 | asm("":"=A" (c):"a" (__low),"d" (__high)); | 252 | asm("":"=A" (c):"a" (__low),"d" (__high)); |
255 | *(__u64 *)a = c; | 253 | *(__u64 *)a = c; |
256 | return __mod; | 254 | return __mod; |
257 | } | 255 | } |
258 | } | 256 | } |
259 | 257 | ||
260 | /* NOTREACHED */ | 258 | /* NOTREACHED */ |
261 | return 0; | 259 | return 0; |
262 | } | 260 | } |
263 | 261 | ||
264 | /* Side effect free 64 bit mod operation */ | 262 | /* Side effect free 64 bit mod operation */ |
265 | static inline __u32 xfs_do_mod(void *a, __u32 b, int n) | 263 | static inline __u32 xfs_do_mod(void *a, __u32 b, int n) |
266 | { | 264 | { |
267 | switch (n) { | 265 | switch (n) { |
268 | case 4: | 266 | case 4: |
269 | return *(__u32 *)a % b; | 267 | return *(__u32 *)a % b; |
270 | case 8: | 268 | case 8: |
271 | { | 269 | { |
272 | unsigned long __upper, __low, __high, __mod; | 270 | unsigned long __upper, __low, __high, __mod; |
273 | __u64 c = *(__u64 *)a; | 271 | __u64 c = *(__u64 *)a; |
274 | __upper = __high = c >> 32; | 272 | __upper = __high = c >> 32; |
275 | __low = c; | 273 | __low = c; |
276 | if (__high) { | 274 | if (__high) { |
277 | __upper = __high % (b); | 275 | __upper = __high % (b); |
278 | __high = __high / (b); | 276 | __high = __high / (b); |
279 | } | 277 | } |
280 | asm("divl %2":"=a" (__low), "=d" (__mod):"rm" (b), "0" (__low), "1" (__upper)); | 278 | asm("divl %2":"=a" (__low), "=d" (__mod):"rm" (b), "0" (__low), "1" (__upper)); |
281 | asm("":"=A" (c):"a" (__low),"d" (__high)); | 279 | asm("":"=A" (c):"a" (__low),"d" (__high)); |
282 | return __mod; | 280 | return __mod; |
283 | } | 281 | } |
284 | } | 282 | } |
285 | 283 | ||
286 | /* NOTREACHED */ | 284 | /* NOTREACHED */ |
287 | return 0; | 285 | return 0; |
288 | } | 286 | } |
289 | #else | 287 | #else |
290 | static inline __u32 xfs_do_div(void *a, __u32 b, int n) | 288 | static inline __u32 xfs_do_div(void *a, __u32 b, int n) |
291 | { | 289 | { |
292 | __u32 mod; | 290 | __u32 mod; |
293 | 291 | ||
294 | switch (n) { | 292 | switch (n) { |
295 | case 4: | 293 | case 4: |
296 | mod = *(__u32 *)a % b; | 294 | mod = *(__u32 *)a % b; |
297 | *(__u32 *)a = *(__u32 *)a / b; | 295 | *(__u32 *)a = *(__u32 *)a / b; |
298 | return mod; | 296 | return mod; |
299 | case 8: | 297 | case 8: |
300 | mod = do_div(*(__u64 *)a, b); | 298 | mod = do_div(*(__u64 *)a, b); |
301 | return mod; | 299 | return mod; |
302 | } | 300 | } |
303 | 301 | ||
304 | /* NOTREACHED */ | 302 | /* NOTREACHED */ |
305 | return 0; | 303 | return 0; |
306 | } | 304 | } |
307 | 305 | ||
308 | /* Side effect free 64 bit mod operation */ | 306 | /* Side effect free 64 bit mod operation */ |
309 | static inline __u32 xfs_do_mod(void *a, __u32 b, int n) | 307 | static inline __u32 xfs_do_mod(void *a, __u32 b, int n) |
310 | { | 308 | { |
311 | switch (n) { | 309 | switch (n) { |
312 | case 4: | 310 | case 4: |
313 | return *(__u32 *)a % b; | 311 | return *(__u32 *)a % b; |
314 | case 8: | 312 | case 8: |
315 | { | 313 | { |
316 | __u64 c = *(__u64 *)a; | 314 | __u64 c = *(__u64 *)a; |
317 | return do_div(c, b); | 315 | return do_div(c, b); |
318 | } | 316 | } |
319 | } | 317 | } |
320 | 318 | ||
321 | /* NOTREACHED */ | 319 | /* NOTREACHED */ |
322 | return 0; | 320 | return 0; |
323 | } | 321 | } |
324 | #endif | 322 | #endif |
325 | 323 | ||
326 | #undef do_div | 324 | #undef do_div |
327 | #define do_div(a, b) xfs_do_div(&(a), (b), sizeof(a)) | 325 | #define do_div(a, b) xfs_do_div(&(a), (b), sizeof(a)) |
328 | #define do_mod(a, b) xfs_do_mod(&(a), (b), sizeof(a)) | 326 | #define do_mod(a, b) xfs_do_mod(&(a), (b), sizeof(a)) |
329 | 327 | ||
330 | static inline __uint64_t roundup_64(__uint64_t x, __uint32_t y) | 328 | static inline __uint64_t roundup_64(__uint64_t x, __uint32_t y) |
331 | { | 329 | { |
332 | x += y - 1; | 330 | x += y - 1; |
333 | do_div(x, y); | 331 | do_div(x, y); |
334 | return(x * y); | 332 | return(x * y); |
335 | } | 333 | } |
336 | 334 | ||
337 | static inline __uint64_t howmany_64(__uint64_t x, __uint32_t y) | 335 | static inline __uint64_t howmany_64(__uint64_t x, __uint32_t y) |
338 | { | 336 | { |
339 | x += y - 1; | 337 | x += y - 1; |
340 | do_div(x, y); | 338 | do_div(x, y); |
341 | return x; | 339 | return x; |
342 | } | 340 | } |
343 | 341 | ||
344 | /* ARM old ABI has some weird alignment/padding */ | 342 | /* ARM old ABI has some weird alignment/padding */ |
345 | #if defined(__arm__) && !defined(__ARM_EABI__) | 343 | #if defined(__arm__) && !defined(__ARM_EABI__) |
346 | #define __arch_pack __attribute__((packed)) | 344 | #define __arch_pack __attribute__((packed)) |
347 | #else | 345 | #else |
348 | #define __arch_pack | 346 | #define __arch_pack |
349 | #endif | 347 | #endif |
350 | 348 | ||
351 | #define ASSERT_ALWAYS(expr) \ | 349 | #define ASSERT_ALWAYS(expr) \ |
352 | (unlikely(expr) ? (void)0 : assfail(#expr, __FILE__, __LINE__)) | 350 | (unlikely(expr) ? (void)0 : assfail(#expr, __FILE__, __LINE__)) |
353 | 351 | ||
354 | #ifdef DEBUG | 352 | #ifdef DEBUG |
355 | #define ASSERT(expr) \ | 353 | #define ASSERT(expr) \ |
356 | (unlikely(expr) ? (void)0 : assfail(#expr, __FILE__, __LINE__)) | 354 | (unlikely(expr) ? (void)0 : assfail(#expr, __FILE__, __LINE__)) |
357 | 355 | ||
358 | #ifndef STATIC | 356 | #ifndef STATIC |
359 | # define STATIC noinline | 357 | # define STATIC noinline |
360 | #endif | 358 | #endif |
361 | 359 | ||
362 | #else /* !DEBUG */ | 360 | #else /* !DEBUG */ |
363 | 361 | ||
364 | #ifdef XFS_WARN | 362 | #ifdef XFS_WARN |
365 | 363 | ||
366 | #define ASSERT(expr) \ | 364 | #define ASSERT(expr) \ |
367 | (unlikely(expr) ? (void)0 : asswarn(#expr, __FILE__, __LINE__)) | 365 | (unlikely(expr) ? (void)0 : asswarn(#expr, __FILE__, __LINE__)) |
368 | 366 | ||
369 | #ifndef STATIC | 367 | #ifndef STATIC |
370 | # define STATIC static noinline | 368 | # define STATIC static noinline |
371 | #endif | 369 | #endif |
372 | 370 | ||
373 | #else /* !DEBUG && !XFS_WARN */ | 371 | #else /* !DEBUG && !XFS_WARN */ |
374 | 372 | ||
375 | #define ASSERT(expr) ((void)0) | 373 | #define ASSERT(expr) ((void)0) |
376 | 374 | ||
377 | #ifndef STATIC | 375 | #ifndef STATIC |
378 | # define STATIC static noinline | 376 | # define STATIC static noinline |
379 | #endif | 377 | #endif |
380 | 378 | ||
381 | #endif /* XFS_WARN */ | 379 | #endif /* XFS_WARN */ |
382 | #endif /* DEBUG */ | 380 | #endif /* DEBUG */ |
383 | 381 | ||
384 | #endif /* __XFS_LINUX__ */ | 382 | #endif /* __XFS_LINUX__ */ |
385 | 383 |