diff options
| author | Len Brown <len.brown@intel.com> | 2012-04-06 21:48:59 -0400 |
|---|---|---|
| committer | Len Brown <len.brown@intel.com> | 2012-04-06 21:48:59 -0400 |
| commit | eeaab2d8af2cf1d36d7086f22e9de42d6dd2995c (patch) | |
| tree | 369b9c91a6d808944f07d2290fec6f9fe2731904 /include/asm-generic | |
| parent | ee01e663373343c63e0e3d364d09f6155378dbcc (diff) | |
| parent | aaef292acf3a78d9c0bb6fb72226077d286b45d7 (diff) | |
Merge branches 'idle-fix' and 'misc' into release
Diffstat (limited to 'include/asm-generic')
| -rw-r--r-- | include/asm-generic/atomic.h | 3 | ||||
| -rw-r--r-- | include/asm-generic/barrier.h | 50 | ||||
| -rw-r--r-- | include/asm-generic/bitops/atomic.h | 2 | ||||
| -rw-r--r-- | include/asm-generic/bug.h | 6 | ||||
| -rw-r--r-- | include/asm-generic/cmpxchg.h | 87 | ||||
| -rw-r--r-- | include/asm-generic/dma-mapping-common.h | 1 | ||||
| -rw-r--r-- | include/asm-generic/exec.h | 19 | ||||
| -rw-r--r-- | include/asm-generic/getorder.h | 53 | ||||
| -rw-r--r-- | include/asm-generic/gpio.h | 4 | ||||
| -rw-r--r-- | include/asm-generic/mman-common.h | 4 | ||||
| -rw-r--r-- | include/asm-generic/pci-bridge.h | 6 | ||||
| -rw-r--r-- | include/asm-generic/pci.h | 24 | ||||
| -rw-r--r-- | include/asm-generic/pgtable.h | 62 | ||||
| -rw-r--r-- | include/asm-generic/posix_types.h | 109 | ||||
| -rw-r--r-- | include/asm-generic/socket.h | 5 | ||||
| -rw-r--r-- | include/asm-generic/switch_to.h | 30 | ||||
| -rw-r--r-- | include/asm-generic/system.h | 141 | ||||
| -rw-r--r-- | include/asm-generic/tlbflush.h | 2 | ||||
| -rw-r--r-- | include/asm-generic/unistd.h | 2 | ||||
| -rw-r--r-- | include/asm-generic/vmlinux.lds.h | 36 |
20 files changed, 351 insertions, 295 deletions
diff --git a/include/asm-generic/atomic.h b/include/asm-generic/atomic.h index e37963c1df4d..1ced6413ea03 100644 --- a/include/asm-generic/atomic.h +++ b/include/asm-generic/atomic.h | |||
| @@ -15,6 +15,8 @@ | |||
| 15 | #ifndef __ASM_GENERIC_ATOMIC_H | 15 | #ifndef __ASM_GENERIC_ATOMIC_H |
| 16 | #define __ASM_GENERIC_ATOMIC_H | 16 | #define __ASM_GENERIC_ATOMIC_H |
| 17 | 17 | ||
| 18 | #include <asm/cmpxchg.h> | ||
| 19 | |||
| 18 | #ifdef CONFIG_SMP | 20 | #ifdef CONFIG_SMP |
| 19 | /* Force people to define core atomics */ | 21 | /* Force people to define core atomics */ |
| 20 | # if !defined(atomic_add_return) || !defined(atomic_sub_return) || \ | 22 | # if !defined(atomic_add_return) || !defined(atomic_sub_return) || \ |
| @@ -52,7 +54,6 @@ | |||
| 52 | #define atomic_set(v, i) (((v)->counter) = (i)) | 54 | #define atomic_set(v, i) (((v)->counter) = (i)) |
| 53 | 55 | ||
| 54 | #include <linux/irqflags.h> | 56 | #include <linux/irqflags.h> |
| 55 | #include <asm/system.h> | ||
| 56 | 57 | ||
| 57 | /** | 58 | /** |
| 58 | * atomic_add_return - add integer to atomic variable | 59 | * atomic_add_return - add integer to atomic variable |
diff --git a/include/asm-generic/barrier.h b/include/asm-generic/barrier.h new file mode 100644 index 000000000000..639d7a4d033b --- /dev/null +++ b/include/asm-generic/barrier.h | |||
| @@ -0,0 +1,50 @@ | |||
| 1 | /* Generic barrier definitions, based on MN10300 definitions. | ||
| 2 | * | ||
| 3 | * It should be possible to use these on really simple architectures, | ||
| 4 | * but it serves more as a starting point for new ports. | ||
| 5 | * | ||
| 6 | * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved. | ||
| 7 | * Written by David Howells (dhowells@redhat.com) | ||
| 8 | * | ||
| 9 | * This program is free software; you can redistribute it and/or | ||
| 10 | * modify it under the terms of the GNU General Public Licence | ||
| 11 | * as published by the Free Software Foundation; either version | ||
| 12 | * 2 of the Licence, or (at your option) any later version. | ||
| 13 | */ | ||
| 14 | #ifndef __ASM_GENERIC_BARRIER_H | ||
| 15 | #define __ASM_GENERIC_BARRIER_H | ||
| 16 | |||
| 17 | #ifndef __ASSEMBLY__ | ||
| 18 | |||
| 19 | #define nop() asm volatile ("nop") | ||
| 20 | |||
| 21 | /* | ||
| 22 | * Force strict CPU ordering. | ||
| 23 | * And yes, this is required on UP too when we're talking | ||
| 24 | * to devices. | ||
| 25 | * | ||
| 26 | * This implementation only contains a compiler barrier. | ||
| 27 | */ | ||
| 28 | |||
| 29 | #define mb() asm volatile ("": : :"memory") | ||
| 30 | #define rmb() mb() | ||
| 31 | #define wmb() asm volatile ("": : :"memory") | ||
| 32 | |||
| 33 | #ifdef CONFIG_SMP | ||
| 34 | #define smp_mb() mb() | ||
| 35 | #define smp_rmb() rmb() | ||
| 36 | #define smp_wmb() wmb() | ||
| 37 | #else | ||
| 38 | #define smp_mb() barrier() | ||
| 39 | #define smp_rmb() barrier() | ||
| 40 | #define smp_wmb() barrier() | ||
| 41 | #endif | ||
| 42 | |||
| 43 | #define set_mb(var, value) do { var = value; mb(); } while (0) | ||
| 44 | #define set_wmb(var, value) do { var = value; wmb(); } while (0) | ||
| 45 | |||
| 46 | #define read_barrier_depends() do {} while (0) | ||
| 47 | #define smp_read_barrier_depends() do {} while (0) | ||
| 48 | |||
| 49 | #endif /* !__ASSEMBLY__ */ | ||
| 50 | #endif /* __ASM_GENERIC_BARRIER_H */ | ||
diff --git a/include/asm-generic/bitops/atomic.h b/include/asm-generic/bitops/atomic.h index ecc44a8e2b44..9ae6c34dc191 100644 --- a/include/asm-generic/bitops/atomic.h +++ b/include/asm-generic/bitops/atomic.h | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | #define _ASM_GENERIC_BITOPS_ATOMIC_H_ | 2 | #define _ASM_GENERIC_BITOPS_ATOMIC_H_ |
| 3 | 3 | ||
| 4 | #include <asm/types.h> | 4 | #include <asm/types.h> |
| 5 | #include <asm/system.h> | 5 | #include <linux/irqflags.h> |
| 6 | 6 | ||
| 7 | #ifdef CONFIG_SMP | 7 | #ifdef CONFIG_SMP |
| 8 | #include <asm/spinlock.h> | 8 | #include <asm/spinlock.h> |
diff --git a/include/asm-generic/bug.h b/include/asm-generic/bug.h index 84458b0c38d1..2520a6e241dc 100644 --- a/include/asm-generic/bug.h +++ b/include/asm-generic/bug.h | |||
| @@ -134,7 +134,7 @@ extern void warn_slowpath_null(const char *file, const int line); | |||
| 134 | #endif | 134 | #endif |
| 135 | 135 | ||
| 136 | #define WARN_ON_ONCE(condition) ({ \ | 136 | #define WARN_ON_ONCE(condition) ({ \ |
| 137 | static bool __warned; \ | 137 | static bool __section(.data.unlikely) __warned; \ |
| 138 | int __ret_warn_once = !!(condition); \ | 138 | int __ret_warn_once = !!(condition); \ |
| 139 | \ | 139 | \ |
| 140 | if (unlikely(__ret_warn_once)) \ | 140 | if (unlikely(__ret_warn_once)) \ |
| @@ -144,7 +144,7 @@ extern void warn_slowpath_null(const char *file, const int line); | |||
| 144 | }) | 144 | }) |
| 145 | 145 | ||
| 146 | #define WARN_ONCE(condition, format...) ({ \ | 146 | #define WARN_ONCE(condition, format...) ({ \ |
| 147 | static bool __warned; \ | 147 | static bool __section(.data.unlikely) __warned; \ |
| 148 | int __ret_warn_once = !!(condition); \ | 148 | int __ret_warn_once = !!(condition); \ |
| 149 | \ | 149 | \ |
| 150 | if (unlikely(__ret_warn_once)) \ | 150 | if (unlikely(__ret_warn_once)) \ |
| @@ -154,7 +154,7 @@ extern void warn_slowpath_null(const char *file, const int line); | |||
| 154 | }) | 154 | }) |
| 155 | 155 | ||
| 156 | #define WARN_TAINT_ONCE(condition, taint, format...) ({ \ | 156 | #define WARN_TAINT_ONCE(condition, taint, format...) ({ \ |
| 157 | static bool __warned; \ | 157 | static bool __section(.data.unlikely) __warned; \ |
| 158 | int __ret_warn_once = !!(condition); \ | 158 | int __ret_warn_once = !!(condition); \ |
| 159 | \ | 159 | \ |
| 160 | if (unlikely(__ret_warn_once)) \ | 160 | if (unlikely(__ret_warn_once)) \ |
diff --git a/include/asm-generic/cmpxchg.h b/include/asm-generic/cmpxchg.h index 213ac6e8fe39..8a361834dc25 100644 --- a/include/asm-generic/cmpxchg.h +++ b/include/asm-generic/cmpxchg.h | |||
| @@ -1,22 +1,97 @@ | |||
| 1 | /* | ||
| 2 | * Generic UP xchg and cmpxchg using interrupt disablement. Does not | ||
| 3 | * support SMP. | ||
| 4 | */ | ||
| 5 | |||
| 1 | #ifndef __ASM_GENERIC_CMPXCHG_H | 6 | #ifndef __ASM_GENERIC_CMPXCHG_H |
| 2 | #define __ASM_GENERIC_CMPXCHG_H | 7 | #define __ASM_GENERIC_CMPXCHG_H |
| 3 | 8 | ||
| 4 | /* | ||
| 5 | * Generic cmpxchg | ||
| 6 | * | ||
| 7 | * Uses the local cmpxchg. Does not support SMP. | ||
| 8 | */ | ||
| 9 | #ifdef CONFIG_SMP | 9 | #ifdef CONFIG_SMP |
| 10 | #error "Cannot use generic cmpxchg on SMP" | 10 | #error "Cannot use generic cmpxchg on SMP" |
| 11 | #endif | 11 | #endif |
| 12 | 12 | ||
| 13 | #include <linux/irqflags.h> | ||
| 14 | |||
| 15 | #ifndef xchg | ||
| 16 | |||
| 17 | /* | ||
| 18 | * This function doesn't exist, so you'll get a linker error if | ||
| 19 | * something tries to do an invalidly-sized xchg(). | ||
| 20 | */ | ||
| 21 | extern void __xchg_called_with_bad_pointer(void); | ||
| 22 | |||
| 23 | static inline | ||
| 24 | unsigned long __xchg(unsigned long x, volatile void *ptr, int size) | ||
| 25 | { | ||
| 26 | unsigned long ret, flags; | ||
| 27 | |||
| 28 | switch (size) { | ||
| 29 | case 1: | ||
| 30 | #ifdef __xchg_u8 | ||
| 31 | return __xchg_u8(x, ptr); | ||
| 32 | #else | ||
| 33 | local_irq_save(flags); | ||
| 34 | ret = *(volatile u8 *)ptr; | ||
| 35 | *(volatile u8 *)ptr = x; | ||
| 36 | local_irq_restore(flags); | ||
| 37 | return ret; | ||
| 38 | #endif /* __xchg_u8 */ | ||
| 39 | |||
| 40 | case 2: | ||
| 41 | #ifdef __xchg_u16 | ||
| 42 | return __xchg_u16(x, ptr); | ||
| 43 | #else | ||
| 44 | local_irq_save(flags); | ||
| 45 | ret = *(volatile u16 *)ptr; | ||
| 46 | *(volatile u16 *)ptr = x; | ||
| 47 | local_irq_restore(flags); | ||
| 48 | return ret; | ||
| 49 | #endif /* __xchg_u16 */ | ||
| 50 | |||
| 51 | case 4: | ||
| 52 | #ifdef __xchg_u32 | ||
| 53 | return __xchg_u32(x, ptr); | ||
| 54 | #else | ||
| 55 | local_irq_save(flags); | ||
| 56 | ret = *(volatile u32 *)ptr; | ||
| 57 | *(volatile u32 *)ptr = x; | ||
| 58 | local_irq_restore(flags); | ||
| 59 | return ret; | ||
| 60 | #endif /* __xchg_u32 */ | ||
| 61 | |||
| 62 | #ifdef CONFIG_64BIT | ||
| 63 | case 8: | ||
| 64 | #ifdef __xchg_u64 | ||
| 65 | return __xchg_u64(x, ptr); | ||
| 66 | #else | ||
| 67 | local_irq_save(flags); | ||
| 68 | ret = *(volatile u64 *)ptr; | ||
| 69 | *(volatile u64 *)ptr = x; | ||
| 70 | local_irq_restore(flags); | ||
| 71 | return ret; | ||
| 72 | #endif /* __xchg_u64 */ | ||
| 73 | #endif /* CONFIG_64BIT */ | ||
| 74 | |||
| 75 | default: | ||
| 76 | __xchg_called_with_bad_pointer(); | ||
| 77 | return x; | ||
| 78 | } | ||
| 79 | } | ||
| 80 | |||
| 81 | #define xchg(ptr, x) \ | ||
| 82 | ((__typeof__(*(ptr))) __xchg((unsigned long)(x), (ptr), sizeof(*(ptr)))) | ||
| 83 | |||
| 84 | #endif /* xchg */ | ||
| 85 | |||
| 13 | /* | 86 | /* |
| 14 | * Atomic compare and exchange. | 87 | * Atomic compare and exchange. |
| 15 | * | 88 | * |
| 16 | * Do not define __HAVE_ARCH_CMPXCHG because we want to use it to check whether | 89 | * Do not define __HAVE_ARCH_CMPXCHG because we want to use it to check whether |
| 17 | * a cmpxchg primitive faster than repeated local irq save/restore exists. | 90 | * a cmpxchg primitive faster than repeated local irq save/restore exists. |
| 18 | */ | 91 | */ |
| 92 | #include <asm-generic/cmpxchg-local.h> | ||
| 93 | |||
| 19 | #define cmpxchg(ptr, o, n) cmpxchg_local((ptr), (o), (n)) | 94 | #define cmpxchg(ptr, o, n) cmpxchg_local((ptr), (o), (n)) |
| 20 | #define cmpxchg64(ptr, o, n) cmpxchg64_local((ptr), (o), (n)) | 95 | #define cmpxchg64(ptr, o, n) cmpxchg64_local((ptr), (o), (n)) |
| 21 | 96 | ||
| 22 | #endif | 97 | #endif /* __ASM_GENERIC_CMPXCHG_H */ |
diff --git a/include/asm-generic/dma-mapping-common.h b/include/asm-generic/dma-mapping-common.h index 9fa3f96e38cf..2e248d8924dc 100644 --- a/include/asm-generic/dma-mapping-common.h +++ b/include/asm-generic/dma-mapping-common.h | |||
| @@ -2,6 +2,7 @@ | |||
| 2 | #define _ASM_GENERIC_DMA_MAPPING_H | 2 | #define _ASM_GENERIC_DMA_MAPPING_H |
| 3 | 3 | ||
| 4 | #include <linux/kmemcheck.h> | 4 | #include <linux/kmemcheck.h> |
| 5 | #include <linux/bug.h> | ||
| 5 | #include <linux/scatterlist.h> | 6 | #include <linux/scatterlist.h> |
| 6 | #include <linux/dma-debug.h> | 7 | #include <linux/dma-debug.h> |
| 7 | #include <linux/dma-attrs.h> | 8 | #include <linux/dma-attrs.h> |
diff --git a/include/asm-generic/exec.h b/include/asm-generic/exec.h new file mode 100644 index 000000000000..567766b0074a --- /dev/null +++ b/include/asm-generic/exec.h | |||
| @@ -0,0 +1,19 @@ | |||
| 1 | /* Generic process execution definitions, based on MN10300 definitions. | ||
| 2 | * | ||
| 3 | * It should be possible to use these on really simple architectures, | ||
| 4 | * but it serves more as a starting point for new ports. | ||
| 5 | * | ||
| 6 | * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved. | ||
| 7 | * Written by David Howells (dhowells@redhat.com) | ||
| 8 | * | ||
| 9 | * This program is free software; you can redistribute it and/or | ||
| 10 | * modify it under the terms of the GNU General Public Licence | ||
| 11 | * as published by the Free Software Foundation; either version | ||
| 12 | * 2 of the Licence, or (at your option) any later version. | ||
| 13 | */ | ||
| 14 | #ifndef __ASM_GENERIC_EXEC_H | ||
| 15 | #define __ASM_GENERIC_EXEC_H | ||
| 16 | |||
| 17 | #define arch_align_stack(x) (x) | ||
| 18 | |||
| 19 | #endif /* __ASM_GENERIC_EXEC_H */ | ||
diff --git a/include/asm-generic/getorder.h b/include/asm-generic/getorder.h index 67e7245dc9b3..65e4468ac53d 100644 --- a/include/asm-generic/getorder.h +++ b/include/asm-generic/getorder.h | |||
| @@ -4,21 +4,58 @@ | |||
| 4 | #ifndef __ASSEMBLY__ | 4 | #ifndef __ASSEMBLY__ |
| 5 | 5 | ||
| 6 | #include <linux/compiler.h> | 6 | #include <linux/compiler.h> |
| 7 | #include <linux/log2.h> | ||
| 7 | 8 | ||
| 8 | /* Pure 2^n version of get_order */ | 9 | /* |
| 9 | static inline __attribute_const__ int get_order(unsigned long size) | 10 | * Runtime evaluation of get_order() |
| 11 | */ | ||
| 12 | static inline __attribute_const__ | ||
| 13 | int __get_order(unsigned long size) | ||
| 10 | { | 14 | { |
| 11 | int order; | 15 | int order; |
| 12 | 16 | ||
| 13 | size = (size - 1) >> (PAGE_SHIFT - 1); | 17 | size--; |
| 14 | order = -1; | 18 | size >>= PAGE_SHIFT; |
| 15 | do { | 19 | #if BITS_PER_LONG == 32 |
| 16 | size >>= 1; | 20 | order = fls(size); |
| 17 | order++; | 21 | #else |
| 18 | } while (size); | 22 | order = fls64(size); |
| 23 | #endif | ||
| 19 | return order; | 24 | return order; |
| 20 | } | 25 | } |
| 21 | 26 | ||
| 27 | /** | ||
| 28 | * get_order - Determine the allocation order of a memory size | ||
| 29 | * @size: The size for which to get the order | ||
| 30 | * | ||
| 31 | * Determine the allocation order of a particular sized block of memory. This | ||
| 32 | * is on a logarithmic scale, where: | ||
| 33 | * | ||
| 34 | * 0 -> 2^0 * PAGE_SIZE and below | ||
| 35 | * 1 -> 2^1 * PAGE_SIZE to 2^0 * PAGE_SIZE + 1 | ||
| 36 | * 2 -> 2^2 * PAGE_SIZE to 2^1 * PAGE_SIZE + 1 | ||
| 37 | * 3 -> 2^3 * PAGE_SIZE to 2^2 * PAGE_SIZE + 1 | ||
| 38 | * 4 -> 2^4 * PAGE_SIZE to 2^3 * PAGE_SIZE + 1 | ||
| 39 | * ... | ||
| 40 | * | ||
| 41 | * The order returned is used to find the smallest allocation granule required | ||
| 42 | * to hold an object of the specified size. | ||
| 43 | * | ||
| 44 | * The result is undefined if the size is 0. | ||
| 45 | * | ||
| 46 | * This function may be used to initialise variables with compile time | ||
| 47 | * evaluations of constants. | ||
| 48 | */ | ||
| 49 | #define get_order(n) \ | ||
| 50 | ( \ | ||
| 51 | __builtin_constant_p(n) ? ( \ | ||
| 52 | ((n) == 0UL) ? BITS_PER_LONG - PAGE_SHIFT : \ | ||
| 53 | (((n) < (1UL << PAGE_SHIFT)) ? 0 : \ | ||
| 54 | ilog2((n) - 1) - PAGE_SHIFT + 1) \ | ||
| 55 | ) : \ | ||
| 56 | __get_order(n) \ | ||
| 57 | ) | ||
| 58 | |||
| 22 | #endif /* __ASSEMBLY__ */ | 59 | #endif /* __ASSEMBLY__ */ |
| 23 | 60 | ||
| 24 | #endif /* __ASM_GENERIC_GETORDER_H */ | 61 | #endif /* __ASM_GENERIC_GETORDER_H */ |
diff --git a/include/asm-generic/gpio.h b/include/asm-generic/gpio.h index 1ff4e221cb4d..5f52690c3c8f 100644 --- a/include/asm-generic/gpio.h +++ b/include/asm-generic/gpio.h | |||
| @@ -142,9 +142,9 @@ extern int __must_check gpiochip_reserve(int start, int ngpio); | |||
| 142 | /* add/remove chips */ | 142 | /* add/remove chips */ |
| 143 | extern int gpiochip_add(struct gpio_chip *chip); | 143 | extern int gpiochip_add(struct gpio_chip *chip); |
| 144 | extern int __must_check gpiochip_remove(struct gpio_chip *chip); | 144 | extern int __must_check gpiochip_remove(struct gpio_chip *chip); |
| 145 | extern struct gpio_chip *gpiochip_find(void *data, | 145 | extern struct gpio_chip *gpiochip_find(const void *data, |
| 146 | int (*match)(struct gpio_chip *chip, | 146 | int (*match)(struct gpio_chip *chip, |
| 147 | void *data)); | 147 | const void *data)); |
| 148 | 148 | ||
| 149 | 149 | ||
| 150 | /* Always use the library code for GPIO management calls, | 150 | /* Always use the library code for GPIO management calls, |
diff --git a/include/asm-generic/mman-common.h b/include/asm-generic/mman-common.h index 787abbb6d867..d030d2c2647a 100644 --- a/include/asm-generic/mman-common.h +++ b/include/asm-generic/mman-common.h | |||
| @@ -48,6 +48,10 @@ | |||
| 48 | #define MADV_HUGEPAGE 14 /* Worth backing with hugepages */ | 48 | #define MADV_HUGEPAGE 14 /* Worth backing with hugepages */ |
| 49 | #define MADV_NOHUGEPAGE 15 /* Not worth backing with hugepages */ | 49 | #define MADV_NOHUGEPAGE 15 /* Not worth backing with hugepages */ |
| 50 | 50 | ||
| 51 | #define MADV_DONTDUMP 16 /* Explicity exclude from the core dump, | ||
| 52 | overrides the coredump filter bits */ | ||
| 53 | #define MADV_DODUMP 17 /* Clear the MADV_NODUMP flag */ | ||
| 54 | |||
| 51 | /* compatibility flags */ | 55 | /* compatibility flags */ |
| 52 | #define MAP_FILE 0 | 56 | #define MAP_FILE 0 |
| 53 | 57 | ||
diff --git a/include/asm-generic/pci-bridge.h b/include/asm-generic/pci-bridge.h index 4a5aca2a2c94..a5b5d5a89a4f 100644 --- a/include/asm-generic/pci-bridge.h +++ b/include/asm-generic/pci-bridge.h | |||
| @@ -45,6 +45,11 @@ static inline void pci_add_flags(int flags) | |||
| 45 | pci_flags |= flags; | 45 | pci_flags |= flags; |
| 46 | } | 46 | } |
| 47 | 47 | ||
| 48 | static inline void pci_clear_flags(int flags) | ||
| 49 | { | ||
| 50 | pci_flags &= ~flags; | ||
| 51 | } | ||
| 52 | |||
| 48 | static inline int pci_has_flag(int flag) | 53 | static inline int pci_has_flag(int flag) |
| 49 | { | 54 | { |
| 50 | return pci_flags & flag; | 55 | return pci_flags & flag; |
| @@ -52,6 +57,7 @@ static inline int pci_has_flag(int flag) | |||
| 52 | #else | 57 | #else |
| 53 | static inline void pci_set_flags(int flags) { } | 58 | static inline void pci_set_flags(int flags) { } |
| 54 | static inline void pci_add_flags(int flags) { } | 59 | static inline void pci_add_flags(int flags) { } |
| 60 | static inline void pci_clear_flags(int flags) { } | ||
| 55 | static inline int pci_has_flag(int flag) | 61 | static inline int pci_has_flag(int flag) |
| 56 | { | 62 | { |
| 57 | return 0; | 63 | return 0; |
diff --git a/include/asm-generic/pci.h b/include/asm-generic/pci.h index 26373cff4546..e80a0495e5b0 100644 --- a/include/asm-generic/pci.h +++ b/include/asm-generic/pci.h | |||
| @@ -6,30 +6,6 @@ | |||
| 6 | #ifndef _ASM_GENERIC_PCI_H | 6 | #ifndef _ASM_GENERIC_PCI_H |
| 7 | #define _ASM_GENERIC_PCI_H | 7 | #define _ASM_GENERIC_PCI_H |
| 8 | 8 | ||
| 9 | /** | ||
| 10 | * pcibios_resource_to_bus - convert resource to PCI bus address | ||
| 11 | * @dev: device which owns this resource | ||
| 12 | * @region: converted bus-centric region (start,end) | ||
| 13 | * @res: resource to convert | ||
| 14 | * | ||
| 15 | * Convert a resource to a PCI device bus address or bus window. | ||
| 16 | */ | ||
| 17 | static inline void | ||
| 18 | pcibios_resource_to_bus(struct pci_dev *dev, struct pci_bus_region *region, | ||
| 19 | struct resource *res) | ||
| 20 | { | ||
| 21 | region->start = res->start; | ||
| 22 | region->end = res->end; | ||
| 23 | } | ||
| 24 | |||
| 25 | static inline void | ||
| 26 | pcibios_bus_to_resource(struct pci_dev *dev, struct resource *res, | ||
| 27 | struct pci_bus_region *region) | ||
| 28 | { | ||
| 29 | res->start = region->start; | ||
| 30 | res->end = region->end; | ||
| 31 | } | ||
| 32 | |||
| 33 | static inline struct resource * | 9 | static inline struct resource * |
| 34 | pcibios_select_root(struct pci_dev *pdev, struct resource *res) | 10 | pcibios_select_root(struct pci_dev *pdev, struct resource *res) |
| 35 | { | 11 | { |
diff --git a/include/asm-generic/pgtable.h b/include/asm-generic/pgtable.h index 76bff2bff15e..125c54e98517 100644 --- a/include/asm-generic/pgtable.h +++ b/include/asm-generic/pgtable.h | |||
| @@ -5,6 +5,7 @@ | |||
| 5 | #ifdef CONFIG_MMU | 5 | #ifdef CONFIG_MMU |
| 6 | 6 | ||
| 7 | #include <linux/mm_types.h> | 7 | #include <linux/mm_types.h> |
| 8 | #include <linux/bug.h> | ||
| 8 | 9 | ||
| 9 | #ifndef __HAVE_ARCH_PTEP_SET_ACCESS_FLAGS | 10 | #ifndef __HAVE_ARCH_PTEP_SET_ACCESS_FLAGS |
| 10 | extern int ptep_set_access_flags(struct vm_area_struct *vma, | 11 | extern int ptep_set_access_flags(struct vm_area_struct *vma, |
| @@ -425,6 +426,8 @@ extern void untrack_pfn_vma(struct vm_area_struct *vma, unsigned long pfn, | |||
| 425 | unsigned long size); | 426 | unsigned long size); |
| 426 | #endif | 427 | #endif |
| 427 | 428 | ||
| 429 | #ifdef CONFIG_MMU | ||
| 430 | |||
| 428 | #ifndef CONFIG_TRANSPARENT_HUGEPAGE | 431 | #ifndef CONFIG_TRANSPARENT_HUGEPAGE |
| 429 | static inline int pmd_trans_huge(pmd_t pmd) | 432 | static inline int pmd_trans_huge(pmd_t pmd) |
| 430 | { | 433 | { |
| @@ -441,7 +444,66 @@ static inline int pmd_write(pmd_t pmd) | |||
| 441 | return 0; | 444 | return 0; |
| 442 | } | 445 | } |
| 443 | #endif /* __HAVE_ARCH_PMD_WRITE */ | 446 | #endif /* __HAVE_ARCH_PMD_WRITE */ |
| 447 | #endif /* CONFIG_TRANSPARENT_HUGEPAGE */ | ||
| 448 | |||
| 449 | /* | ||
| 450 | * This function is meant to be used by sites walking pagetables with | ||
| 451 | * the mmap_sem hold in read mode to protect against MADV_DONTNEED and | ||
| 452 | * transhuge page faults. MADV_DONTNEED can convert a transhuge pmd | ||
| 453 | * into a null pmd and the transhuge page fault can convert a null pmd | ||
| 454 | * into an hugepmd or into a regular pmd (if the hugepage allocation | ||
| 455 | * fails). While holding the mmap_sem in read mode the pmd becomes | ||
| 456 | * stable and stops changing under us only if it's not null and not a | ||
| 457 | * transhuge pmd. When those races occurs and this function makes a | ||
| 458 | * difference vs the standard pmd_none_or_clear_bad, the result is | ||
| 459 | * undefined so behaving like if the pmd was none is safe (because it | ||
| 460 | * can return none anyway). The compiler level barrier() is critically | ||
| 461 | * important to compute the two checks atomically on the same pmdval. | ||
| 462 | */ | ||
| 463 | static inline int pmd_none_or_trans_huge_or_clear_bad(pmd_t *pmd) | ||
| 464 | { | ||
| 465 | /* depend on compiler for an atomic pmd read */ | ||
| 466 | pmd_t pmdval = *pmd; | ||
| 467 | /* | ||
| 468 | * The barrier will stabilize the pmdval in a register or on | ||
| 469 | * the stack so that it will stop changing under the code. | ||
| 470 | */ | ||
| 471 | #ifdef CONFIG_TRANSPARENT_HUGEPAGE | ||
| 472 | barrier(); | ||
| 473 | #endif | ||
| 474 | if (pmd_none(pmdval)) | ||
| 475 | return 1; | ||
| 476 | if (unlikely(pmd_bad(pmdval))) { | ||
| 477 | if (!pmd_trans_huge(pmdval)) | ||
| 478 | pmd_clear_bad(pmd); | ||
| 479 | return 1; | ||
| 480 | } | ||
| 481 | return 0; | ||
| 482 | } | ||
| 483 | |||
| 484 | /* | ||
| 485 | * This is a noop if Transparent Hugepage Support is not built into | ||
| 486 | * the kernel. Otherwise it is equivalent to | ||
| 487 | * pmd_none_or_trans_huge_or_clear_bad(), and shall only be called in | ||
| 488 | * places that already verified the pmd is not none and they want to | ||
| 489 | * walk ptes while holding the mmap sem in read mode (write mode don't | ||
| 490 | * need this). If THP is not enabled, the pmd can't go away under the | ||
| 491 | * code even if MADV_DONTNEED runs, but if THP is enabled we need to | ||
| 492 | * run a pmd_trans_unstable before walking the ptes after | ||
| 493 | * split_huge_page_pmd returns (because it may have run when the pmd | ||
| 494 | * become null, but then a page fault can map in a THP and not a | ||
| 495 | * regular page). | ||
| 496 | */ | ||
| 497 | static inline int pmd_trans_unstable(pmd_t *pmd) | ||
| 498 | { | ||
| 499 | #ifdef CONFIG_TRANSPARENT_HUGEPAGE | ||
| 500 | return pmd_none_or_trans_huge_or_clear_bad(pmd); | ||
| 501 | #else | ||
| 502 | return 0; | ||
| 444 | #endif | 503 | #endif |
| 504 | } | ||
| 505 | |||
| 506 | #endif /* CONFIG_MMU */ | ||
| 445 | 507 | ||
| 446 | #endif /* !__ASSEMBLY__ */ | 508 | #endif /* !__ASSEMBLY__ */ |
| 447 | 509 | ||
diff --git a/include/asm-generic/posix_types.h b/include/asm-generic/posix_types.h index 3dab00860e71..91d44bd4dde3 100644 --- a/include/asm-generic/posix_types.h +++ b/include/asm-generic/posix_types.h | |||
| @@ -10,8 +10,13 @@ | |||
| 10 | * architectures, so that you can override them. | 10 | * architectures, so that you can override them. |
| 11 | */ | 11 | */ |
| 12 | 12 | ||
| 13 | #ifndef __kernel_long_t | ||
| 14 | typedef long __kernel_long_t; | ||
| 15 | typedef unsigned long __kernel_ulong_t; | ||
| 16 | #endif | ||
| 17 | |||
| 13 | #ifndef __kernel_ino_t | 18 | #ifndef __kernel_ino_t |
| 14 | typedef unsigned long __kernel_ino_t; | 19 | typedef __kernel_ulong_t __kernel_ino_t; |
| 15 | #endif | 20 | #endif |
| 16 | 21 | ||
| 17 | #ifndef __kernel_mode_t | 22 | #ifndef __kernel_mode_t |
| @@ -19,7 +24,7 @@ typedef unsigned int __kernel_mode_t; | |||
| 19 | #endif | 24 | #endif |
| 20 | 25 | ||
| 21 | #ifndef __kernel_nlink_t | 26 | #ifndef __kernel_nlink_t |
| 22 | typedef unsigned long __kernel_nlink_t; | 27 | typedef __kernel_ulong_t __kernel_nlink_t; |
| 23 | #endif | 28 | #endif |
| 24 | 29 | ||
| 25 | #ifndef __kernel_pid_t | 30 | #ifndef __kernel_pid_t |
| @@ -36,7 +41,7 @@ typedef unsigned int __kernel_gid_t; | |||
| 36 | #endif | 41 | #endif |
| 37 | 42 | ||
| 38 | #ifndef __kernel_suseconds_t | 43 | #ifndef __kernel_suseconds_t |
| 39 | typedef long __kernel_suseconds_t; | 44 | typedef __kernel_long_t __kernel_suseconds_t; |
| 40 | #endif | 45 | #endif |
| 41 | 46 | ||
| 42 | #ifndef __kernel_daddr_t | 47 | #ifndef __kernel_daddr_t |
| @@ -44,8 +49,8 @@ typedef int __kernel_daddr_t; | |||
| 44 | #endif | 49 | #endif |
| 45 | 50 | ||
| 46 | #ifndef __kernel_uid32_t | 51 | #ifndef __kernel_uid32_t |
| 47 | typedef __kernel_uid_t __kernel_uid32_t; | 52 | typedef unsigned int __kernel_uid32_t; |
| 48 | typedef __kernel_gid_t __kernel_gid32_t; | 53 | typedef unsigned int __kernel_gid32_t; |
| 49 | #endif | 54 | #endif |
| 50 | 55 | ||
| 51 | #ifndef __kernel_old_uid_t | 56 | #ifndef __kernel_old_uid_t |
| @@ -67,99 +72,29 @@ typedef unsigned int __kernel_size_t; | |||
| 67 | typedef int __kernel_ssize_t; | 72 | typedef int __kernel_ssize_t; |
| 68 | typedef int __kernel_ptrdiff_t; | 73 | typedef int __kernel_ptrdiff_t; |
| 69 | #else | 74 | #else |
| 70 | typedef unsigned long __kernel_size_t; | 75 | typedef __kernel_ulong_t __kernel_size_t; |
| 71 | typedef long __kernel_ssize_t; | 76 | typedef __kernel_long_t __kernel_ssize_t; |
| 72 | typedef long __kernel_ptrdiff_t; | 77 | typedef __kernel_long_t __kernel_ptrdiff_t; |
| 73 | #endif | 78 | #endif |
| 74 | #endif | 79 | #endif |
| 75 | 80 | ||
| 81 | #ifndef __kernel_fsid_t | ||
| 82 | typedef struct { | ||
| 83 | int val[2]; | ||
| 84 | } __kernel_fsid_t; | ||
| 85 | #endif | ||
| 86 | |||
| 76 | /* | 87 | /* |
| 77 | * anything below here should be completely generic | 88 | * anything below here should be completely generic |
| 78 | */ | 89 | */ |
| 79 | typedef long __kernel_off_t; | 90 | typedef __kernel_long_t __kernel_off_t; |
| 80 | typedef long long __kernel_loff_t; | 91 | typedef long long __kernel_loff_t; |
| 81 | typedef long __kernel_time_t; | 92 | typedef __kernel_long_t __kernel_time_t; |
| 82 | typedef long __kernel_clock_t; | 93 | typedef __kernel_long_t __kernel_clock_t; |
| 83 | typedef int __kernel_timer_t; | 94 | typedef int __kernel_timer_t; |
| 84 | typedef int __kernel_clockid_t; | 95 | typedef int __kernel_clockid_t; |
| 85 | typedef char * __kernel_caddr_t; | 96 | typedef char * __kernel_caddr_t; |
| 86 | typedef unsigned short __kernel_uid16_t; | 97 | typedef unsigned short __kernel_uid16_t; |
| 87 | typedef unsigned short __kernel_gid16_t; | 98 | typedef unsigned short __kernel_gid16_t; |
| 88 | 99 | ||
| 89 | typedef struct { | ||
| 90 | int val[2]; | ||
| 91 | } __kernel_fsid_t; | ||
| 92 | |||
| 93 | #ifdef __KERNEL__ | ||
| 94 | |||
| 95 | #undef __FD_SET | ||
| 96 | static inline void __FD_SET(unsigned long __fd, __kernel_fd_set *__fdsetp) | ||
| 97 | { | ||
| 98 | unsigned long __tmp = __fd / __NFDBITS; | ||
| 99 | unsigned long __rem = __fd % __NFDBITS; | ||
| 100 | __fdsetp->fds_bits[__tmp] |= (1UL<<__rem); | ||
| 101 | } | ||
| 102 | |||
| 103 | #undef __FD_CLR | ||
| 104 | static inline void __FD_CLR(unsigned long __fd, __kernel_fd_set *__fdsetp) | ||
| 105 | { | ||
| 106 | unsigned long __tmp = __fd / __NFDBITS; | ||
| 107 | unsigned long __rem = __fd % __NFDBITS; | ||
| 108 | __fdsetp->fds_bits[__tmp] &= ~(1UL<<__rem); | ||
| 109 | } | ||
| 110 | |||
| 111 | #undef __FD_ISSET | ||
| 112 | static inline int __FD_ISSET(unsigned long __fd, const __kernel_fd_set *__p) | ||
| 113 | { | ||
| 114 | unsigned long __tmp = __fd / __NFDBITS; | ||
| 115 | unsigned long __rem = __fd % __NFDBITS; | ||
| 116 | return (__p->fds_bits[__tmp] & (1UL<<__rem)) != 0; | ||
| 117 | } | ||
| 118 | |||
| 119 | /* | ||
| 120 | * This will unroll the loop for the normal constant case (8 ints, | ||
| 121 | * for a 256-bit fd_set) | ||
| 122 | */ | ||
| 123 | #undef __FD_ZERO | ||
| 124 | static inline void __FD_ZERO(__kernel_fd_set *__p) | ||
| 125 | { | ||
| 126 | unsigned long *__tmp = __p->fds_bits; | ||
| 127 | int __i; | ||
| 128 | |||
| 129 | if (__builtin_constant_p(__FDSET_LONGS)) { | ||
| 130 | switch (__FDSET_LONGS) { | ||
| 131 | case 16: | ||
| 132 | __tmp[ 0] = 0; __tmp[ 1] = 0; | ||
| 133 | __tmp[ 2] = 0; __tmp[ 3] = 0; | ||
| 134 | __tmp[ 4] = 0; __tmp[ 5] = 0; | ||
| 135 | __tmp[ 6] = 0; __tmp[ 7] = 0; | ||
| 136 | __tmp[ 8] = 0; __tmp[ 9] = 0; | ||
| 137 | __tmp[10] = 0; __tmp[11] = 0; | ||
| 138 | __tmp[12] = 0; __tmp[13] = 0; | ||
| 139 | __tmp[14] = 0; __tmp[15] = 0; | ||
| 140 | return; | ||
| 141 | |||
| 142 | case 8: | ||
| 143 | __tmp[ 0] = 0; __tmp[ 1] = 0; | ||
| 144 | __tmp[ 2] = 0; __tmp[ 3] = 0; | ||
| 145 | __tmp[ 4] = 0; __tmp[ 5] = 0; | ||
| 146 | __tmp[ 6] = 0; __tmp[ 7] = 0; | ||
| 147 | return; | ||
| 148 | |||
| 149 | case 4: | ||
| 150 | __tmp[ 0] = 0; __tmp[ 1] = 0; | ||
| 151 | __tmp[ 2] = 0; __tmp[ 3] = 0; | ||
| 152 | return; | ||
| 153 | } | ||
| 154 | } | ||
| 155 | __i = __FDSET_LONGS; | ||
| 156 | while (__i) { | ||
| 157 | __i--; | ||
| 158 | *__tmp = 0; | ||
| 159 | __tmp++; | ||
| 160 | } | ||
| 161 | } | ||
| 162 | |||
| 163 | #endif /* __KERNEL__ */ | ||
| 164 | |||
| 165 | #endif /* __ASM_GENERIC_POSIX_TYPES_H */ | 100 | #endif /* __ASM_GENERIC_POSIX_TYPES_H */ |
diff --git a/include/asm-generic/socket.h b/include/asm-generic/socket.h index 49c1704173e7..b1bea03274d5 100644 --- a/include/asm-generic/socket.h +++ b/include/asm-generic/socket.h | |||
| @@ -67,4 +67,9 @@ | |||
| 67 | 67 | ||
| 68 | #define SO_WIFI_STATUS 41 | 68 | #define SO_WIFI_STATUS 41 |
| 69 | #define SCM_WIFI_STATUS SO_WIFI_STATUS | 69 | #define SCM_WIFI_STATUS SO_WIFI_STATUS |
| 70 | #define SO_PEEK_OFF 42 | ||
| 71 | |||
| 72 | /* Instruct lower device to use last 4-bytes of skb data as FCS */ | ||
| 73 | #define SO_NOFCS 43 | ||
| 74 | |||
| 70 | #endif /* __ASM_GENERIC_SOCKET_H */ | 75 | #endif /* __ASM_GENERIC_SOCKET_H */ |
diff --git a/include/asm-generic/switch_to.h b/include/asm-generic/switch_to.h new file mode 100644 index 000000000000..052c4ac04fd5 --- /dev/null +++ b/include/asm-generic/switch_to.h | |||
| @@ -0,0 +1,30 @@ | |||
| 1 | /* Generic task switch macro wrapper, based on MN10300 definitions. | ||
| 2 | * | ||
| 3 | * It should be possible to use these on really simple architectures, | ||
| 4 | * but it serves more as a starting point for new ports. | ||
| 5 | * | ||
| 6 | * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved. | ||
| 7 | * Written by David Howells (dhowells@redhat.com) | ||
| 8 | * | ||
| 9 | * This program is free software; you can redistribute it and/or | ||
| 10 | * modify it under the terms of the GNU General Public Licence | ||
| 11 | * as published by the Free Software Foundation; either version | ||
| 12 | * 2 of the Licence, or (at your option) any later version. | ||
| 13 | */ | ||
| 14 | #ifndef __ASM_GENERIC_SWITCH_TO_H | ||
| 15 | #define __ASM_GENERIC_SWITCH_TO_H | ||
| 16 | |||
| 17 | #include <linux/thread_info.h> | ||
| 18 | |||
| 19 | /* | ||
| 20 | * Context switching is now performed out-of-line in switch_to.S | ||
| 21 | */ | ||
| 22 | extern struct task_struct *__switch_to(struct task_struct *, | ||
| 23 | struct task_struct *); | ||
| 24 | |||
| 25 | #define switch_to(prev, next, last) \ | ||
| 26 | do { \ | ||
| 27 | ((last) = __switch_to((prev), (next))); \ | ||
| 28 | } while (0) | ||
| 29 | |||
| 30 | #endif /* __ASM_GENERIC_SWITCH_TO_H */ | ||
diff --git a/include/asm-generic/system.h b/include/asm-generic/system.h deleted file mode 100644 index 215efa74f5a2..000000000000 --- a/include/asm-generic/system.h +++ /dev/null | |||
| @@ -1,141 +0,0 @@ | |||
| 1 | /* Generic system definitions, based on MN10300 definitions. | ||
| 2 | * | ||
| 3 | * It should be possible to use these on really simple architectures, | ||
| 4 | * but it serves more as a starting point for new ports. | ||
| 5 | * | ||
| 6 | * Copyright (C) 2007 Red Hat, Inc. All Rights Reserved. | ||
| 7 | * Written by David Howells (dhowells@redhat.com) | ||
| 8 | * | ||
| 9 | * This program is free software; you can redistribute it and/or | ||
| 10 | * modify it under the terms of the GNU General Public Licence | ||
| 11 | * as published by the Free Software Foundation; either version | ||
| 12 | * 2 of the Licence, or (at your option) any later version. | ||
| 13 | */ | ||
| 14 | #ifndef __ASM_GENERIC_SYSTEM_H | ||
| 15 | #define __ASM_GENERIC_SYSTEM_H | ||
| 16 | |||
| 17 | #ifndef __ASSEMBLY__ | ||
| 18 | |||
| 19 | #include <linux/types.h> | ||
| 20 | #include <linux/irqflags.h> | ||
| 21 | |||
| 22 | #include <asm/cmpxchg-local.h> | ||
| 23 | #include <asm/cmpxchg.h> | ||
| 24 | |||
| 25 | struct task_struct; | ||
| 26 | |||
| 27 | /* context switching is now performed out-of-line in switch_to.S */ | ||
| 28 | extern struct task_struct *__switch_to(struct task_struct *, | ||
| 29 | struct task_struct *); | ||
| 30 | #define switch_to(prev, next, last) \ | ||
| 31 | do { \ | ||
| 32 | ((last) = __switch_to((prev), (next))); \ | ||
| 33 | } while (0) | ||
| 34 | |||
| 35 | #define arch_align_stack(x) (x) | ||
| 36 | |||
| 37 | #define nop() asm volatile ("nop") | ||
| 38 | |||
| 39 | #endif /* !__ASSEMBLY__ */ | ||
| 40 | |||
| 41 | /* | ||
| 42 | * Force strict CPU ordering. | ||
| 43 | * And yes, this is required on UP too when we're talking | ||
| 44 | * to devices. | ||
| 45 | * | ||
| 46 | * This implementation only contains a compiler barrier. | ||
| 47 | */ | ||
| 48 | |||
| 49 | #define mb() asm volatile ("": : :"memory") | ||
| 50 | #define rmb() mb() | ||
| 51 | #define wmb() asm volatile ("": : :"memory") | ||
| 52 | |||
| 53 | #ifdef CONFIG_SMP | ||
| 54 | #define smp_mb() mb() | ||
| 55 | #define smp_rmb() rmb() | ||
| 56 | #define smp_wmb() wmb() | ||
| 57 | #else | ||
| 58 | #define smp_mb() barrier() | ||
| 59 | #define smp_rmb() barrier() | ||
| 60 | #define smp_wmb() barrier() | ||
| 61 | #endif | ||
| 62 | |||
| 63 | #define set_mb(var, value) do { var = value; mb(); } while (0) | ||
| 64 | #define set_wmb(var, value) do { var = value; wmb(); } while (0) | ||
| 65 | |||
| 66 | #define read_barrier_depends() do {} while (0) | ||
| 67 | #define smp_read_barrier_depends() do {} while (0) | ||
| 68 | |||
| 69 | /* | ||
| 70 | * we make sure local_irq_enable() doesn't cause priority inversion | ||
| 71 | */ | ||
| 72 | #ifndef __ASSEMBLY__ | ||
| 73 | |||
| 74 | /* This function doesn't exist, so you'll get a linker error | ||
| 75 | * if something tries to do an invalid xchg(). */ | ||
| 76 | extern void __xchg_called_with_bad_pointer(void); | ||
| 77 | |||
| 78 | static inline | ||
| 79 | unsigned long __xchg(unsigned long x, volatile void *ptr, int size) | ||
| 80 | { | ||
| 81 | unsigned long ret, flags; | ||
| 82 | |||
| 83 | switch (size) { | ||
| 84 | case 1: | ||
| 85 | #ifdef __xchg_u8 | ||
| 86 | return __xchg_u8(x, ptr); | ||
| 87 | #else | ||
| 88 | local_irq_save(flags); | ||
| 89 | ret = *(volatile u8 *)ptr; | ||
| 90 | *(volatile u8 *)ptr = x; | ||
| 91 | local_irq_restore(flags); | ||
| 92 | return ret; | ||
| 93 | #endif /* __xchg_u8 */ | ||
| 94 | |||
| 95 | case 2: | ||
| 96 | #ifdef __xchg_u16 | ||
| 97 | return __xchg_u16(x, ptr); | ||
| 98 | #else | ||
| 99 | local_irq_save(flags); | ||
| 100 | ret = *(volatile u16 *)ptr; | ||
| 101 | *(volatile u16 *)ptr = x; | ||
| 102 | local_irq_restore(flags); | ||
| 103 | return ret; | ||
| 104 | #endif /* __xchg_u16 */ | ||
| 105 | |||
| 106 | case 4: | ||
| 107 | #ifdef __xchg_u32 | ||
| 108 | return __xchg_u32(x, ptr); | ||
| 109 | #else | ||
| 110 | local_irq_save(flags); | ||
| 111 | ret = *(volatile u32 *)ptr; | ||
| 112 | *(volatile u32 *)ptr = x; | ||
| 113 | local_irq_restore(flags); | ||
| 114 | return ret; | ||
| 115 | #endif /* __xchg_u32 */ | ||
| 116 | |||
| 117 | #ifdef CONFIG_64BIT | ||
| 118 | case 8: | ||
| 119 | #ifdef __xchg_u64 | ||
| 120 | return __xchg_u64(x, ptr); | ||
| 121 | #else | ||
| 122 | local_irq_save(flags); | ||
| 123 | ret = *(volatile u64 *)ptr; | ||
| 124 | *(volatile u64 *)ptr = x; | ||
| 125 | local_irq_restore(flags); | ||
| 126 | return ret; | ||
| 127 | #endif /* __xchg_u64 */ | ||
| 128 | #endif /* CONFIG_64BIT */ | ||
| 129 | |||
| 130 | default: | ||
| 131 | __xchg_called_with_bad_pointer(); | ||
| 132 | return x; | ||
| 133 | } | ||
| 134 | } | ||
| 135 | |||
| 136 | #define xchg(ptr, x) \ | ||
| 137 | ((__typeof__(*(ptr))) __xchg((unsigned long)(x), (ptr), sizeof(*(ptr)))) | ||
| 138 | |||
| 139 | #endif /* !__ASSEMBLY__ */ | ||
| 140 | |||
| 141 | #endif /* __ASM_GENERIC_SYSTEM_H */ | ||
diff --git a/include/asm-generic/tlbflush.h b/include/asm-generic/tlbflush.h index c7af037024c7..d6d0a88430fe 100644 --- a/include/asm-generic/tlbflush.h +++ b/include/asm-generic/tlbflush.h | |||
| @@ -9,6 +9,8 @@ | |||
| 9 | #error need to implement an architecture specific asm/tlbflush.h | 9 | #error need to implement an architecture specific asm/tlbflush.h |
| 10 | #endif | 10 | #endif |
| 11 | 11 | ||
| 12 | #include <linux/bug.h> | ||
| 13 | |||
| 12 | static inline void flush_tlb_mm(struct mm_struct *mm) | 14 | static inline void flush_tlb_mm(struct mm_struct *mm) |
| 13 | { | 15 | { |
| 14 | BUG(); | 16 | BUG(); |
diff --git a/include/asm-generic/unistd.h b/include/asm-generic/unistd.h index 2292d1af9d70..991ef01cd77e 100644 --- a/include/asm-generic/unistd.h +++ b/include/asm-generic/unistd.h | |||
| @@ -218,7 +218,7 @@ __SC_COMP(__NR_pwritev, sys_pwritev, compat_sys_pwritev) | |||
| 218 | 218 | ||
| 219 | /* fs/sendfile.c */ | 219 | /* fs/sendfile.c */ |
| 220 | #define __NR3264_sendfile 71 | 220 | #define __NR3264_sendfile 71 |
| 221 | __SC_3264(__NR3264_sendfile, sys_sendfile64, sys_sendfile) | 221 | __SYSCALL(__NR3264_sendfile, sys_sendfile64) |
| 222 | 222 | ||
| 223 | /* fs/select.c */ | 223 | /* fs/select.c */ |
| 224 | #define __NR_pselect6 72 | 224 | #define __NR_pselect6 72 |
diff --git a/include/asm-generic/vmlinux.lds.h b/include/asm-generic/vmlinux.lds.h index b5e2e4c6b017..8aeadf6b553a 100644 --- a/include/asm-generic/vmlinux.lds.h +++ b/include/asm-generic/vmlinux.lds.h | |||
| @@ -167,6 +167,7 @@ | |||
| 167 | CPU_KEEP(exit.data) \ | 167 | CPU_KEEP(exit.data) \ |
| 168 | MEM_KEEP(init.data) \ | 168 | MEM_KEEP(init.data) \ |
| 169 | MEM_KEEP(exit.data) \ | 169 | MEM_KEEP(exit.data) \ |
| 170 | *(.data.unlikely) \ | ||
| 170 | STRUCT_ALIGN(); \ | 171 | STRUCT_ALIGN(); \ |
| 171 | *(__tracepoints) \ | 172 | *(__tracepoints) \ |
| 172 | /* implement dynamic printk debug */ \ | 173 | /* implement dynamic printk debug */ \ |
| @@ -615,30 +616,23 @@ | |||
| 615 | *(.init.setup) \ | 616 | *(.init.setup) \ |
| 616 | VMLINUX_SYMBOL(__setup_end) = .; | 617 | VMLINUX_SYMBOL(__setup_end) = .; |
| 617 | 618 | ||
| 618 | #define INITCALLS \ | 619 | #define INIT_CALLS_LEVEL(level) \ |
| 619 | *(.initcallearly.init) \ | 620 | VMLINUX_SYMBOL(__initcall##level##_start) = .; \ |
| 620 | VMLINUX_SYMBOL(__early_initcall_end) = .; \ | 621 | *(.initcall##level##.init) \ |
| 621 | *(.initcall0.init) \ | 622 | *(.initcall##level##s.init) \ |
| 622 | *(.initcall0s.init) \ | ||
| 623 | *(.initcall1.init) \ | ||
| 624 | *(.initcall1s.init) \ | ||
| 625 | *(.initcall2.init) \ | ||
| 626 | *(.initcall2s.init) \ | ||
| 627 | *(.initcall3.init) \ | ||
| 628 | *(.initcall3s.init) \ | ||
| 629 | *(.initcall4.init) \ | ||
| 630 | *(.initcall4s.init) \ | ||
| 631 | *(.initcall5.init) \ | ||
| 632 | *(.initcall5s.init) \ | ||
| 633 | *(.initcallrootfs.init) \ | ||
| 634 | *(.initcall6.init) \ | ||
| 635 | *(.initcall6s.init) \ | ||
| 636 | *(.initcall7.init) \ | ||
| 637 | *(.initcall7s.init) | ||
| 638 | 623 | ||
| 639 | #define INIT_CALLS \ | 624 | #define INIT_CALLS \ |
| 640 | VMLINUX_SYMBOL(__initcall_start) = .; \ | 625 | VMLINUX_SYMBOL(__initcall_start) = .; \ |
| 641 | INITCALLS \ | 626 | *(.initcallearly.init) \ |
| 627 | INIT_CALLS_LEVEL(0) \ | ||
| 628 | INIT_CALLS_LEVEL(1) \ | ||
| 629 | INIT_CALLS_LEVEL(2) \ | ||
| 630 | INIT_CALLS_LEVEL(3) \ | ||
| 631 | INIT_CALLS_LEVEL(4) \ | ||
| 632 | INIT_CALLS_LEVEL(5) \ | ||
| 633 | INIT_CALLS_LEVEL(rootfs) \ | ||
| 634 | INIT_CALLS_LEVEL(6) \ | ||
| 635 | INIT_CALLS_LEVEL(7) \ | ||
| 642 | VMLINUX_SYMBOL(__initcall_end) = .; | 636 | VMLINUX_SYMBOL(__initcall_end) = .; |
| 643 | 637 | ||
| 644 | #define CON_INITCALL \ | 638 | #define CON_INITCALL \ |
