|
@@ -212,88 +212,6 @@ static inline kgid_t xfs_gid_to_kgid(__uint32_t gid)
|
|
|
#define xfs_sort(a,n,s,fn) sort(a,n,s,fn,NULL)
|
|
|
#define xfs_stack_trace() dump_stack()
|
|
|
|
|
|
-
|
|
|
-/* Move the kernel do_div definition off to one side */
|
|
|
-
|
|
|
-#if defined __i386__
|
|
|
-/* For ia32 we need to pull some tricks to get past various versions
|
|
|
- * of the compiler which do not like us using do_div in the middle
|
|
|
- * of large functions.
|
|
|
- */
|
|
|
-static inline __u32 xfs_do_div(void *a, __u32 b, int n)
|
|
|
-{
|
|
|
- __u32 mod;
|
|
|
-
|
|
|
- switch (n) {
|
|
|
- case 4:
|
|
|
- mod = *(__u32 *)a % b;
|
|
|
- *(__u32 *)a = *(__u32 *)a / b;
|
|
|
- return mod;
|
|
|
- case 8:
|
|
|
- {
|
|
|
- unsigned long __upper, __low, __high, __mod;
|
|
|
- __u64 c = *(__u64 *)a;
|
|
|
- __upper = __high = c >> 32;
|
|
|
- __low = c;
|
|
|
- if (__high) {
|
|
|
- __upper = __high % (b);
|
|
|
- __high = __high / (b);
|
|
|
- }
|
|
|
- asm("divl %2":"=a" (__low), "=d" (__mod):"rm" (b), "0" (__low), "1" (__upper));
|
|
|
- asm("":"=A" (c):"a" (__low),"d" (__high));
|
|
|
- *(__u64 *)a = c;
|
|
|
- return __mod;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /* NOTREACHED */
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
-/* Side effect free 64 bit mod operation */
|
|
|
-static inline __u32 xfs_do_mod(void *a, __u32 b, int n)
|
|
|
-{
|
|
|
- switch (n) {
|
|
|
- case 4:
|
|
|
- return *(__u32 *)a % b;
|
|
|
- case 8:
|
|
|
- {
|
|
|
- unsigned long __upper, __low, __high, __mod;
|
|
|
- __u64 c = *(__u64 *)a;
|
|
|
- __upper = __high = c >> 32;
|
|
|
- __low = c;
|
|
|
- if (__high) {
|
|
|
- __upper = __high % (b);
|
|
|
- __high = __high / (b);
|
|
|
- }
|
|
|
- asm("divl %2":"=a" (__low), "=d" (__mod):"rm" (b), "0" (__low), "1" (__upper));
|
|
|
- asm("":"=A" (c):"a" (__low),"d" (__high));
|
|
|
- return __mod;
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- /* NOTREACHED */
|
|
|
- return 0;
|
|
|
-}
|
|
|
-#else
|
|
|
-static inline __u32 xfs_do_div(void *a, __u32 b, int n)
|
|
|
-{
|
|
|
- __u32 mod;
|
|
|
-
|
|
|
- switch (n) {
|
|
|
- case 4:
|
|
|
- mod = *(__u32 *)a % b;
|
|
|
- *(__u32 *)a = *(__u32 *)a / b;
|
|
|
- return mod;
|
|
|
- case 8:
|
|
|
- mod = do_div(*(__u64 *)a, b);
|
|
|
- return mod;
|
|
|
- }
|
|
|
-
|
|
|
- /* NOTREACHED */
|
|
|
- return 0;
|
|
|
-}
|
|
|
-
|
|
|
/* Side effect free 64 bit mod operation */
|
|
|
static inline __u32 xfs_do_mod(void *a, __u32 b, int n)
|
|
|
{
|
|
@@ -310,10 +228,7 @@ static inline __u32 xfs_do_mod(void *a, __u32 b, int n)
|
|
|
/* NOTREACHED */
|
|
|
return 0;
|
|
|
}
|
|
|
-#endif
|
|
|
|
|
|
-#undef do_div
|
|
|
-#define do_div(a, b) xfs_do_div(&(a), (b), sizeof(a))
|
|
|
#define do_mod(a, b) xfs_do_mod(&(a), (b), sizeof(a))
|
|
|
|
|
|
static inline __uint64_t roundup_64(__uint64_t x, __uint32_t y)
|