diff options
Diffstat (limited to 'include')
40 files changed, 459 insertions, 465 deletions
diff --git a/include/acpi/processor.h b/include/acpi/processor.h index 3795590e152a..0574add2a1e3 100644 --- a/include/acpi/processor.h +++ b/include/acpi/processor.h | |||
| @@ -127,7 +127,7 @@ struct acpi_processor_performance { | |||
| 127 | unsigned int state_count; | 127 | unsigned int state_count; |
| 128 | struct acpi_processor_px *states; | 128 | struct acpi_processor_px *states; |
| 129 | struct acpi_psd_package domain_info; | 129 | struct acpi_psd_package domain_info; |
| 130 | cpumask_t shared_cpu_map; | 130 | cpumask_var_t shared_cpu_map; |
| 131 | unsigned int shared_type; | 131 | unsigned int shared_type; |
| 132 | }; | 132 | }; |
| 133 | 133 | ||
| @@ -172,7 +172,7 @@ struct acpi_processor_throttling { | |||
| 172 | unsigned int state_count; | 172 | unsigned int state_count; |
| 173 | struct acpi_processor_tx_tss *states_tss; | 173 | struct acpi_processor_tx_tss *states_tss; |
| 174 | struct acpi_tsd_package domain_info; | 174 | struct acpi_tsd_package domain_info; |
| 175 | cpumask_t shared_cpu_map; | 175 | cpumask_var_t shared_cpu_map; |
| 176 | int (*acpi_processor_get_throttling) (struct acpi_processor * pr); | 176 | int (*acpi_processor_get_throttling) (struct acpi_processor * pr); |
| 177 | int (*acpi_processor_set_throttling) (struct acpi_processor * pr, | 177 | int (*acpi_processor_set_throttling) (struct acpi_processor * pr, |
| 178 | int state); | 178 | int state); |
diff --git a/include/asm-frv/bitops.h b/include/asm-frv/bitops.h index 39456ba0ec17..287f6f697ce2 100644 --- a/include/asm-frv/bitops.h +++ b/include/asm-frv/bitops.h | |||
| @@ -339,6 +339,19 @@ int __ffs(unsigned long x) | |||
| 339 | return 31 - bit; | 339 | return 31 - bit; |
| 340 | } | 340 | } |
| 341 | 341 | ||
| 342 | /** | ||
| 343 | * __fls - find last (most-significant) set bit in a long word | ||
| 344 | * @word: the word to search | ||
| 345 | * | ||
| 346 | * Undefined if no set bit exists, so code should check against 0 first. | ||
| 347 | */ | ||
| 348 | static inline unsigned long __fls(unsigned long word) | ||
| 349 | { | ||
| 350 | unsigned long bit; | ||
| 351 | asm("scan %1,gr0,%0" : "=r"(bit) : "r"(word)); | ||
| 352 | return bit; | ||
| 353 | } | ||
| 354 | |||
| 342 | /* | 355 | /* |
| 343 | * special slimline version of fls() for calculating ilog2_u32() | 356 | * special slimline version of fls() for calculating ilog2_u32() |
| 344 | * - note: no protection against n == 0 | 357 | * - note: no protection against n == 0 |
diff --git a/include/asm-m32r/bitops.h b/include/asm-m32r/bitops.h index 6dc9b81bf9f3..aaddf0d57603 100644 --- a/include/asm-m32r/bitops.h +++ b/include/asm-m32r/bitops.h | |||
| @@ -251,6 +251,7 @@ static __inline__ int test_and_change_bit(int nr, volatile void * addr) | |||
| 251 | #include <asm-generic/bitops/ffz.h> | 251 | #include <asm-generic/bitops/ffz.h> |
| 252 | #include <asm-generic/bitops/__ffs.h> | 252 | #include <asm-generic/bitops/__ffs.h> |
| 253 | #include <asm-generic/bitops/fls.h> | 253 | #include <asm-generic/bitops/fls.h> |
| 254 | #include <asm-generic/bitops/__fls.h> | ||
| 254 | #include <asm-generic/bitops/fls64.h> | 255 | #include <asm-generic/bitops/fls64.h> |
| 255 | 256 | ||
| 256 | #ifdef __KERNEL__ | 257 | #ifdef __KERNEL__ |
diff --git a/include/asm-m68k/bitops.h b/include/asm-m68k/bitops.h index 3e8106442d5a..9bde784e7bad 100644 --- a/include/asm-m68k/bitops.h +++ b/include/asm-m68k/bitops.h | |||
| @@ -315,6 +315,11 @@ static inline int fls(int x) | |||
| 315 | return 32 - cnt; | 315 | return 32 - cnt; |
| 316 | } | 316 | } |
| 317 | 317 | ||
| 318 | static inline int __fls(int x) | ||
| 319 | { | ||
| 320 | return fls(x) - 1; | ||
| 321 | } | ||
| 322 | |||
| 318 | #include <asm-generic/bitops/fls64.h> | 323 | #include <asm-generic/bitops/fls64.h> |
| 319 | #include <asm-generic/bitops/sched.h> | 324 | #include <asm-generic/bitops/sched.h> |
| 320 | #include <asm-generic/bitops/hweight.h> | 325 | #include <asm-generic/bitops/hweight.h> |
diff --git a/include/asm-mn10300/bitops.h b/include/asm-mn10300/bitops.h index cc6d40c05cf3..0b610f482abb 100644 --- a/include/asm-mn10300/bitops.h +++ b/include/asm-mn10300/bitops.h | |||
| @@ -196,6 +196,17 @@ int fls(int x) | |||
| 196 | } | 196 | } |
| 197 | 197 | ||
| 198 | /** | 198 | /** |
| 199 | * __fls - find last (most-significant) set bit in a long word | ||
| 200 | * @word: the word to search | ||
| 201 | * | ||
| 202 | * Undefined if no set bit exists, so code should check against 0 first. | ||
| 203 | */ | ||
| 204 | static inline unsigned long __fls(unsigned long word) | ||
| 205 | { | ||
| 206 | return __ilog2_u32(word); | ||
| 207 | } | ||
| 208 | |||
| 209 | /** | ||
| 199 | * ffs - find first bit set | 210 | * ffs - find first bit set |
| 200 | * @x: the word to search | 211 | * @x: the word to search |
| 201 | * | 212 | * |
diff --git a/include/asm-xtensa/bitops.h b/include/asm-xtensa/bitops.h index 23261e8f2e5a..6c3930397bd3 100644 --- a/include/asm-xtensa/bitops.h +++ b/include/asm-xtensa/bitops.h | |||
| @@ -82,6 +82,16 @@ static inline int fls (unsigned int x) | |||
| 82 | return 32 - __cntlz(x); | 82 | return 32 - __cntlz(x); |
| 83 | } | 83 | } |
| 84 | 84 | ||
| 85 | /** | ||
| 86 | * __fls - find last (most-significant) set bit in a long word | ||
| 87 | * @word: the word to search | ||
| 88 | * | ||
| 89 | * Undefined if no set bit exists, so code should check against 0 first. | ||
| 90 | */ | ||
| 91 | static inline unsigned long __fls(unsigned long word) | ||
| 92 | { | ||
| 93 | return 31 - __cntlz(word); | ||
| 94 | } | ||
| 85 | #else | 95 | #else |
| 86 | 96 | ||
| 87 | /* Use the generic implementation if we don't have the nsa/nsau instructions. */ | 97 | /* Use the generic implementation if we don't have the nsa/nsau instructions. */ |
| @@ -90,6 +100,7 @@ static inline int fls (unsigned int x) | |||
| 90 | # include <asm-generic/bitops/__ffs.h> | 100 | # include <asm-generic/bitops/__ffs.h> |
| 91 | # include <asm-generic/bitops/ffz.h> | 101 | # include <asm-generic/bitops/ffz.h> |
| 92 | # include <asm-generic/bitops/fls.h> | 102 | # include <asm-generic/bitops/fls.h> |
| 103 | # include <asm-generic/bitops/__fls.h> | ||
| 93 | 104 | ||
| 94 | #endif | 105 | #endif |
| 95 | 106 | ||
diff --git a/include/linux/bitmap.h b/include/linux/bitmap.h index a08c33a26ca9..2878811c6134 100644 --- a/include/linux/bitmap.h +++ b/include/linux/bitmap.h | |||
| @@ -137,9 +137,12 @@ extern void bitmap_copy_le(void *dst, const unsigned long *src, int nbits); | |||
| 137 | (1UL<<((nbits) % BITS_PER_LONG))-1 : ~0UL \ | 137 | (1UL<<((nbits) % BITS_PER_LONG))-1 : ~0UL \ |
| 138 | ) | 138 | ) |
| 139 | 139 | ||
| 140 | #define small_const_nbits(nbits) \ | ||
| 141 | (__builtin_constant_p(nbits) && (nbits) <= BITS_PER_LONG) | ||
| 142 | |||
| 140 | static inline void bitmap_zero(unsigned long *dst, int nbits) | 143 | static inline void bitmap_zero(unsigned long *dst, int nbits) |
| 141 | { | 144 | { |
| 142 | if (nbits <= BITS_PER_LONG) | 145 | if (small_const_nbits(nbits)) |
| 143 | *dst = 0UL; | 146 | *dst = 0UL; |
| 144 | else { | 147 | else { |
| 145 | int len = BITS_TO_LONGS(nbits) * sizeof(unsigned long); | 148 | int len = BITS_TO_LONGS(nbits) * sizeof(unsigned long); |
| @@ -150,7 +153,7 @@ static inline void bitmap_zero(unsigned long *dst, int nbits) | |||
| 150 | static inline void bitmap_fill(unsigned long *dst, int nbits) | 153 | static inline void bitmap_fill(unsigned long *dst, int nbits) |
| 151 | { | 154 | { |
| 152 | size_t nlongs = BITS_TO_LONGS(nbits); | 155 | size_t nlongs = BITS_TO_LONGS(nbits); |
| 153 | if (nlongs > 1) { | 156 | if (!small_const_nbits(nbits)) { |
| 154 | int len = (nlongs - 1) * sizeof(unsigned long); | 157 | int len = (nlongs - 1) * sizeof(unsigned long); |
| 155 | memset(dst, 0xff, len); | 158 | memset(dst, 0xff, len); |
| 156 | } | 159 | } |
| @@ -160,7 +163,7 @@ static inline void bitmap_fill(unsigned long *dst, int nbits) | |||
| 160 | static inline void bitmap_copy(unsigned long *dst, const unsigned long *src, | 163 | static inline void bitmap_copy(unsigned long *dst, const unsigned long *src, |
| 161 | int nbits) | 164 | int nbits) |
| 162 | { | 165 | { |
| 163 | if (nbits <= BITS_PER_LONG) | 166 | if (small_const_nbits(nbits)) |
| 164 | *dst = *src; | 167 | *dst = *src; |
| 165 | else { | 168 | else { |
| 166 | int len = BITS_TO_LONGS(nbits) * sizeof(unsigned long); | 169 | int len = BITS_TO_LONGS(nbits) * sizeof(unsigned long); |
| @@ -171,7 +174,7 @@ static inline void bitmap_copy(unsigned long *dst, const unsigned long *src, | |||
| 171 | static inline void bitmap_and(unsigned long *dst, const unsigned long *src1, | 174 | static inline void bitmap_and(unsigned long *dst, const unsigned long *src1, |
| 172 | const unsigned long *src2, int nbits) | 175 | const unsigned long *src2, int nbits) |
| 173 | { | 176 | { |
| 174 | if (nbits <= BITS_PER_LONG) | 177 | if (small_const_nbits(nbits)) |
| 175 | *dst = *src1 & *src2; | 178 | *dst = *src1 & *src2; |
| 176 | else | 179 | else |
| 177 | __bitmap_and(dst, src1, src2, nbits); | 180 | __bitmap_and(dst, src1, src2, nbits); |
| @@ -180,7 +183,7 @@ static inline void bitmap_and(unsigned long *dst, const unsigned long *src1, | |||
| 180 | static inline void bitmap_or(unsigned long *dst, const unsigned long *src1, | 183 | static inline void bitmap_or(unsigned long *dst, const unsigned long *src1, |
| 181 | const unsigned long *src2, int nbits) | 184 | const unsigned long *src2, int nbits) |
| 182 | { | 185 | { |
| 183 | if (nbits <= BITS_PER_LONG) | 186 | if (small_const_nbits(nbits)) |
| 184 | *dst = *src1 | *src2; | 187 | *dst = *src1 | *src2; |
| 185 | else | 188 | else |
| 186 | __bitmap_or(dst, src1, src2, nbits); | 189 | __bitmap_or(dst, src1, src2, nbits); |
| @@ -189,7 +192,7 @@ static inline void bitmap_or(unsigned long *dst, const unsigned long *src1, | |||
| 189 | static inline void bitmap_xor(unsigned long *dst, const unsigned long *src1, | 192 | static inline void bitmap_xor(unsigned long *dst, const unsigned long *src1, |
| 190 | const unsigned long *src2, int nbits) | 193 | const unsigned long *src2, int nbits) |
| 191 | { | 194 | { |
| 192 | if (nbits <= BITS_PER_LONG) | 195 | if (small_const_nbits(nbits)) |
| 193 | *dst = *src1 ^ *src2; | 196 | *dst = *src1 ^ *src2; |
| 194 | else | 197 | else |
| 195 | __bitmap_xor(dst, src1, src2, nbits); | 198 | __bitmap_xor(dst, src1, src2, nbits); |
| @@ -198,7 +201,7 @@ static inline void bitmap_xor(unsigned long *dst, const unsigned long *src1, | |||
| 198 | static inline void bitmap_andnot(unsigned long *dst, const unsigned long *src1, | 201 | static inline void bitmap_andnot(unsigned long *dst, const unsigned long *src1, |
| 199 | const unsigned long *src2, int nbits) | 202 | const unsigned long *src2, int nbits) |
| 200 | { | 203 | { |
| 201 | if (nbits <= BITS_PER_LONG) | 204 | if (small_const_nbits(nbits)) |
| 202 | *dst = *src1 & ~(*src2); | 205 | *dst = *src1 & ~(*src2); |
| 203 | else | 206 | else |
| 204 | __bitmap_andnot(dst, src1, src2, nbits); | 207 | __bitmap_andnot(dst, src1, src2, nbits); |
| @@ -207,7 +210,7 @@ static inline void bitmap_andnot(unsigned long *dst, const unsigned long *src1, | |||
| 207 | static inline void bitmap_complement(unsigned long *dst, const unsigned long *src, | 210 | static inline void bitmap_complement(unsigned long *dst, const unsigned long *src, |
| 208 | int nbits) | 211 | int nbits) |
| 209 | { | 212 | { |
| 210 | if (nbits <= BITS_PER_LONG) | 213 | if (small_const_nbits(nbits)) |
| 211 | *dst = ~(*src) & BITMAP_LAST_WORD_MASK(nbits); | 214 | *dst = ~(*src) & BITMAP_LAST_WORD_MASK(nbits); |
| 212 | else | 215 | else |
| 213 | __bitmap_complement(dst, src, nbits); | 216 | __bitmap_complement(dst, src, nbits); |
| @@ -216,7 +219,7 @@ static inline void bitmap_complement(unsigned long *dst, const unsigned long *sr | |||
| 216 | static inline int bitmap_equal(const unsigned long *src1, | 219 | static inline int bitmap_equal(const unsigned long *src1, |
| 217 | const unsigned long *src2, int nbits) | 220 | const unsigned long *src2, int nbits) |
| 218 | { | 221 | { |
| 219 | if (nbits <= BITS_PER_LONG) | 222 | if (small_const_nbits(nbits)) |
| 220 | return ! ((*src1 ^ *src2) & BITMAP_LAST_WORD_MASK(nbits)); | 223 | return ! ((*src1 ^ *src2) & BITMAP_LAST_WORD_MASK(nbits)); |
| 221 | else | 224 | else |
| 222 | return __bitmap_equal(src1, src2, nbits); | 225 | return __bitmap_equal(src1, src2, nbits); |
| @@ -225,7 +228,7 @@ static inline int bitmap_equal(const unsigned long *src1, | |||
| 225 | static inline int bitmap_intersects(const unsigned long *src1, | 228 | static inline int bitmap_intersects(const unsigned long *src1, |
| 226 | const unsigned long *src2, int nbits) | 229 | const unsigned long *src2, int nbits) |
| 227 | { | 230 | { |
| 228 | if (nbits <= BITS_PER_LONG) | 231 | if (small_const_nbits(nbits)) |
| 229 | return ((*src1 & *src2) & BITMAP_LAST_WORD_MASK(nbits)) != 0; | 232 | return ((*src1 & *src2) & BITMAP_LAST_WORD_MASK(nbits)) != 0; |
| 230 | else | 233 | else |
| 231 | return __bitmap_intersects(src1, src2, nbits); | 234 | return __bitmap_intersects(src1, src2, nbits); |
| @@ -234,7 +237,7 @@ static inline int bitmap_intersects(const unsigned long *src1, | |||
| 234 | static inline int bitmap_subset(const unsigned long *src1, | 237 | static inline int bitmap_subset(const unsigned long *src1, |
| 235 | const unsigned long *src2, int nbits) | 238 | const unsigned long *src2, int nbits) |
| 236 | { | 239 | { |
| 237 | if (nbits <= BITS_PER_LONG) | 240 | if (small_const_nbits(nbits)) |
| 238 | return ! ((*src1 & ~(*src2)) & BITMAP_LAST_WORD_MASK(nbits)); | 241 | return ! ((*src1 & ~(*src2)) & BITMAP_LAST_WORD_MASK(nbits)); |
| 239 | else | 242 | else |
| 240 | return __bitmap_subset(src1, src2, nbits); | 243 | return __bitmap_subset(src1, src2, nbits); |
| @@ -242,7 +245,7 @@ static inline int bitmap_subset(const unsigned long *src1, | |||
| 242 | 245 | ||
| 243 | static inline int bitmap_empty(const unsigned long *src, int nbits) | 246 | static inline int bitmap_empty(const unsigned long *src, int nbits) |
| 244 | { | 247 | { |
| 245 | if (nbits <= BITS_PER_LONG) | 248 | if (small_const_nbits(nbits)) |
| 246 | return ! (*src & BITMAP_LAST_WORD_MASK(nbits)); | 249 | return ! (*src & BITMAP_LAST_WORD_MASK(nbits)); |
| 247 | else | 250 | else |
| 248 | return __bitmap_empty(src, nbits); | 251 | return __bitmap_empty(src, nbits); |
| @@ -250,7 +253,7 @@ static inline int bitmap_empty(const unsigned long *src, int nbits) | |||
| 250 | 253 | ||
| 251 | static inline int bitmap_full(const unsigned long *src, int nbits) | 254 | static inline int bitmap_full(const unsigned long *src, int nbits) |
| 252 | { | 255 | { |
| 253 | if (nbits <= BITS_PER_LONG) | 256 | if (small_const_nbits(nbits)) |
| 254 | return ! (~(*src) & BITMAP_LAST_WORD_MASK(nbits)); | 257 | return ! (~(*src) & BITMAP_LAST_WORD_MASK(nbits)); |
| 255 | else | 258 | else |
| 256 | return __bitmap_full(src, nbits); | 259 | return __bitmap_full(src, nbits); |
| @@ -258,7 +261,7 @@ static inline int bitmap_full(const unsigned long *src, int nbits) | |||
| 258 | 261 | ||
| 259 | static inline int bitmap_weight(const unsigned long *src, int nbits) | 262 | static inline int bitmap_weight(const unsigned long *src, int nbits) |
| 260 | { | 263 | { |
| 261 | if (nbits <= BITS_PER_LONG) | 264 | if (small_const_nbits(nbits)) |
| 262 | return hweight_long(*src & BITMAP_LAST_WORD_MASK(nbits)); | 265 | return hweight_long(*src & BITMAP_LAST_WORD_MASK(nbits)); |
| 263 | return __bitmap_weight(src, nbits); | 266 | return __bitmap_weight(src, nbits); |
| 264 | } | 267 | } |
| @@ -266,7 +269,7 @@ static inline int bitmap_weight(const unsigned long *src, int nbits) | |||
| 266 | static inline void bitmap_shift_right(unsigned long *dst, | 269 | static inline void bitmap_shift_right(unsigned long *dst, |
| 267 | const unsigned long *src, int n, int nbits) | 270 | const unsigned long *src, int n, int nbits) |
| 268 | { | 271 | { |
| 269 | if (nbits <= BITS_PER_LONG) | 272 | if (small_const_nbits(nbits)) |
| 270 | *dst = *src >> n; | 273 | *dst = *src >> n; |
| 271 | else | 274 | else |
| 272 | __bitmap_shift_right(dst, src, n, nbits); | 275 | __bitmap_shift_right(dst, src, n, nbits); |
| @@ -275,7 +278,7 @@ static inline void bitmap_shift_right(unsigned long *dst, | |||
| 275 | static inline void bitmap_shift_left(unsigned long *dst, | 278 | static inline void bitmap_shift_left(unsigned long *dst, |
| 276 | const unsigned long *src, int n, int nbits) | 279 | const unsigned long *src, int n, int nbits) |
| 277 | { | 280 | { |
| 278 | if (nbits <= BITS_PER_LONG) | 281 | if (small_const_nbits(nbits)) |
| 279 | *dst = (*src << n) & BITMAP_LAST_WORD_MASK(nbits); | 282 | *dst = (*src << n) & BITMAP_LAST_WORD_MASK(nbits); |
| 280 | else | 283 | else |
| 281 | __bitmap_shift_left(dst, src, n, nbits); | 284 | __bitmap_shift_left(dst, src, n, nbits); |
diff --git a/include/linux/bitops.h b/include/linux/bitops.h index 024f2b027244..61829139795a 100644 --- a/include/linux/bitops.h +++ b/include/linux/bitops.h | |||
| @@ -134,9 +134,20 @@ extern unsigned long find_first_bit(const unsigned long *addr, | |||
| 134 | */ | 134 | */ |
| 135 | extern unsigned long find_first_zero_bit(const unsigned long *addr, | 135 | extern unsigned long find_first_zero_bit(const unsigned long *addr, |
| 136 | unsigned long size); | 136 | unsigned long size); |
| 137 | |||
| 138 | #endif /* CONFIG_GENERIC_FIND_FIRST_BIT */ | 137 | #endif /* CONFIG_GENERIC_FIND_FIRST_BIT */ |
| 139 | 138 | ||
| 139 | #ifdef CONFIG_GENERIC_FIND_LAST_BIT | ||
| 140 | /** | ||
| 141 | * find_last_bit - find the last set bit in a memory region | ||
| 142 | * @addr: The address to start the search at | ||
| 143 | * @size: The maximum size to search | ||
| 144 | * | ||
| 145 | * Returns the bit number of the first set bit, or size. | ||
| 146 | */ | ||
| 147 | extern unsigned long find_last_bit(const unsigned long *addr, | ||
| 148 | unsigned long size); | ||
| 149 | #endif /* CONFIG_GENERIC_FIND_LAST_BIT */ | ||
| 150 | |||
| 140 | #ifdef CONFIG_GENERIC_FIND_NEXT_BIT | 151 | #ifdef CONFIG_GENERIC_FIND_NEXT_BIT |
| 141 | 152 | ||
| 142 | /** | 153 | /** |
diff --git a/include/linux/compiler-gcc3.h b/include/linux/compiler-gcc3.h index 2befe6513ce4..8005effc04f1 100644 --- a/include/linux/compiler-gcc3.h +++ b/include/linux/compiler-gcc3.h | |||
| @@ -2,6 +2,10 @@ | |||
| 2 | #error "Please don't include <linux/compiler-gcc3.h> directly, include <linux/compiler.h> instead." | 2 | #error "Please don't include <linux/compiler-gcc3.h> directly, include <linux/compiler.h> instead." |
| 3 | #endif | 3 | #endif |
| 4 | 4 | ||
| 5 | #if __GNUC_MINOR__ < 2 | ||
| 6 | # error Sorry, your compiler is too old - please upgrade it. | ||
| 7 | #endif | ||
| 8 | |||
| 5 | #if __GNUC_MINOR__ >= 3 | 9 | #if __GNUC_MINOR__ >= 3 |
| 6 | # define __used __attribute__((__used__)) | 10 | # define __used __attribute__((__used__)) |
| 7 | #else | 11 | #else |
diff --git a/include/linux/cpumask.h b/include/linux/cpumask.h index d4bf52603e6b..9f315382610b 100644 --- a/include/linux/cpumask.h +++ b/include/linux/cpumask.h | |||
| @@ -144,6 +144,7 @@ | |||
| 144 | typedef struct cpumask { DECLARE_BITMAP(bits, NR_CPUS); } cpumask_t; | 144 | typedef struct cpumask { DECLARE_BITMAP(bits, NR_CPUS); } cpumask_t; |
| 145 | extern cpumask_t _unused_cpumask_arg_; | 145 | extern cpumask_t _unused_cpumask_arg_; |
| 146 | 146 | ||
| 147 | #ifndef CONFIG_DISABLE_OBSOLETE_CPUMASK_FUNCTIONS | ||
| 147 | #define cpu_set(cpu, dst) __cpu_set((cpu), &(dst)) | 148 | #define cpu_set(cpu, dst) __cpu_set((cpu), &(dst)) |
| 148 | static inline void __cpu_set(int cpu, volatile cpumask_t *dstp) | 149 | static inline void __cpu_set(int cpu, volatile cpumask_t *dstp) |
| 149 | { | 150 | { |
| @@ -267,6 +268,26 @@ static inline void __cpus_shift_left(cpumask_t *dstp, | |||
| 267 | { | 268 | { |
| 268 | bitmap_shift_left(dstp->bits, srcp->bits, n, nbits); | 269 | bitmap_shift_left(dstp->bits, srcp->bits, n, nbits); |
| 269 | } | 270 | } |
| 271 | #endif /* !CONFIG_DISABLE_OBSOLETE_CPUMASK_FUNCTIONS */ | ||
| 272 | |||
| 273 | /** | ||
| 274 | * to_cpumask - convert an NR_CPUS bitmap to a struct cpumask * | ||
| 275 | * @bitmap: the bitmap | ||
| 276 | * | ||
| 277 | * There are a few places where cpumask_var_t isn't appropriate and | ||
| 278 | * static cpumasks must be used (eg. very early boot), yet we don't | ||
| 279 | * expose the definition of 'struct cpumask'. | ||
| 280 | * | ||
| 281 | * This does the conversion, and can be used as a constant initializer. | ||
| 282 | */ | ||
| 283 | #define to_cpumask(bitmap) \ | ||
| 284 | ((struct cpumask *)(1 ? (bitmap) \ | ||
| 285 | : (void *)sizeof(__check_is_bitmap(bitmap)))) | ||
| 286 | |||
| 287 | static inline int __check_is_bitmap(const unsigned long *bitmap) | ||
| 288 | { | ||
| 289 | return 1; | ||
| 290 | } | ||
| 270 | 291 | ||
| 271 | /* | 292 | /* |
| 272 | * Special-case data structure for "single bit set only" constant CPU masks. | 293 | * Special-case data structure for "single bit set only" constant CPU masks. |
| @@ -278,13 +299,14 @@ static inline void __cpus_shift_left(cpumask_t *dstp, | |||
| 278 | extern const unsigned long | 299 | extern const unsigned long |
| 279 | cpu_bit_bitmap[BITS_PER_LONG+1][BITS_TO_LONGS(NR_CPUS)]; | 300 | cpu_bit_bitmap[BITS_PER_LONG+1][BITS_TO_LONGS(NR_CPUS)]; |
| 280 | 301 | ||
| 281 | static inline const cpumask_t *get_cpu_mask(unsigned int cpu) | 302 | static inline const struct cpumask *get_cpu_mask(unsigned int cpu) |
| 282 | { | 303 | { |
| 283 | const unsigned long *p = cpu_bit_bitmap[1 + cpu % BITS_PER_LONG]; | 304 | const unsigned long *p = cpu_bit_bitmap[1 + cpu % BITS_PER_LONG]; |
| 284 | p -= cpu / BITS_PER_LONG; | 305 | p -= cpu / BITS_PER_LONG; |
| 285 | return (const cpumask_t *)p; | 306 | return to_cpumask(p); |
| 286 | } | 307 | } |
| 287 | 308 | ||
| 309 | #ifndef CONFIG_DISABLE_OBSOLETE_CPUMASK_FUNCTIONS | ||
| 288 | /* | 310 | /* |
| 289 | * In cases where we take the address of the cpumask immediately, | 311 | * In cases where we take the address of the cpumask immediately, |
| 290 | * gcc optimizes it out (it's a constant) and there's no huge stack | 312 | * gcc optimizes it out (it's a constant) and there's no huge stack |
| @@ -370,19 +392,22 @@ static inline void __cpus_fold(cpumask_t *dstp, const cpumask_t *origp, | |||
| 370 | { | 392 | { |
| 371 | bitmap_fold(dstp->bits, origp->bits, sz, nbits); | 393 | bitmap_fold(dstp->bits, origp->bits, sz, nbits); |
| 372 | } | 394 | } |
| 395 | #endif /* !CONFIG_DISABLE_OBSOLETE_CPUMASK_FUNCTIONS */ | ||
| 373 | 396 | ||
| 374 | #if NR_CPUS == 1 | 397 | #if NR_CPUS == 1 |
| 375 | 398 | ||
| 376 | #define nr_cpu_ids 1 | 399 | #define nr_cpu_ids 1 |
| 400 | #ifndef CONFIG_DISABLE_OBSOLETE_CPUMASK_FUNCTIONS | ||
| 377 | #define first_cpu(src) ({ (void)(src); 0; }) | 401 | #define first_cpu(src) ({ (void)(src); 0; }) |
| 378 | #define next_cpu(n, src) ({ (void)(src); 1; }) | 402 | #define next_cpu(n, src) ({ (void)(src); 1; }) |
| 379 | #define any_online_cpu(mask) 0 | 403 | #define any_online_cpu(mask) 0 |
| 380 | #define for_each_cpu_mask(cpu, mask) \ | 404 | #define for_each_cpu_mask(cpu, mask) \ |
| 381 | for ((cpu) = 0; (cpu) < 1; (cpu)++, (void)mask) | 405 | for ((cpu) = 0; (cpu) < 1; (cpu)++, (void)mask) |
| 382 | 406 | #endif /* !CONFIG_DISABLE_OBSOLETE_CPUMASK_FUNCTIONS */ | |
| 383 | #else /* NR_CPUS > 1 */ | 407 | #else /* NR_CPUS > 1 */ |
| 384 | 408 | ||
| 385 | extern int nr_cpu_ids; | 409 | extern int nr_cpu_ids; |
| 410 | #ifndef CONFIG_DISABLE_OBSOLETE_CPUMASK_FUNCTIONS | ||
| 386 | int __first_cpu(const cpumask_t *srcp); | 411 | int __first_cpu(const cpumask_t *srcp); |
| 387 | int __next_cpu(int n, const cpumask_t *srcp); | 412 | int __next_cpu(int n, const cpumask_t *srcp); |
| 388 | int __any_online_cpu(const cpumask_t *mask); | 413 | int __any_online_cpu(const cpumask_t *mask); |
| @@ -394,8 +419,10 @@ int __any_online_cpu(const cpumask_t *mask); | |||
| 394 | for ((cpu) = -1; \ | 419 | for ((cpu) = -1; \ |
| 395 | (cpu) = next_cpu((cpu), (mask)), \ | 420 | (cpu) = next_cpu((cpu), (mask)), \ |
| 396 | (cpu) < NR_CPUS; ) | 421 | (cpu) < NR_CPUS; ) |
| 422 | #endif /* !CONFIG_DISABLE_OBSOLETE_CPUMASK_FUNCTIONS */ | ||
| 397 | #endif | 423 | #endif |
| 398 | 424 | ||
| 425 | #ifndef CONFIG_DISABLE_OBSOLETE_CPUMASK_FUNCTIONS | ||
| 399 | #if NR_CPUS <= 64 | 426 | #if NR_CPUS <= 64 |
| 400 | 427 | ||
| 401 | #define next_cpu_nr(n, src) next_cpu(n, src) | 428 | #define next_cpu_nr(n, src) next_cpu(n, src) |
| @@ -413,77 +440,67 @@ int __next_cpu_nr(int n, const cpumask_t *srcp); | |||
| 413 | (cpu) < nr_cpu_ids; ) | 440 | (cpu) < nr_cpu_ids; ) |
| 414 | 441 | ||
| 415 | #endif /* NR_CPUS > 64 */ | 442 | #endif /* NR_CPUS > 64 */ |
| 443 | #endif /* !CONFIG_DISABLE_OBSOLETE_CPUMASK_FUNCTIONS */ | ||
| 416 | 444 | ||
| 417 | /* | 445 | /* |
| 418 | * The following particular system cpumasks and operations manage | 446 | * The following particular system cpumasks and operations manage |
| 419 | * possible, present, active and online cpus. Each of them is a fixed size | 447 | * possible, present, active and online cpus. |
| 420 | * bitmap of size NR_CPUS. | ||
| 421 | * | 448 | * |
| 422 | * #ifdef CONFIG_HOTPLUG_CPU | 449 | * cpu_possible_mask- has bit 'cpu' set iff cpu is populatable |
| 423 | * cpu_possible_map - has bit 'cpu' set iff cpu is populatable | 450 | * cpu_present_mask - has bit 'cpu' set iff cpu is populated |
| 424 | * cpu_present_map - has bit 'cpu' set iff cpu is populated | 451 | * cpu_online_mask - has bit 'cpu' set iff cpu available to scheduler |
| 425 | * cpu_online_map - has bit 'cpu' set iff cpu available to scheduler | 452 | * cpu_active_mask - has bit 'cpu' set iff cpu available to migration |
| 426 | * cpu_active_map - has bit 'cpu' set iff cpu available to migration | ||
| 427 | * #else | ||
| 428 | * cpu_possible_map - has bit 'cpu' set iff cpu is populated | ||
| 429 | * cpu_present_map - copy of cpu_possible_map | ||
| 430 | * cpu_online_map - has bit 'cpu' set iff cpu available to scheduler | ||
| 431 | * #endif | ||
| 432 | * | 453 | * |
| 433 | * In either case, NR_CPUS is fixed at compile time, as the static | 454 | * If !CONFIG_HOTPLUG_CPU, present == possible, and active == online. |
| 434 | * size of these bitmaps. The cpu_possible_map is fixed at boot | ||
| 435 | * time, as the set of CPU id's that it is possible might ever | ||
| 436 | * be plugged in at anytime during the life of that system boot. | ||
| 437 | * The cpu_present_map is dynamic(*), representing which CPUs | ||
| 438 | * are currently plugged in. And cpu_online_map is the dynamic | ||
| 439 | * subset of cpu_present_map, indicating those CPUs available | ||
| 440 | * for scheduling. | ||
| 441 | * | 455 | * |
| 442 | * If HOTPLUG is enabled, then cpu_possible_map is forced to have | 456 | * The cpu_possible_mask is fixed at boot time, as the set of CPU id's |
| 457 | * that it is possible might ever be plugged in at anytime during the | ||
| 458 | * life of that system boot. The cpu_present_mask is dynamic(*), | ||
| 459 | * representing which CPUs are currently plugged in. And | ||
| 460 | * cpu_online_mask is the dynamic subset of cpu_present_mask, | ||
| 461 | * indicating those CPUs available for scheduling. | ||
| 462 | * | ||
| 463 | * If HOTPLUG is enabled, then cpu_possible_mask is forced to have | ||
| 443 | * all NR_CPUS bits set, otherwise it is just the set of CPUs that | 464 | * all NR_CPUS bits set, otherwise it is just the set of CPUs that |
| 444 | * ACPI reports present at boot. | 465 | * ACPI reports present at boot. |
| 445 | * | 466 | * |
| 446 | * If HOTPLUG is enabled, then cpu_present_map varies dynamically, | 467 | * If HOTPLUG is enabled, then cpu_present_mask varies dynamically, |
| 447 | * depending on what ACPI reports as currently plugged in, otherwise | 468 | * depending on what ACPI reports as currently plugged in, otherwise |
| 448 | * cpu_present_map is just a copy of cpu_possible_map. | 469 | * cpu_present_mask is just a copy of cpu_possible_mask. |
| 449 | * | 470 | * |
| 450 | * (*) Well, cpu_present_map is dynamic in the hotplug case. If not | 471 | * (*) Well, cpu_present_mask is dynamic in the hotplug case. If not |
| 451 | * hotplug, it's a copy of cpu_possible_map, hence fixed at boot. | 472 | * hotplug, it's a copy of cpu_possible_mask, hence fixed at boot. |
| 452 | * | 473 | * |
| 453 | * Subtleties: | 474 | * Subtleties: |
| 454 | * 1) UP arch's (NR_CPUS == 1, CONFIG_SMP not defined) hardcode | 475 | * 1) UP arch's (NR_CPUS == 1, CONFIG_SMP not defined) hardcode |
| 455 | * assumption that their single CPU is online. The UP | 476 | * assumption that their single CPU is online. The UP |
| 456 | * cpu_{online,possible,present}_maps are placebos. Changing them | 477 | * cpu_{online,possible,present}_masks are placebos. Changing them |
| 457 | * will have no useful affect on the following num_*_cpus() | 478 | * will have no useful affect on the following num_*_cpus() |
| 458 | * and cpu_*() macros in the UP case. This ugliness is a UP | 479 | * and cpu_*() macros in the UP case. This ugliness is a UP |
| 459 | * optimization - don't waste any instructions or memory references | 480 | * optimization - don't waste any instructions or memory references |
| 460 | * asking if you're online or how many CPUs there are if there is | 481 | * asking if you're online or how many CPUs there are if there is |
| 461 | * only one CPU. | 482 | * only one CPU. |
| 462 | * 2) Most SMP arch's #define some of these maps to be some | ||
| 463 | * other map specific to that arch. Therefore, the following | ||
| 464 | * must be #define macros, not inlines. To see why, examine | ||
| 465 | * the assembly code produced by the following. Note that | ||
| 466 | * set1() writes phys_x_map, but set2() writes x_map: | ||
| 467 | * int x_map, phys_x_map; | ||
| 468 | * #define set1(a) x_map = a | ||
| 469 | * inline void set2(int a) { x_map = a; } | ||
| 470 | * #define x_map phys_x_map | ||
| 471 | * main(){ set1(3); set2(5); } | ||
| 472 | */ | 483 | */ |
| 473 | 484 | ||
| 474 | extern cpumask_t cpu_possible_map; | 485 | extern const struct cpumask *const cpu_possible_mask; |
| 475 | extern cpumask_t cpu_online_map; | 486 | extern const struct cpumask *const cpu_online_mask; |
| 476 | extern cpumask_t cpu_present_map; | 487 | extern const struct cpumask *const cpu_present_mask; |
| 477 | extern cpumask_t cpu_active_map; | 488 | extern const struct cpumask *const cpu_active_mask; |
| 489 | |||
| 490 | /* These strip const, as traditionally they weren't const. */ | ||
| 491 | #define cpu_possible_map (*(cpumask_t *)cpu_possible_mask) | ||
| 492 | #define cpu_online_map (*(cpumask_t *)cpu_online_mask) | ||
| 493 | #define cpu_present_map (*(cpumask_t *)cpu_present_mask) | ||
| 494 | #define cpu_active_map (*(cpumask_t *)cpu_active_mask) | ||
| 478 | 495 | ||
| 479 | #if NR_CPUS > 1 | 496 | #if NR_CPUS > 1 |
| 480 | #define num_online_cpus() cpus_weight_nr(cpu_online_map) | 497 | #define num_online_cpus() cpumask_weight(cpu_online_mask) |
| 481 | #define num_possible_cpus() cpus_weight_nr(cpu_possible_map) | 498 | #define num_possible_cpus() cpumask_weight(cpu_possible_mask) |
| 482 | #define num_present_cpus() cpus_weight_nr(cpu_present_map) | 499 | #define num_present_cpus() cpumask_weight(cpu_present_mask) |
| 483 | #define cpu_online(cpu) cpu_isset((cpu), cpu_online_map) | 500 | #define cpu_online(cpu) cpumask_test_cpu((cpu), cpu_online_mask) |
| 484 | #define cpu_possible(cpu) cpu_isset((cpu), cpu_possible_map) | 501 | #define cpu_possible(cpu) cpumask_test_cpu((cpu), cpu_possible_mask) |
| 485 | #define cpu_present(cpu) cpu_isset((cpu), cpu_present_map) | 502 | #define cpu_present(cpu) cpumask_test_cpu((cpu), cpu_present_mask) |
| 486 | #define cpu_active(cpu) cpu_isset((cpu), cpu_active_map) | 503 | #define cpu_active(cpu) cpumask_test_cpu((cpu), cpu_active_mask) |
| 487 | #else | 504 | #else |
| 488 | #define num_online_cpus() 1 | 505 | #define num_online_cpus() 1 |
| 489 | #define num_possible_cpus() 1 | 506 | #define num_possible_cpus() 1 |
| @@ -496,10 +513,6 @@ extern cpumask_t cpu_active_map; | |||
| 496 | 513 | ||
| 497 | #define cpu_is_offline(cpu) unlikely(!cpu_online(cpu)) | 514 | #define cpu_is_offline(cpu) unlikely(!cpu_online(cpu)) |
| 498 | 515 | ||
| 499 | #define for_each_possible_cpu(cpu) for_each_cpu_mask_nr((cpu), cpu_possible_map) | ||
| 500 | #define for_each_online_cpu(cpu) for_each_cpu_mask_nr((cpu), cpu_online_map) | ||
| 501 | #define for_each_present_cpu(cpu) for_each_cpu_mask_nr((cpu), cpu_present_map) | ||
| 502 | |||
| 503 | /* These are the new versions of the cpumask operators: passed by pointer. | 516 | /* These are the new versions of the cpumask operators: passed by pointer. |
| 504 | * The older versions will be implemented in terms of these, then deleted. */ | 517 | * The older versions will be implemented in terms of these, then deleted. */ |
| 505 | #define cpumask_bits(maskp) ((maskp)->bits) | 518 | #define cpumask_bits(maskp) ((maskp)->bits) |
| @@ -687,7 +700,7 @@ static inline void cpumask_clear_cpu(int cpu, struct cpumask *dstp) | |||
| 687 | * No static inline type checking - see Subtlety (1) above. | 700 | * No static inline type checking - see Subtlety (1) above. |
| 688 | */ | 701 | */ |
| 689 | #define cpumask_test_cpu(cpu, cpumask) \ | 702 | #define cpumask_test_cpu(cpu, cpumask) \ |
| 690 | test_bit(cpumask_check(cpu), (cpumask)->bits) | 703 | test_bit(cpumask_check(cpu), cpumask_bits((cpumask))) |
| 691 | 704 | ||
| 692 | /** | 705 | /** |
| 693 | * cpumask_test_and_set_cpu - atomically test and set a cpu in a cpumask | 706 | * cpumask_test_and_set_cpu - atomically test and set a cpu in a cpumask |
| @@ -930,7 +943,7 @@ static inline void cpumask_copy(struct cpumask *dstp, | |||
| 930 | static inline int cpumask_scnprintf(char *buf, int len, | 943 | static inline int cpumask_scnprintf(char *buf, int len, |
| 931 | const struct cpumask *srcp) | 944 | const struct cpumask *srcp) |
| 932 | { | 945 | { |
| 933 | return bitmap_scnprintf(buf, len, srcp->bits, nr_cpumask_bits); | 946 | return bitmap_scnprintf(buf, len, cpumask_bits(srcp), nr_cpumask_bits); |
| 934 | } | 947 | } |
| 935 | 948 | ||
| 936 | /** | 949 | /** |
| @@ -944,7 +957,7 @@ static inline int cpumask_scnprintf(char *buf, int len, | |||
| 944 | static inline int cpumask_parse_user(const char __user *buf, int len, | 957 | static inline int cpumask_parse_user(const char __user *buf, int len, |
| 945 | struct cpumask *dstp) | 958 | struct cpumask *dstp) |
| 946 | { | 959 | { |
| 947 | return bitmap_parse_user(buf, len, dstp->bits, nr_cpumask_bits); | 960 | return bitmap_parse_user(buf, len, cpumask_bits(dstp), nr_cpumask_bits); |
| 948 | } | 961 | } |
| 949 | 962 | ||
| 950 | /** | 963 | /** |
| @@ -959,7 +972,8 @@ static inline int cpumask_parse_user(const char __user *buf, int len, | |||
| 959 | static inline int cpulist_scnprintf(char *buf, int len, | 972 | static inline int cpulist_scnprintf(char *buf, int len, |
| 960 | const struct cpumask *srcp) | 973 | const struct cpumask *srcp) |
| 961 | { | 974 | { |
| 962 | return bitmap_scnlistprintf(buf, len, srcp->bits, nr_cpumask_bits); | 975 | return bitmap_scnlistprintf(buf, len, cpumask_bits(srcp), |
| 976 | nr_cpumask_bits); | ||
| 963 | } | 977 | } |
| 964 | 978 | ||
| 965 | /** | 979 | /** |
| @@ -972,26 +986,7 @@ static inline int cpulist_scnprintf(char *buf, int len, | |||
| 972 | */ | 986 | */ |
| 973 | static inline int cpulist_parse(const char *buf, struct cpumask *dstp) | 987 | static inline int cpulist_parse(const char *buf, struct cpumask *dstp) |
| 974 | { | 988 | { |
| 975 | return bitmap_parselist(buf, dstp->bits, nr_cpumask_bits); | 989 | return bitmap_parselist(buf, cpumask_bits(dstp), nr_cpumask_bits); |
| 976 | } | ||
| 977 | |||
| 978 | /** | ||
| 979 | * to_cpumask - convert an NR_CPUS bitmap to a struct cpumask * | ||
| 980 | * @bitmap: the bitmap | ||
| 981 | * | ||
| 982 | * There are a few places where cpumask_var_t isn't appropriate and | ||
| 983 | * static cpumasks must be used (eg. very early boot), yet we don't | ||
| 984 | * expose the definition of 'struct cpumask'. | ||
| 985 | * | ||
| 986 | * This does the conversion, and can be used as a constant initializer. | ||
| 987 | */ | ||
| 988 | #define to_cpumask(bitmap) \ | ||
| 989 | ((struct cpumask *)(1 ? (bitmap) \ | ||
| 990 | : (void *)sizeof(__check_is_bitmap(bitmap)))) | ||
| 991 | |||
| 992 | static inline int __check_is_bitmap(const unsigned long *bitmap) | ||
| 993 | { | ||
| 994 | return 1; | ||
| 995 | } | 990 | } |
| 996 | 991 | ||
| 997 | /** | 992 | /** |
| @@ -1025,6 +1020,7 @@ static inline size_t cpumask_size(void) | |||
| 1025 | #ifdef CONFIG_CPUMASK_OFFSTACK | 1020 | #ifdef CONFIG_CPUMASK_OFFSTACK |
| 1026 | typedef struct cpumask *cpumask_var_t; | 1021 | typedef struct cpumask *cpumask_var_t; |
| 1027 | 1022 | ||
| 1023 | bool alloc_cpumask_var_node(cpumask_var_t *mask, gfp_t flags, int node); | ||
| 1028 | bool alloc_cpumask_var(cpumask_var_t *mask, gfp_t flags); | 1024 | bool alloc_cpumask_var(cpumask_var_t *mask, gfp_t flags); |
| 1029 | void alloc_bootmem_cpumask_var(cpumask_var_t *mask); | 1025 | void alloc_bootmem_cpumask_var(cpumask_var_t *mask); |
| 1030 | void free_cpumask_var(cpumask_var_t mask); | 1026 | void free_cpumask_var(cpumask_var_t mask); |
| @@ -1038,6 +1034,12 @@ static inline bool alloc_cpumask_var(cpumask_var_t *mask, gfp_t flags) | |||
| 1038 | return true; | 1034 | return true; |
| 1039 | } | 1035 | } |
| 1040 | 1036 | ||
| 1037 | static inline bool alloc_cpumask_var_node(cpumask_var_t *mask, gfp_t flags, | ||
| 1038 | int node) | ||
| 1039 | { | ||
| 1040 | return true; | ||
| 1041 | } | ||
| 1042 | |||
| 1041 | static inline void alloc_bootmem_cpumask_var(cpumask_var_t *mask) | 1043 | static inline void alloc_bootmem_cpumask_var(cpumask_var_t *mask) |
| 1042 | { | 1044 | { |
| 1043 | } | 1045 | } |
| @@ -1051,12 +1053,6 @@ static inline void free_bootmem_cpumask_var(cpumask_var_t mask) | |||
| 1051 | } | 1053 | } |
| 1052 | #endif /* CONFIG_CPUMASK_OFFSTACK */ | 1054 | #endif /* CONFIG_CPUMASK_OFFSTACK */ |
| 1053 | 1055 | ||
| 1054 | /* The pointer versions of the maps, these will become the primary versions. */ | ||
| 1055 | #define cpu_possible_mask ((const struct cpumask *)&cpu_possible_map) | ||
| 1056 | #define cpu_online_mask ((const struct cpumask *)&cpu_online_map) | ||
| 1057 | #define cpu_present_mask ((const struct cpumask *)&cpu_present_map) | ||
| 1058 | #define cpu_active_mask ((const struct cpumask *)&cpu_active_map) | ||
| 1059 | |||
| 1060 | /* It's common to want to use cpu_all_mask in struct member initializers, | 1056 | /* It's common to want to use cpu_all_mask in struct member initializers, |
| 1061 | * so it has to refer to an address rather than a pointer. */ | 1057 | * so it has to refer to an address rather than a pointer. */ |
| 1062 | extern const DECLARE_BITMAP(cpu_all_bits, NR_CPUS); | 1058 | extern const DECLARE_BITMAP(cpu_all_bits, NR_CPUS); |
| @@ -1065,51 +1061,16 @@ extern const DECLARE_BITMAP(cpu_all_bits, NR_CPUS); | |||
| 1065 | /* First bits of cpu_bit_bitmap are in fact unset. */ | 1061 | /* First bits of cpu_bit_bitmap are in fact unset. */ |
| 1066 | #define cpu_none_mask to_cpumask(cpu_bit_bitmap[0]) | 1062 | #define cpu_none_mask to_cpumask(cpu_bit_bitmap[0]) |
| 1067 | 1063 | ||
| 1068 | /* Wrappers for arch boot code to manipulate normally-constant masks */ | 1064 | #define for_each_possible_cpu(cpu) for_each_cpu((cpu), cpu_possible_mask) |
| 1069 | static inline void set_cpu_possible(unsigned int cpu, bool possible) | 1065 | #define for_each_online_cpu(cpu) for_each_cpu((cpu), cpu_online_mask) |
| 1070 | { | 1066 | #define for_each_present_cpu(cpu) for_each_cpu((cpu), cpu_present_mask) |
| 1071 | if (possible) | ||
| 1072 | cpumask_set_cpu(cpu, &cpu_possible_map); | ||
| 1073 | else | ||
| 1074 | cpumask_clear_cpu(cpu, &cpu_possible_map); | ||
| 1075 | } | ||
| 1076 | |||
| 1077 | static inline void set_cpu_present(unsigned int cpu, bool present) | ||
| 1078 | { | ||
| 1079 | if (present) | ||
| 1080 | cpumask_set_cpu(cpu, &cpu_present_map); | ||
| 1081 | else | ||
| 1082 | cpumask_clear_cpu(cpu, &cpu_present_map); | ||
| 1083 | } | ||
| 1084 | |||
| 1085 | static inline void set_cpu_online(unsigned int cpu, bool online) | ||
| 1086 | { | ||
| 1087 | if (online) | ||
| 1088 | cpumask_set_cpu(cpu, &cpu_online_map); | ||
| 1089 | else | ||
| 1090 | cpumask_clear_cpu(cpu, &cpu_online_map); | ||
| 1091 | } | ||
| 1092 | 1067 | ||
| 1093 | static inline void set_cpu_active(unsigned int cpu, bool active) | 1068 | /* Wrappers for arch boot code to manipulate normally-constant masks */ |
| 1094 | { | 1069 | void set_cpu_possible(unsigned int cpu, bool possible); |
| 1095 | if (active) | 1070 | void set_cpu_present(unsigned int cpu, bool present); |
| 1096 | cpumask_set_cpu(cpu, &cpu_active_map); | 1071 | void set_cpu_online(unsigned int cpu, bool online); |
| 1097 | else | 1072 | void set_cpu_active(unsigned int cpu, bool active); |
| 1098 | cpumask_clear_cpu(cpu, &cpu_active_map); | 1073 | void init_cpu_present(const struct cpumask *src); |
| 1099 | } | 1074 | void init_cpu_possible(const struct cpumask *src); |
| 1100 | 1075 | void init_cpu_online(const struct cpumask *src); | |
| 1101 | static inline void init_cpu_present(const struct cpumask *src) | ||
| 1102 | { | ||
| 1103 | cpumask_copy(&cpu_present_map, src); | ||
| 1104 | } | ||
| 1105 | |||
| 1106 | static inline void init_cpu_possible(const struct cpumask *src) | ||
| 1107 | { | ||
| 1108 | cpumask_copy(&cpu_possible_map, src); | ||
| 1109 | } | ||
| 1110 | |||
| 1111 | static inline void init_cpu_online(const struct cpumask *src) | ||
| 1112 | { | ||
| 1113 | cpumask_copy(&cpu_online_map, src); | ||
| 1114 | } | ||
| 1115 | #endif /* __LINUX_CPUMASK_H */ | 1076 | #endif /* __LINUX_CPUMASK_H */ |
diff --git a/include/linux/dma_remapping.h b/include/linux/dma_remapping.h index 952df39c989d..136f170cecc2 100644 --- a/include/linux/dma_remapping.h +++ b/include/linux/dma_remapping.h | |||
| @@ -9,148 +9,16 @@ | |||
| 9 | #define VTD_PAGE_MASK (((u64)-1) << VTD_PAGE_SHIFT) | 9 | #define VTD_PAGE_MASK (((u64)-1) << VTD_PAGE_SHIFT) |
| 10 | #define VTD_PAGE_ALIGN(addr) (((addr) + VTD_PAGE_SIZE - 1) & VTD_PAGE_MASK) | 10 | #define VTD_PAGE_ALIGN(addr) (((addr) + VTD_PAGE_SIZE - 1) & VTD_PAGE_MASK) |
| 11 | 11 | ||
| 12 | #define IOVA_PFN(addr) ((addr) >> PAGE_SHIFT) | ||
| 13 | #define DMA_32BIT_PFN IOVA_PFN(DMA_32BIT_MASK) | ||
| 14 | #define DMA_64BIT_PFN IOVA_PFN(DMA_64BIT_MASK) | ||
| 15 | |||
| 16 | |||
| 17 | /* | ||
| 18 | * 0: Present | ||
| 19 | * 1-11: Reserved | ||
| 20 | * 12-63: Context Ptr (12 - (haw-1)) | ||
| 21 | * 64-127: Reserved | ||
| 22 | */ | ||
| 23 | struct root_entry { | ||
| 24 | u64 val; | ||
| 25 | u64 rsvd1; | ||
| 26 | }; | ||
| 27 | #define ROOT_ENTRY_NR (VTD_PAGE_SIZE/sizeof(struct root_entry)) | ||
| 28 | static inline bool root_present(struct root_entry *root) | ||
| 29 | { | ||
| 30 | return (root->val & 1); | ||
| 31 | } | ||
| 32 | static inline void set_root_present(struct root_entry *root) | ||
| 33 | { | ||
| 34 | root->val |= 1; | ||
| 35 | } | ||
| 36 | static inline void set_root_value(struct root_entry *root, unsigned long value) | ||
| 37 | { | ||
| 38 | root->val |= value & VTD_PAGE_MASK; | ||
| 39 | } | ||
| 40 | |||
| 41 | struct context_entry; | ||
| 42 | static inline struct context_entry * | ||
| 43 | get_context_addr_from_root(struct root_entry *root) | ||
| 44 | { | ||
| 45 | return (struct context_entry *) | ||
| 46 | (root_present(root)?phys_to_virt( | ||
| 47 | root->val & VTD_PAGE_MASK) : | ||
| 48 | NULL); | ||
| 49 | } | ||
| 50 | |||
| 51 | /* | ||
| 52 | * low 64 bits: | ||
| 53 | * 0: present | ||
| 54 | * 1: fault processing disable | ||
| 55 | * 2-3: translation type | ||
| 56 | * 12-63: address space root | ||
| 57 | * high 64 bits: | ||
| 58 | * 0-2: address width | ||
| 59 | * 3-6: aval | ||
| 60 | * 8-23: domain id | ||
| 61 | */ | ||
| 62 | struct context_entry { | ||
| 63 | u64 lo; | ||
| 64 | u64 hi; | ||
| 65 | }; | ||
| 66 | #define context_present(c) ((c).lo & 1) | ||
| 67 | #define context_fault_disable(c) (((c).lo >> 1) & 1) | ||
| 68 | #define context_translation_type(c) (((c).lo >> 2) & 3) | ||
| 69 | #define context_address_root(c) ((c).lo & VTD_PAGE_MASK) | ||
| 70 | #define context_address_width(c) ((c).hi & 7) | ||
| 71 | #define context_domain_id(c) (((c).hi >> 8) & ((1 << 16) - 1)) | ||
| 72 | |||
| 73 | #define context_set_present(c) do {(c).lo |= 1;} while (0) | ||
| 74 | #define context_set_fault_enable(c) \ | ||
| 75 | do {(c).lo &= (((u64)-1) << 2) | 1;} while (0) | ||
| 76 | #define context_set_translation_type(c, val) \ | ||
| 77 | do { \ | ||
| 78 | (c).lo &= (((u64)-1) << 4) | 3; \ | ||
| 79 | (c).lo |= ((val) & 3) << 2; \ | ||
| 80 | } while (0) | ||
| 81 | #define CONTEXT_TT_MULTI_LEVEL 0 | ||
| 82 | #define context_set_address_root(c, val) \ | ||
| 83 | do {(c).lo |= (val) & VTD_PAGE_MASK; } while (0) | ||
| 84 | #define context_set_address_width(c, val) do {(c).hi |= (val) & 7;} while (0) | ||
| 85 | #define context_set_domain_id(c, val) \ | ||
| 86 | do {(c).hi |= ((val) & ((1 << 16) - 1)) << 8;} while (0) | ||
| 87 | #define context_clear_entry(c) do {(c).lo = 0; (c).hi = 0;} while (0) | ||
| 88 | |||
| 89 | /* | ||
| 90 | * 0: readable | ||
| 91 | * 1: writable | ||
| 92 | * 2-6: reserved | ||
| 93 | * 7: super page | ||
| 94 | * 8-11: available | ||
| 95 | * 12-63: Host physcial address | ||
| 96 | */ | ||
| 97 | struct dma_pte { | ||
| 98 | u64 val; | ||
| 99 | }; | ||
| 100 | #define dma_clear_pte(p) do {(p).val = 0;} while (0) | ||
| 101 | |||
| 102 | #define DMA_PTE_READ (1) | 12 | #define DMA_PTE_READ (1) |
| 103 | #define DMA_PTE_WRITE (2) | 13 | #define DMA_PTE_WRITE (2) |
| 104 | 14 | ||
| 105 | #define dma_set_pte_readable(p) do {(p).val |= DMA_PTE_READ;} while (0) | ||
| 106 | #define dma_set_pte_writable(p) do {(p).val |= DMA_PTE_WRITE;} while (0) | ||
| 107 | #define dma_set_pte_prot(p, prot) \ | ||
| 108 | do {(p).val = ((p).val & ~3) | ((prot) & 3); } while (0) | ||
| 109 | #define dma_pte_addr(p) ((p).val & VTD_PAGE_MASK) | ||
| 110 | #define dma_set_pte_addr(p, addr) do {\ | ||
| 111 | (p).val |= ((addr) & VTD_PAGE_MASK); } while (0) | ||
| 112 | #define dma_pte_present(p) (((p).val & 3) != 0) | ||
| 113 | |||
| 114 | struct intel_iommu; | 15 | struct intel_iommu; |
| 16 | struct dmar_domain; | ||
| 17 | struct root_entry; | ||
| 115 | 18 | ||
| 116 | struct dmar_domain { | ||
| 117 | int id; /* domain id */ | ||
| 118 | struct intel_iommu *iommu; /* back pointer to owning iommu */ | ||
| 119 | |||
| 120 | struct list_head devices; /* all devices' list */ | ||
| 121 | struct iova_domain iovad; /* iova's that belong to this domain */ | ||
| 122 | |||
| 123 | struct dma_pte *pgd; /* virtual address */ | ||
| 124 | spinlock_t mapping_lock; /* page table lock */ | ||
| 125 | int gaw; /* max guest address width */ | ||
| 126 | |||
| 127 | /* adjusted guest address width, 0 is level 2 30-bit */ | ||
| 128 | int agaw; | ||
| 129 | |||
| 130 | #define DOMAIN_FLAG_MULTIPLE_DEVICES 1 | ||
| 131 | int flags; | ||
| 132 | }; | ||
| 133 | |||
| 134 | /* PCI domain-device relationship */ | ||
| 135 | struct device_domain_info { | ||
| 136 | struct list_head link; /* link to domain siblings */ | ||
| 137 | struct list_head global; /* link to global list */ | ||
| 138 | u8 bus; /* PCI bus numer */ | ||
| 139 | u8 devfn; /* PCI devfn number */ | ||
| 140 | struct pci_dev *dev; /* it's NULL for PCIE-to-PCI bridge */ | ||
| 141 | struct dmar_domain *domain; /* pointer to domain */ | ||
| 142 | }; | ||
| 143 | |||
| 144 | extern int init_dmars(void); | ||
| 145 | extern void free_dmar_iommu(struct intel_iommu *iommu); | 19 | extern void free_dmar_iommu(struct intel_iommu *iommu); |
| 20 | extern int iommu_calculate_agaw(struct intel_iommu *iommu); | ||
| 146 | 21 | ||
| 147 | extern int dmar_disabled; | 22 | extern int dmar_disabled; |
| 148 | 23 | ||
| 149 | #ifndef CONFIG_DMAR_GFX_WA | ||
| 150 | static inline void iommu_prepare_gfx_mapping(void) | ||
| 151 | { | ||
| 152 | return; | ||
| 153 | } | ||
| 154 | #endif /* !CONFIG_DMAR_GFX_WA */ | ||
| 155 | |||
| 156 | #endif | 24 | #endif |
diff --git a/include/linux/dmar.h b/include/linux/dmar.h index f1984fc3e06d..f28440784cf0 100644 --- a/include/linux/dmar.h +++ b/include/linux/dmar.h | |||
| @@ -144,7 +144,6 @@ struct dmar_rmrr_unit { | |||
| 144 | list_for_each_entry(rmrr, &dmar_rmrr_units, list) | 144 | list_for_each_entry(rmrr, &dmar_rmrr_units, list) |
| 145 | /* Intel DMAR initialization functions */ | 145 | /* Intel DMAR initialization functions */ |
| 146 | extern int intel_iommu_init(void); | 146 | extern int intel_iommu_init(void); |
| 147 | extern int dmar_disabled; | ||
| 148 | #else | 147 | #else |
| 149 | static inline int intel_iommu_init(void) | 148 | static inline int intel_iommu_init(void) |
| 150 | { | 149 | { |
diff --git a/include/linux/dvb/frontend.h b/include/linux/dvb/frontend.h index 79a8ed8e6a7d..55026b1a40bd 100644 --- a/include/linux/dvb/frontend.h +++ b/include/linux/dvb/frontend.h | |||
| @@ -62,10 +62,11 @@ typedef enum fe_caps { | |||
| 62 | FE_CAN_HIERARCHY_AUTO = 0x100000, | 62 | FE_CAN_HIERARCHY_AUTO = 0x100000, |
| 63 | FE_CAN_8VSB = 0x200000, | 63 | FE_CAN_8VSB = 0x200000, |
| 64 | FE_CAN_16VSB = 0x400000, | 64 | FE_CAN_16VSB = 0x400000, |
| 65 | FE_HAS_EXTENDED_CAPS = 0x800000, // We need more bitspace for newer APIs, indicate this. | 65 | FE_HAS_EXTENDED_CAPS = 0x800000, /* We need more bitspace for newer APIs, indicate this. */ |
| 66 | FE_NEEDS_BENDING = 0x20000000, // not supported anymore, don't use (frontend requires frequency bending) | 66 | FE_CAN_2G_MODULATION = 0x10000000, /* frontend supports "2nd generation modulation" (DVB-S2) */ |
| 67 | FE_CAN_RECOVER = 0x40000000, // frontend can recover from a cable unplug automatically | 67 | FE_NEEDS_BENDING = 0x20000000, /* not supported anymore, don't use (frontend requires frequency bending) */ |
| 68 | FE_CAN_MUTE_TS = 0x80000000 // frontend can stop spurious TS data output | 68 | FE_CAN_RECOVER = 0x40000000, /* frontend can recover from a cable unplug automatically */ |
| 69 | FE_CAN_MUTE_TS = 0x80000000 /* frontend can stop spurious TS data output */ | ||
| 69 | } fe_caps_t; | 70 | } fe_caps_t; |
| 70 | 71 | ||
| 71 | 72 | ||
| @@ -121,15 +122,15 @@ typedef enum fe_sec_mini_cmd { | |||
| 121 | 122 | ||
| 122 | 123 | ||
| 123 | typedef enum fe_status { | 124 | typedef enum fe_status { |
| 124 | FE_HAS_SIGNAL = 0x01, /* found something above the noise level */ | 125 | FE_HAS_SIGNAL = 0x01, /* found something above the noise level */ |
| 125 | FE_HAS_CARRIER = 0x02, /* found a DVB signal */ | 126 | FE_HAS_CARRIER = 0x02, /* found a DVB signal */ |
| 126 | FE_HAS_VITERBI = 0x04, /* FEC is stable */ | 127 | FE_HAS_VITERBI = 0x04, /* FEC is stable */ |
| 127 | FE_HAS_SYNC = 0x08, /* found sync bytes */ | 128 | FE_HAS_SYNC = 0x08, /* found sync bytes */ |
| 128 | FE_HAS_LOCK = 0x10, /* everything's working... */ | 129 | FE_HAS_LOCK = 0x10, /* everything's working... */ |
| 129 | FE_TIMEDOUT = 0x20, /* no lock within the last ~2 seconds */ | 130 | FE_TIMEDOUT = 0x20, /* no lock within the last ~2 seconds */ |
| 130 | FE_REINIT = 0x40 /* frontend was reinitialized, */ | 131 | FE_REINIT = 0x40 /* frontend was reinitialized, */ |
| 131 | } fe_status_t; /* application is recommended to reset */ | 132 | } fe_status_t; /* application is recommended to reset */ |
| 132 | /* DiSEqC, tone and parameters */ | 133 | /* DiSEqC, tone and parameters */ |
| 133 | 134 | ||
| 134 | typedef enum fe_spectral_inversion { | 135 | typedef enum fe_spectral_inversion { |
| 135 | INVERSION_OFF, | 136 | INVERSION_OFF, |
diff --git a/include/linux/intel-iommu.h b/include/linux/intel-iommu.h index 3d017cfd245b..c4f6c101dbcd 100644 --- a/include/linux/intel-iommu.h +++ b/include/linux/intel-iommu.h | |||
| @@ -23,8 +23,6 @@ | |||
| 23 | #define _INTEL_IOMMU_H_ | 23 | #define _INTEL_IOMMU_H_ |
| 24 | 24 | ||
| 25 | #include <linux/types.h> | 25 | #include <linux/types.h> |
| 26 | #include <linux/msi.h> | ||
| 27 | #include <linux/sysdev.h> | ||
| 28 | #include <linux/iova.h> | 26 | #include <linux/iova.h> |
| 29 | #include <linux/io.h> | 27 | #include <linux/io.h> |
| 30 | #include <linux/dma_remapping.h> | 28 | #include <linux/dma_remapping.h> |
| @@ -289,10 +287,10 @@ struct intel_iommu { | |||
| 289 | void __iomem *reg; /* Pointer to hardware regs, virtual addr */ | 287 | void __iomem *reg; /* Pointer to hardware regs, virtual addr */ |
| 290 | u64 cap; | 288 | u64 cap; |
| 291 | u64 ecap; | 289 | u64 ecap; |
| 292 | int seg; | ||
| 293 | u32 gcmd; /* Holds TE, EAFL. Don't need SRTP, SFL, WBF */ | 290 | u32 gcmd; /* Holds TE, EAFL. Don't need SRTP, SFL, WBF */ |
| 294 | spinlock_t register_lock; /* protect register handling */ | 291 | spinlock_t register_lock; /* protect register handling */ |
| 295 | int seq_id; /* sequence id of the iommu */ | 292 | int seq_id; /* sequence id of the iommu */ |
| 293 | int agaw; /* agaw of this iommu */ | ||
| 296 | 294 | ||
| 297 | #ifdef CONFIG_DMAR | 295 | #ifdef CONFIG_DMAR |
| 298 | unsigned long *domain_ids; /* bitmap of domains */ | 296 | unsigned long *domain_ids; /* bitmap of domains */ |
| @@ -302,8 +300,6 @@ struct intel_iommu { | |||
| 302 | 300 | ||
| 303 | unsigned int irq; | 301 | unsigned int irq; |
| 304 | unsigned char name[7]; /* Device Name */ | 302 | unsigned char name[7]; /* Device Name */ |
| 305 | struct msi_msg saved_msg; | ||
| 306 | struct sys_device sysdev; | ||
| 307 | struct iommu_flush flush; | 303 | struct iommu_flush flush; |
| 308 | #endif | 304 | #endif |
| 309 | struct q_inval *qi; /* Queued invalidation info */ | 305 | struct q_inval *qi; /* Queued invalidation info */ |
| @@ -334,25 +330,6 @@ extern int qi_flush_iotlb(struct intel_iommu *iommu, u16 did, u64 addr, | |||
| 334 | 330 | ||
| 335 | extern void qi_submit_sync(struct qi_desc *desc, struct intel_iommu *iommu); | 331 | extern void qi_submit_sync(struct qi_desc *desc, struct intel_iommu *iommu); |
| 336 | 332 | ||
| 337 | void intel_iommu_domain_exit(struct dmar_domain *domain); | ||
| 338 | struct dmar_domain *intel_iommu_domain_alloc(struct pci_dev *pdev); | ||
| 339 | int intel_iommu_context_mapping(struct dmar_domain *domain, | ||
| 340 | struct pci_dev *pdev); | ||
| 341 | int intel_iommu_page_mapping(struct dmar_domain *domain, dma_addr_t iova, | ||
| 342 | u64 hpa, size_t size, int prot); | ||
| 343 | void intel_iommu_detach_dev(struct dmar_domain *domain, u8 bus, u8 devfn); | ||
| 344 | struct dmar_domain *intel_iommu_find_domain(struct pci_dev *pdev); | ||
| 345 | u64 intel_iommu_iova_to_pfn(struct dmar_domain *domain, u64 iova); | ||
| 346 | |||
| 347 | #ifdef CONFIG_DMAR | ||
| 348 | int intel_iommu_found(void); | ||
| 349 | #else /* CONFIG_DMAR */ | ||
| 350 | static inline int intel_iommu_found(void) | ||
| 351 | { | ||
| 352 | return 0; | ||
| 353 | } | ||
| 354 | #endif /* CONFIG_DMAR */ | ||
| 355 | |||
| 356 | extern void *intel_alloc_coherent(struct device *, size_t, dma_addr_t *, gfp_t); | 333 | extern void *intel_alloc_coherent(struct device *, size_t, dma_addr_t *, gfp_t); |
| 357 | extern void intel_free_coherent(struct device *, size_t, void *, dma_addr_t); | 334 | extern void intel_free_coherent(struct device *, size_t, void *, dma_addr_t); |
| 358 | extern dma_addr_t intel_map_single(struct device *, phys_addr_t, size_t, int); | 335 | extern dma_addr_t intel_map_single(struct device *, phys_addr_t, size_t, int); |
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h index 990355fbc54e..0702c4d7bdf0 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h | |||
| @@ -109,7 +109,7 @@ extern void enable_irq(unsigned int irq); | |||
| 109 | 109 | ||
| 110 | #if defined(CONFIG_SMP) && defined(CONFIG_GENERIC_HARDIRQS) | 110 | #if defined(CONFIG_SMP) && defined(CONFIG_GENERIC_HARDIRQS) |
| 111 | 111 | ||
| 112 | extern cpumask_t irq_default_affinity; | 112 | extern cpumask_var_t irq_default_affinity; |
| 113 | 113 | ||
| 114 | extern int irq_set_affinity(unsigned int irq, const struct cpumask *cpumask); | 114 | extern int irq_set_affinity(unsigned int irq, const struct cpumask *cpumask); |
| 115 | extern int irq_can_set_affinity(unsigned int irq); | 115 | extern int irq_can_set_affinity(unsigned int irq); |
diff --git a/include/linux/iommu.h b/include/linux/iommu.h new file mode 100644 index 000000000000..8a7bfb1b6ca0 --- /dev/null +++ b/include/linux/iommu.h | |||
| @@ -0,0 +1,112 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2007-2008 Advanced Micro Devices, Inc. | ||
| 3 | * Author: Joerg Roedel <joerg.roedel@amd.com> | ||
| 4 | * | ||
| 5 | * This program is free software; you can redistribute it and/or modify it | ||
| 6 | * under the terms of the GNU General Public License version 2 as published | ||
| 7 | * by the Free Software Foundation. | ||
| 8 | * | ||
| 9 | * This program is distributed in the hope that it will be useful, | ||
| 10 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 11 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 12 | * GNU General Public License for more details. | ||
| 13 | * | ||
| 14 | * You should have received a copy of the GNU General Public License | ||
| 15 | * along with this program; if not, write to the Free Software | ||
| 16 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | ||
| 17 | */ | ||
| 18 | |||
| 19 | #ifndef __LINUX_IOMMU_H | ||
| 20 | #define __LINUX_IOMMU_H | ||
| 21 | |||
| 22 | #define IOMMU_READ (1) | ||
| 23 | #define IOMMU_WRITE (2) | ||
| 24 | |||
| 25 | struct device; | ||
| 26 | |||
| 27 | struct iommu_domain { | ||
| 28 | void *priv; | ||
| 29 | }; | ||
| 30 | |||
| 31 | struct iommu_ops { | ||
| 32 | int (*domain_init)(struct iommu_domain *domain); | ||
| 33 | void (*domain_destroy)(struct iommu_domain *domain); | ||
| 34 | int (*attach_dev)(struct iommu_domain *domain, struct device *dev); | ||
| 35 | void (*detach_dev)(struct iommu_domain *domain, struct device *dev); | ||
| 36 | int (*map)(struct iommu_domain *domain, unsigned long iova, | ||
| 37 | phys_addr_t paddr, size_t size, int prot); | ||
| 38 | void (*unmap)(struct iommu_domain *domain, unsigned long iova, | ||
| 39 | size_t size); | ||
| 40 | phys_addr_t (*iova_to_phys)(struct iommu_domain *domain, | ||
| 41 | unsigned long iova); | ||
| 42 | }; | ||
| 43 | |||
| 44 | #ifdef CONFIG_IOMMU_API | ||
| 45 | |||
| 46 | extern void register_iommu(struct iommu_ops *ops); | ||
| 47 | extern bool iommu_found(void); | ||
| 48 | extern struct iommu_domain *iommu_domain_alloc(void); | ||
| 49 | extern void iommu_domain_free(struct iommu_domain *domain); | ||
| 50 | extern int iommu_attach_device(struct iommu_domain *domain, | ||
| 51 | struct device *dev); | ||
| 52 | extern void iommu_detach_device(struct iommu_domain *domain, | ||
| 53 | struct device *dev); | ||
| 54 | extern int iommu_map_range(struct iommu_domain *domain, unsigned long iova, | ||
| 55 | phys_addr_t paddr, size_t size, int prot); | ||
| 56 | extern void iommu_unmap_range(struct iommu_domain *domain, unsigned long iova, | ||
| 57 | size_t size); | ||
| 58 | extern phys_addr_t iommu_iova_to_phys(struct iommu_domain *domain, | ||
| 59 | unsigned long iova); | ||
| 60 | |||
| 61 | #else /* CONFIG_IOMMU_API */ | ||
| 62 | |||
| 63 | static inline void register_iommu(struct iommu_ops *ops) | ||
| 64 | { | ||
| 65 | } | ||
| 66 | |||
| 67 | static inline bool iommu_found(void) | ||
| 68 | { | ||
| 69 | return false; | ||
| 70 | } | ||
| 71 | |||
| 72 | static inline struct iommu_domain *iommu_domain_alloc(void) | ||
| 73 | { | ||
| 74 | return NULL; | ||
| 75 | } | ||
| 76 | |||
| 77 | static inline void iommu_domain_free(struct iommu_domain *domain) | ||
| 78 | { | ||
| 79 | } | ||
| 80 | |||
| 81 | static inline int iommu_attach_device(struct iommu_domain *domain, | ||
| 82 | struct device *dev) | ||
| 83 | { | ||
| 84 | return -ENODEV; | ||
| 85 | } | ||
| 86 | |||
| 87 | static inline void iommu_detach_device(struct iommu_domain *domain, | ||
| 88 | struct device *dev) | ||
| 89 | { | ||
| 90 | } | ||
| 91 | |||
| 92 | static inline int iommu_map_range(struct iommu_domain *domain, | ||
| 93 | unsigned long iova, phys_addr_t paddr, | ||
| 94 | size_t size, int prot) | ||
| 95 | { | ||
| 96 | return -ENODEV; | ||
| 97 | } | ||
| 98 | |||
| 99 | static inline void iommu_unmap_range(struct iommu_domain *domain, | ||
| 100 | unsigned long iova, size_t size) | ||
| 101 | { | ||
| 102 | } | ||
| 103 | |||
| 104 | static inline phys_addr_t iommu_iova_to_phys(struct iommu_domain *domain, | ||
| 105 | unsigned long iova) | ||
| 106 | { | ||
| 107 | return 0; | ||
| 108 | } | ||
| 109 | |||
| 110 | #endif /* CONFIG_IOMMU_API */ | ||
| 111 | |||
| 112 | #endif /* __LINUX_IOMMU_H */ | ||
diff --git a/include/linux/kernel_stat.h b/include/linux/kernel_stat.h index 4ee4b3d2316f..570d20413119 100644 --- a/include/linux/kernel_stat.h +++ b/include/linux/kernel_stat.h | |||
| @@ -79,10 +79,13 @@ static inline unsigned int kstat_irqs(unsigned int irq) | |||
| 79 | } | 79 | } |
| 80 | 80 | ||
| 81 | extern unsigned long long task_delta_exec(struct task_struct *); | 81 | extern unsigned long long task_delta_exec(struct task_struct *); |
| 82 | extern void account_user_time(struct task_struct *, cputime_t); | 82 | extern void account_user_time(struct task_struct *, cputime_t, cputime_t); |
| 83 | extern void account_user_time_scaled(struct task_struct *, cputime_t); | 83 | extern void account_system_time(struct task_struct *, int, cputime_t, cputime_t); |
| 84 | extern void account_system_time(struct task_struct *, int, cputime_t); | 84 | extern void account_steal_time(cputime_t); |
| 85 | extern void account_system_time_scaled(struct task_struct *, cputime_t); | 85 | extern void account_idle_time(cputime_t); |
| 86 | extern void account_steal_time(struct task_struct *, cputime_t); | 86 | |
| 87 | extern void account_process_tick(struct task_struct *, int user); | ||
| 88 | extern void account_steal_ticks(unsigned long ticks); | ||
| 89 | extern void account_idle_ticks(unsigned long ticks); | ||
| 87 | 90 | ||
| 88 | #endif /* _LINUX_KERNEL_STAT_H */ | 91 | #endif /* _LINUX_KERNEL_STAT_H */ |
diff --git a/include/linux/kvm_host.h b/include/linux/kvm_host.h index eafabd5c66b2..ec49d0be7f52 100644 --- a/include/linux/kvm_host.h +++ b/include/linux/kvm_host.h | |||
| @@ -316,6 +316,7 @@ struct kvm_assigned_dev_kernel { | |||
| 316 | #define KVM_ASSIGNED_DEV_HOST_MSI (1 << 9) | 316 | #define KVM_ASSIGNED_DEV_HOST_MSI (1 << 9) |
| 317 | unsigned long irq_requested_type; | 317 | unsigned long irq_requested_type; |
| 318 | int irq_source_id; | 318 | int irq_source_id; |
| 319 | int flags; | ||
| 319 | struct pci_dev *dev; | 320 | struct pci_dev *dev; |
| 320 | struct kvm *kvm; | 321 | struct kvm *kvm; |
| 321 | }; | 322 | }; |
| @@ -327,13 +328,16 @@ void kvm_unregister_irq_ack_notifier(struct kvm_irq_ack_notifier *kian); | |||
| 327 | int kvm_request_irq_source_id(struct kvm *kvm); | 328 | int kvm_request_irq_source_id(struct kvm *kvm); |
| 328 | void kvm_free_irq_source_id(struct kvm *kvm, int irq_source_id); | 329 | void kvm_free_irq_source_id(struct kvm *kvm, int irq_source_id); |
| 329 | 330 | ||
| 330 | #ifdef CONFIG_DMAR | 331 | #ifdef CONFIG_IOMMU_API |
| 331 | int kvm_iommu_map_pages(struct kvm *kvm, gfn_t base_gfn, | 332 | int kvm_iommu_map_pages(struct kvm *kvm, gfn_t base_gfn, |
| 332 | unsigned long npages); | 333 | unsigned long npages); |
| 333 | int kvm_iommu_map_guest(struct kvm *kvm, | 334 | int kvm_iommu_map_guest(struct kvm *kvm); |
| 334 | struct kvm_assigned_dev_kernel *assigned_dev); | ||
| 335 | int kvm_iommu_unmap_guest(struct kvm *kvm); | 335 | int kvm_iommu_unmap_guest(struct kvm *kvm); |
| 336 | #else /* CONFIG_DMAR */ | 336 | int kvm_assign_device(struct kvm *kvm, |
| 337 | struct kvm_assigned_dev_kernel *assigned_dev); | ||
| 338 | int kvm_deassign_device(struct kvm *kvm, | ||
| 339 | struct kvm_assigned_dev_kernel *assigned_dev); | ||
| 340 | #else /* CONFIG_IOMMU_API */ | ||
| 337 | static inline int kvm_iommu_map_pages(struct kvm *kvm, | 341 | static inline int kvm_iommu_map_pages(struct kvm *kvm, |
| 338 | gfn_t base_gfn, | 342 | gfn_t base_gfn, |
| 339 | unsigned long npages) | 343 | unsigned long npages) |
| @@ -341,9 +345,7 @@ static inline int kvm_iommu_map_pages(struct kvm *kvm, | |||
| 341 | return 0; | 345 | return 0; |
| 342 | } | 346 | } |
| 343 | 347 | ||
| 344 | static inline int kvm_iommu_map_guest(struct kvm *kvm, | 348 | static inline int kvm_iommu_map_guest(struct kvm *kvm) |
| 345 | struct kvm_assigned_dev_kernel | ||
| 346 | *assigned_dev) | ||
| 347 | { | 349 | { |
| 348 | return -ENODEV; | 350 | return -ENODEV; |
| 349 | } | 351 | } |
| @@ -352,7 +354,19 @@ static inline int kvm_iommu_unmap_guest(struct kvm *kvm) | |||
| 352 | { | 354 | { |
| 353 | return 0; | 355 | return 0; |
| 354 | } | 356 | } |
| 355 | #endif /* CONFIG_DMAR */ | 357 | |
| 358 | static inline int kvm_assign_device(struct kvm *kvm, | ||
| 359 | struct kvm_assigned_dev_kernel *assigned_dev) | ||
| 360 | { | ||
| 361 | return 0; | ||
| 362 | } | ||
| 363 | |||
| 364 | static inline int kvm_deassign_device(struct kvm *kvm, | ||
| 365 | struct kvm_assigned_dev_kernel *assigned_dev) | ||
| 366 | { | ||
| 367 | return 0; | ||
| 368 | } | ||
| 369 | #endif /* CONFIG_IOMMU_API */ | ||
| 356 | 370 | ||
| 357 | static inline void kvm_guest_enter(void) | 371 | static inline void kvm_guest_enter(void) |
| 358 | { | 372 | { |
diff --git a/include/linux/mmc/core.h b/include/linux/mmc/core.h index 143cebf0586f..7ac8b500d55c 100644 --- a/include/linux/mmc/core.h +++ b/include/linux/mmc/core.h | |||
| @@ -151,4 +151,6 @@ static inline void mmc_claim_host(struct mmc_host *host) | |||
| 151 | __mmc_claim_host(host, NULL); | 151 | __mmc_claim_host(host, NULL); |
| 152 | } | 152 | } |
| 153 | 153 | ||
| 154 | extern u32 mmc_vddrange_to_ocrmask(int vdd_min, int vdd_max); | ||
| 155 | |||
| 154 | #endif | 156 | #endif |
diff --git a/include/linux/mmc/host.h b/include/linux/mmc/host.h index f842f234e44f..4e457256bd33 100644 --- a/include/linux/mmc/host.h +++ b/include/linux/mmc/host.h | |||
| @@ -41,6 +41,7 @@ struct mmc_ios { | |||
| 41 | 41 | ||
| 42 | #define MMC_BUS_WIDTH_1 0 | 42 | #define MMC_BUS_WIDTH_1 0 |
| 43 | #define MMC_BUS_WIDTH_4 2 | 43 | #define MMC_BUS_WIDTH_4 2 |
| 44 | #define MMC_BUS_WIDTH_8 3 | ||
| 44 | 45 | ||
| 45 | unsigned char timing; /* timing specification used */ | 46 | unsigned char timing; /* timing specification used */ |
| 46 | 47 | ||
| @@ -116,6 +117,7 @@ struct mmc_host { | |||
| 116 | #define MMC_CAP_SDIO_IRQ (1 << 3) /* Can signal pending SDIO IRQs */ | 117 | #define MMC_CAP_SDIO_IRQ (1 << 3) /* Can signal pending SDIO IRQs */ |
| 117 | #define MMC_CAP_SPI (1 << 4) /* Talks only SPI protocols */ | 118 | #define MMC_CAP_SPI (1 << 4) /* Talks only SPI protocols */ |
| 118 | #define MMC_CAP_NEEDS_POLL (1 << 5) /* Needs polling for card-detection */ | 119 | #define MMC_CAP_NEEDS_POLL (1 << 5) /* Needs polling for card-detection */ |
| 120 | #define MMC_CAP_8_BIT_DATA (1 << 6) /* Can the host do 8 bit transfers */ | ||
| 119 | 121 | ||
| 120 | /* host specific block data */ | 122 | /* host specific block data */ |
| 121 | unsigned int max_seg_size; /* see blk_queue_max_segment_size */ | 123 | unsigned int max_seg_size; /* see blk_queue_max_segment_size */ |
diff --git a/include/linux/random.h b/include/linux/random.h index adbf3bd3c6b3..407ea3646f8f 100644 --- a/include/linux/random.h +++ b/include/linux/random.h | |||
| @@ -45,56 +45,6 @@ struct rand_pool_info { | |||
| 45 | 45 | ||
| 46 | extern void rand_initialize_irq(int irq); | 46 | extern void rand_initialize_irq(int irq); |
| 47 | 47 | ||
| 48 | struct timer_rand_state; | ||
| 49 | #ifndef CONFIG_SPARSE_IRQ | ||
| 50 | |||
| 51 | extern struct timer_rand_state *irq_timer_state[]; | ||
| 52 | |||
| 53 | static inline struct timer_rand_state *get_timer_rand_state(unsigned int irq) | ||
| 54 | { | ||
| 55 | if (irq >= nr_irqs) | ||
| 56 | return NULL; | ||
| 57 | |||
| 58 | return irq_timer_state[irq]; | ||
| 59 | } | ||
| 60 | |||
| 61 | static inline void set_timer_rand_state(unsigned int irq, struct timer_rand_state *state) | ||
| 62 | { | ||
| 63 | if (irq >= nr_irqs) | ||
| 64 | return; | ||
| 65 | |||
| 66 | irq_timer_state[irq] = state; | ||
| 67 | } | ||
| 68 | |||
| 69 | #else | ||
| 70 | |||
| 71 | #include <linux/irq.h> | ||
| 72 | static inline struct timer_rand_state *get_timer_rand_state(unsigned int irq) | ||
| 73 | { | ||
| 74 | struct irq_desc *desc; | ||
| 75 | |||
| 76 | desc = irq_to_desc(irq); | ||
| 77 | |||
| 78 | if (!desc) | ||
| 79 | return NULL; | ||
| 80 | |||
| 81 | return desc->timer_rand_state; | ||
| 82 | } | ||
| 83 | |||
| 84 | static inline void set_timer_rand_state(unsigned int irq, struct timer_rand_state *state) | ||
| 85 | { | ||
| 86 | struct irq_desc *desc; | ||
| 87 | |||
| 88 | desc = irq_to_desc(irq); | ||
| 89 | |||
| 90 | if (!desc) | ||
| 91 | return; | ||
| 92 | |||
| 93 | desc->timer_rand_state = state; | ||
| 94 | } | ||
| 95 | #endif | ||
| 96 | |||
| 97 | |||
| 98 | extern void add_input_randomness(unsigned int type, unsigned int code, | 48 | extern void add_input_randomness(unsigned int type, unsigned int code, |
| 99 | unsigned int value); | 49 | unsigned int value); |
| 100 | extern void add_interrupt_randomness(int irq); | 50 | extern void add_interrupt_randomness(int irq); |
diff --git a/include/linux/rcuclassic.h b/include/linux/rcuclassic.h index 301dda829e37..f3f697df1d71 100644 --- a/include/linux/rcuclassic.h +++ b/include/linux/rcuclassic.h | |||
| @@ -59,8 +59,8 @@ struct rcu_ctrlblk { | |||
| 59 | int signaled; | 59 | int signaled; |
| 60 | 60 | ||
| 61 | spinlock_t lock ____cacheline_internodealigned_in_smp; | 61 | spinlock_t lock ____cacheline_internodealigned_in_smp; |
| 62 | cpumask_t cpumask; /* CPUs that need to switch in order */ | 62 | DECLARE_BITMAP(cpumask, NR_CPUS); /* CPUs that need to switch for */ |
| 63 | /* for current batch to proceed. */ | 63 | /* current batch to proceed. */ |
| 64 | } ____cacheline_internodealigned_in_smp; | 64 | } ____cacheline_internodealigned_in_smp; |
| 65 | 65 | ||
| 66 | /* Is batch a before batch b ? */ | 66 | /* Is batch a before batch b ? */ |
diff --git a/include/linux/sched.h b/include/linux/sched.h index 158d53d07765..38a3f4b15394 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
| @@ -284,7 +284,6 @@ long io_schedule_timeout(long timeout); | |||
| 284 | 284 | ||
| 285 | extern void cpu_init (void); | 285 | extern void cpu_init (void); |
| 286 | extern void trap_init(void); | 286 | extern void trap_init(void); |
| 287 | extern void account_process_tick(struct task_struct *task, int user); | ||
| 288 | extern void update_process_times(int user); | 287 | extern void update_process_times(int user); |
| 289 | extern void scheduler_tick(void); | 288 | extern void scheduler_tick(void); |
| 290 | 289 | ||
diff --git a/include/linux/seq_file.h b/include/linux/seq_file.h index b3dfa72f13b9..40ea5058c2ec 100644 --- a/include/linux/seq_file.h +++ b/include/linux/seq_file.h | |||
| @@ -50,10 +50,11 @@ int seq_path(struct seq_file *, struct path *, char *); | |||
| 50 | int seq_dentry(struct seq_file *, struct dentry *, char *); | 50 | int seq_dentry(struct seq_file *, struct dentry *, char *); |
| 51 | int seq_path_root(struct seq_file *m, struct path *path, struct path *root, | 51 | int seq_path_root(struct seq_file *m, struct path *path, struct path *root, |
| 52 | char *esc); | 52 | char *esc); |
| 53 | int seq_bitmap(struct seq_file *m, unsigned long *bits, unsigned int nr_bits); | 53 | int seq_bitmap(struct seq_file *m, const unsigned long *bits, |
| 54 | static inline int seq_cpumask(struct seq_file *m, cpumask_t *mask) | 54 | unsigned int nr_bits); |
| 55 | static inline int seq_cpumask(struct seq_file *m, const struct cpumask *mask) | ||
| 55 | { | 56 | { |
| 56 | return seq_bitmap(m, mask->bits, NR_CPUS); | 57 | return seq_bitmap(m, mask->bits, nr_cpu_ids); |
| 57 | } | 58 | } |
| 58 | 59 | ||
| 59 | static inline int seq_nodemask(struct seq_file *m, nodemask_t *mask) | 60 | static inline int seq_nodemask(struct seq_file *m, nodemask_t *mask) |
diff --git a/include/linux/smp.h b/include/linux/smp.h index 6e7ba16ff454..b82466968101 100644 --- a/include/linux/smp.h +++ b/include/linux/smp.h | |||
| @@ -21,6 +21,9 @@ struct call_single_data { | |||
| 21 | u16 priv; | 21 | u16 priv; |
| 22 | }; | 22 | }; |
| 23 | 23 | ||
| 24 | /* total number of cpus in this system (may exceed NR_CPUS) */ | ||
| 25 | extern unsigned int total_cpus; | ||
| 26 | |||
| 24 | #ifdef CONFIG_SMP | 27 | #ifdef CONFIG_SMP |
| 25 | 28 | ||
| 26 | #include <linux/preempt.h> | 29 | #include <linux/preempt.h> |
| @@ -64,15 +67,16 @@ extern void smp_cpus_done(unsigned int max_cpus); | |||
| 64 | * Call a function on all other processors | 67 | * Call a function on all other processors |
| 65 | */ | 68 | */ |
| 66 | int smp_call_function(void(*func)(void *info), void *info, int wait); | 69 | int smp_call_function(void(*func)(void *info), void *info, int wait); |
| 67 | /* Deprecated: use smp_call_function_many() which uses a cpumask ptr. */ | 70 | void smp_call_function_many(const struct cpumask *mask, |
| 68 | int smp_call_function_mask(cpumask_t mask, void(*func)(void *info), void *info, | 71 | void (*func)(void *info), void *info, bool wait); |
| 69 | int wait); | ||
| 70 | 72 | ||
| 71 | static inline void smp_call_function_many(const struct cpumask *mask, | 73 | /* Deprecated: Use smp_call_function_many which takes a pointer to the mask. */ |
| 72 | void (*func)(void *info), void *info, | 74 | static inline int |
| 73 | int wait) | 75 | smp_call_function_mask(cpumask_t mask, void(*func)(void *info), void *info, |
| 76 | int wait) | ||
| 74 | { | 77 | { |
| 75 | smp_call_function_mask(*mask, func, info, wait); | 78 | smp_call_function_many(&mask, func, info, wait); |
| 79 | return 0; | ||
| 76 | } | 80 | } |
| 77 | 81 | ||
| 78 | int smp_call_function_single(int cpuid, void (*func) (void *info), void *info, | 82 | int smp_call_function_single(int cpuid, void (*func) (void *info), void *info, |
diff --git a/include/linux/spi/mmc_spi.h b/include/linux/spi/mmc_spi.h index a3626aedaec9..0f4eb165f254 100644 --- a/include/linux/spi/mmc_spi.h +++ b/include/linux/spi/mmc_spi.h | |||
| @@ -1,9 +1,10 @@ | |||
| 1 | #ifndef __LINUX_SPI_MMC_SPI_H | 1 | #ifndef __LINUX_SPI_MMC_SPI_H |
| 2 | #define __LINUX_SPI_MMC_SPI_H | 2 | #define __LINUX_SPI_MMC_SPI_H |
| 3 | 3 | ||
| 4 | #include <linux/device.h> | ||
| 5 | #include <linux/spi/spi.h> | ||
| 4 | #include <linux/interrupt.h> | 6 | #include <linux/interrupt.h> |
| 5 | 7 | ||
| 6 | struct device; | ||
| 7 | struct mmc_host; | 8 | struct mmc_host; |
| 8 | 9 | ||
| 9 | /* Put this in platform_data of a device being used to manage an MMC/SD | 10 | /* Put this in platform_data of a device being used to manage an MMC/SD |
| @@ -41,4 +42,16 @@ struct mmc_spi_platform_data { | |||
| 41 | void (*setpower)(struct device *, unsigned int maskval); | 42 | void (*setpower)(struct device *, unsigned int maskval); |
| 42 | }; | 43 | }; |
| 43 | 44 | ||
| 45 | #ifdef CONFIG_OF | ||
| 46 | extern struct mmc_spi_platform_data *mmc_spi_get_pdata(struct spi_device *spi); | ||
| 47 | extern void mmc_spi_put_pdata(struct spi_device *spi); | ||
| 48 | #else | ||
| 49 | static inline struct mmc_spi_platform_data * | ||
| 50 | mmc_spi_get_pdata(struct spi_device *spi) | ||
| 51 | { | ||
| 52 | return spi->dev.platform_data; | ||
| 53 | } | ||
| 54 | static inline void mmc_spi_put_pdata(struct spi_device *spi) {} | ||
| 55 | #endif /* CONFIG_OF */ | ||
| 56 | |||
| 44 | #endif /* __LINUX_SPI_MMC_SPI_H */ | 57 | #endif /* __LINUX_SPI_MMC_SPI_H */ |
diff --git a/include/linux/stop_machine.h b/include/linux/stop_machine.h index faf1519b5adc..74d59a641362 100644 --- a/include/linux/stop_machine.h +++ b/include/linux/stop_machine.h | |||
| @@ -23,7 +23,7 @@ | |||
| 23 | * | 23 | * |
| 24 | * This can be thought of as a very heavy write lock, equivalent to | 24 | * This can be thought of as a very heavy write lock, equivalent to |
| 25 | * grabbing every spinlock in the kernel. */ | 25 | * grabbing every spinlock in the kernel. */ |
| 26 | int stop_machine(int (*fn)(void *), void *data, const cpumask_t *cpus); | 26 | int stop_machine(int (*fn)(void *), void *data, const struct cpumask *cpus); |
| 27 | 27 | ||
| 28 | /** | 28 | /** |
| 29 | * __stop_machine: freeze the machine on all CPUs and run this function | 29 | * __stop_machine: freeze the machine on all CPUs and run this function |
| @@ -34,11 +34,11 @@ int stop_machine(int (*fn)(void *), void *data, const cpumask_t *cpus); | |||
| 34 | * Description: This is a special version of the above, which assumes cpus | 34 | * Description: This is a special version of the above, which assumes cpus |
| 35 | * won't come or go while it's being called. Used by hotplug cpu. | 35 | * won't come or go while it's being called. Used by hotplug cpu. |
| 36 | */ | 36 | */ |
| 37 | int __stop_machine(int (*fn)(void *), void *data, const cpumask_t *cpus); | 37 | int __stop_machine(int (*fn)(void *), void *data, const struct cpumask *cpus); |
| 38 | #else | 38 | #else |
| 39 | 39 | ||
| 40 | static inline int stop_machine(int (*fn)(void *), void *data, | 40 | static inline int stop_machine(int (*fn)(void *), void *data, |
| 41 | const cpumask_t *cpus) | 41 | const struct cpumask *cpus) |
| 42 | { | 42 | { |
| 43 | int ret; | 43 | int ret; |
| 44 | local_irq_disable(); | 44 | local_irq_disable(); |
diff --git a/include/linux/threads.h b/include/linux/threads.h index 38d1a5d6568e..052b12bec8bd 100644 --- a/include/linux/threads.h +++ b/include/linux/threads.h | |||
| @@ -8,17 +8,17 @@ | |||
| 8 | */ | 8 | */ |
| 9 | 9 | ||
| 10 | /* | 10 | /* |
| 11 | * Maximum supported processors that can run under SMP. This value is | 11 | * Maximum supported processors. Setting this smaller saves quite a |
| 12 | * set via configure setting. The maximum is equal to the size of the | 12 | * bit of memory. Use nr_cpu_ids instead of this except for static bitmaps. |
| 13 | * bitmasks used on that platform, i.e. 32 or 64. Setting this smaller | ||
| 14 | * saves quite a bit of memory. | ||
| 15 | */ | 13 | */ |
| 16 | #ifdef CONFIG_SMP | 14 | #ifndef CONFIG_NR_CPUS |
| 17 | #define NR_CPUS CONFIG_NR_CPUS | 15 | /* FIXME: This should be fixed in the arch's Kconfig */ |
| 18 | #else | 16 | #define CONFIG_NR_CPUS 1 |
| 19 | #define NR_CPUS 1 | ||
| 20 | #endif | 17 | #endif |
| 21 | 18 | ||
| 19 | /* Places which use this should consider cpumask_var_t. */ | ||
| 20 | #define NR_CPUS CONFIG_NR_CPUS | ||
| 21 | |||
| 22 | #define MIN_THREADS_LEFT_FOR_ROOT 4 | 22 | #define MIN_THREADS_LEFT_FOR_ROOT 4 |
| 23 | 23 | ||
| 24 | /* | 24 | /* |
diff --git a/include/linux/tick.h b/include/linux/tick.h index b6ec8189ac0c..469b82d88b3b 100644 --- a/include/linux/tick.h +++ b/include/linux/tick.h | |||
| @@ -84,10 +84,10 @@ static inline void tick_cancel_sched_timer(int cpu) { } | |||
| 84 | 84 | ||
| 85 | # ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST | 85 | # ifdef CONFIG_GENERIC_CLOCKEVENTS_BROADCAST |
| 86 | extern struct tick_device *tick_get_broadcast_device(void); | 86 | extern struct tick_device *tick_get_broadcast_device(void); |
| 87 | extern cpumask_t *tick_get_broadcast_mask(void); | 87 | extern struct cpumask *tick_get_broadcast_mask(void); |
| 88 | 88 | ||
| 89 | # ifdef CONFIG_TICK_ONESHOT | 89 | # ifdef CONFIG_TICK_ONESHOT |
| 90 | extern cpumask_t *tick_get_broadcast_oneshot_mask(void); | 90 | extern struct cpumask *tick_get_broadcast_oneshot_mask(void); |
| 91 | # endif | 91 | # endif |
| 92 | 92 | ||
| 93 | # endif /* BROADCAST */ | 93 | # endif /* BROADCAST */ |
diff --git a/include/linux/videodev2.h b/include/linux/videodev2.h index 1f126e30766c..5571dbe1c0ad 100644 --- a/include/linux/videodev2.h +++ b/include/linux/videodev2.h | |||
| @@ -1370,25 +1370,41 @@ struct v4l2_streamparm { | |||
| 1370 | /* | 1370 | /* |
| 1371 | * A D V A N C E D D E B U G G I N G | 1371 | * A D V A N C E D D E B U G G I N G |
| 1372 | * | 1372 | * |
| 1373 | * NOTE: EXPERIMENTAL API | 1373 | * NOTE: EXPERIMENTAL API, NEVER RELY ON THIS IN APPLICATIONS! |
| 1374 | * FOR DEBUGGING, TESTING AND INTERNAL USE ONLY! | ||
| 1374 | */ | 1375 | */ |
| 1375 | 1376 | ||
| 1376 | /* VIDIOC_DBG_G_REGISTER and VIDIOC_DBG_S_REGISTER */ | 1377 | /* VIDIOC_DBG_G_REGISTER and VIDIOC_DBG_S_REGISTER */ |
| 1377 | 1378 | ||
| 1378 | #define V4L2_CHIP_MATCH_HOST 0 /* Match against chip ID on host (0 for the host) */ | 1379 | #define V4L2_CHIP_MATCH_HOST 0 /* Match against chip ID on host (0 for the host) */ |
| 1379 | #define V4L2_CHIP_MATCH_I2C_DRIVER 1 /* Match against I2C driver ID */ | 1380 | #define V4L2_CHIP_MATCH_I2C_DRIVER 1 /* Match against I2C driver name */ |
| 1380 | #define V4L2_CHIP_MATCH_I2C_ADDR 2 /* Match against I2C 7-bit address */ | 1381 | #define V4L2_CHIP_MATCH_I2C_ADDR 2 /* Match against I2C 7-bit address */ |
| 1381 | #define V4L2_CHIP_MATCH_AC97 3 /* Match against anciliary AC97 chip */ | 1382 | #define V4L2_CHIP_MATCH_AC97 3 /* Match against anciliary AC97 chip */ |
| 1382 | 1383 | ||
| 1383 | struct v4l2_register { | 1384 | struct v4l2_dbg_match { |
| 1384 | __u32 match_type; /* Match type */ | 1385 | __u32 type; /* Match type */ |
| 1385 | __u32 match_chip; /* Match this chip, meaning determined by match_type */ | 1386 | union { /* Match this chip, meaning determined by type */ |
| 1387 | __u32 addr; | ||
| 1388 | char name[32]; | ||
| 1389 | }; | ||
| 1390 | } __attribute__ ((packed)); | ||
| 1391 | |||
| 1392 | struct v4l2_dbg_register { | ||
| 1393 | struct v4l2_dbg_match match; | ||
| 1394 | __u32 size; /* register size in bytes */ | ||
| 1386 | __u64 reg; | 1395 | __u64 reg; |
| 1387 | __u64 val; | 1396 | __u64 val; |
| 1388 | }; | 1397 | } __attribute__ ((packed)); |
| 1398 | |||
| 1399 | /* VIDIOC_DBG_G_CHIP_IDENT */ | ||
| 1400 | struct v4l2_dbg_chip_ident { | ||
| 1401 | struct v4l2_dbg_match match; | ||
| 1402 | __u32 ident; /* chip identifier as specified in <media/v4l2-chip-ident.h> */ | ||
| 1403 | __u32 revision; /* chip revision, chip specific */ | ||
| 1404 | } __attribute__ ((packed)); | ||
| 1389 | 1405 | ||
| 1390 | /* VIDIOC_G_CHIP_IDENT */ | 1406 | /* VIDIOC_G_CHIP_IDENT_OLD: Deprecated, do not use */ |
| 1391 | struct v4l2_chip_ident { | 1407 | struct v4l2_chip_ident_old { |
| 1392 | __u32 match_type; /* Match type */ | 1408 | __u32 match_type; /* Match type */ |
| 1393 | __u32 match_chip; /* Match this chip, meaning determined by match_type */ | 1409 | __u32 match_chip; /* Match this chip, meaning determined by match_type */ |
| 1394 | __u32 ident; /* chip identifier as specified in <media/v4l2-chip-ident.h> */ | 1410 | __u32 ident; /* chip identifier as specified in <media/v4l2-chip-ident.h> */ |
| @@ -1460,13 +1476,22 @@ struct v4l2_chip_ident { | |||
| 1460 | #define VIDIOC_G_ENC_INDEX _IOR('V', 76, struct v4l2_enc_idx) | 1476 | #define VIDIOC_G_ENC_INDEX _IOR('V', 76, struct v4l2_enc_idx) |
| 1461 | #define VIDIOC_ENCODER_CMD _IOWR('V', 77, struct v4l2_encoder_cmd) | 1477 | #define VIDIOC_ENCODER_CMD _IOWR('V', 77, struct v4l2_encoder_cmd) |
| 1462 | #define VIDIOC_TRY_ENCODER_CMD _IOWR('V', 78, struct v4l2_encoder_cmd) | 1478 | #define VIDIOC_TRY_ENCODER_CMD _IOWR('V', 78, struct v4l2_encoder_cmd) |
| 1479 | #endif | ||
| 1463 | 1480 | ||
| 1464 | /* Experimental, only implemented if CONFIG_VIDEO_ADV_DEBUG is defined */ | 1481 | #if 1 |
| 1465 | #define VIDIOC_DBG_S_REGISTER _IOW('V', 79, struct v4l2_register) | 1482 | /* Experimental, meant for debugging, testing and internal use. |
| 1466 | #define VIDIOC_DBG_G_REGISTER _IOWR('V', 80, struct v4l2_register) | 1483 | Only implemented if CONFIG_VIDEO_ADV_DEBUG is defined. |
| 1467 | 1484 | You must be root to use these ioctls. Never use these in applications! */ | |
| 1468 | #define VIDIOC_G_CHIP_IDENT _IOWR('V', 81, struct v4l2_chip_ident) | 1485 | #define VIDIOC_DBG_S_REGISTER _IOW('V', 79, struct v4l2_dbg_register) |
| 1486 | #define VIDIOC_DBG_G_REGISTER _IOWR('V', 80, struct v4l2_dbg_register) | ||
| 1487 | |||
| 1488 | /* Experimental, meant for debugging, testing and internal use. | ||
| 1489 | Never use this ioctl in applications! */ | ||
| 1490 | #define VIDIOC_DBG_G_CHIP_IDENT _IOWR('V', 81, struct v4l2_dbg_chip_ident) | ||
| 1491 | /* This is deprecated and will go away in 2.6.30 */ | ||
| 1492 | #define VIDIOC_G_CHIP_IDENT_OLD _IOWR('V', 81, struct v4l2_chip_ident_old) | ||
| 1469 | #endif | 1493 | #endif |
| 1494 | |||
| 1470 | #define VIDIOC_S_HW_FREQ_SEEK _IOW('V', 82, struct v4l2_hw_freq_seek) | 1495 | #define VIDIOC_S_HW_FREQ_SEEK _IOW('V', 82, struct v4l2_hw_freq_seek) |
| 1471 | /* Reminder: when adding new ioctls please add support for them to | 1496 | /* Reminder: when adding new ioctls please add support for them to |
| 1472 | drivers/media/video/v4l2-compat-ioctl32.c as well! */ | 1497 | drivers/media/video/v4l2-compat-ioctl32.c as well! */ |
diff --git a/include/media/saa7146_vv.h b/include/media/saa7146_vv.h index 6bbb0d93bb5f..c8d0b23fde29 100644 --- a/include/media/saa7146_vv.h +++ b/include/media/saa7146_vv.h | |||
| @@ -177,9 +177,9 @@ struct saa7146_ext_vv | |||
| 177 | int (*std_callback)(struct saa7146_dev*, struct saa7146_standard *); | 177 | int (*std_callback)(struct saa7146_dev*, struct saa7146_standard *); |
| 178 | 178 | ||
| 179 | struct saa7146_extension_ioctls *ioctls; | 179 | struct saa7146_extension_ioctls *ioctls; |
| 180 | int (*ioctl)(struct saa7146_fh*, unsigned int cmd, void *arg); | 180 | long (*ioctl)(struct saa7146_fh *, unsigned int cmd, void *arg); |
| 181 | 181 | ||
| 182 | struct file_operations vbi_fops; | 182 | struct v4l2_file_operations vbi_fops; |
| 183 | }; | 183 | }; |
| 184 | 184 | ||
| 185 | struct saa7146_use_ops { | 185 | struct saa7146_use_ops { |
| @@ -216,7 +216,7 @@ void saa7146_set_gpio(struct saa7146_dev *saa, u8 pin, u8 data); | |||
| 216 | extern struct saa7146_use_ops saa7146_video_uops; | 216 | extern struct saa7146_use_ops saa7146_video_uops; |
| 217 | int saa7146_start_preview(struct saa7146_fh *fh); | 217 | int saa7146_start_preview(struct saa7146_fh *fh); |
| 218 | int saa7146_stop_preview(struct saa7146_fh *fh); | 218 | int saa7146_stop_preview(struct saa7146_fh *fh); |
| 219 | int saa7146_video_do_ioctl(struct file *file, unsigned int cmd, void *arg); | 219 | long saa7146_video_do_ioctl(struct file *file, unsigned int cmd, void *arg); |
| 220 | 220 | ||
| 221 | /* from saa7146_vbi.c */ | 221 | /* from saa7146_vbi.c */ |
| 222 | extern struct saa7146_use_ops saa7146_vbi_uops; | 222 | extern struct saa7146_use_ops saa7146_vbi_uops; |
diff --git a/include/media/soc_camera.h b/include/media/soc_camera.h index 425b6a98c95c..7440d9250665 100644 --- a/include/media/soc_camera.h +++ b/include/media/soc_camera.h | |||
| @@ -164,12 +164,12 @@ struct soc_camera_ops { | |||
| 164 | unsigned long (*query_bus_param)(struct soc_camera_device *); | 164 | unsigned long (*query_bus_param)(struct soc_camera_device *); |
| 165 | int (*set_bus_param)(struct soc_camera_device *, unsigned long); | 165 | int (*set_bus_param)(struct soc_camera_device *, unsigned long); |
| 166 | int (*get_chip_id)(struct soc_camera_device *, | 166 | int (*get_chip_id)(struct soc_camera_device *, |
| 167 | struct v4l2_chip_ident *); | 167 | struct v4l2_dbg_chip_ident *); |
| 168 | int (*set_std)(struct soc_camera_device *, v4l2_std_id *); | 168 | int (*set_std)(struct soc_camera_device *, v4l2_std_id *); |
| 169 | int (*enum_input)(struct soc_camera_device *, struct v4l2_input *); | 169 | int (*enum_input)(struct soc_camera_device *, struct v4l2_input *); |
| 170 | #ifdef CONFIG_VIDEO_ADV_DEBUG | 170 | #ifdef CONFIG_VIDEO_ADV_DEBUG |
| 171 | int (*get_register)(struct soc_camera_device *, struct v4l2_register *); | 171 | int (*get_register)(struct soc_camera_device *, struct v4l2_dbg_register *); |
| 172 | int (*set_register)(struct soc_camera_device *, struct v4l2_register *); | 172 | int (*set_register)(struct soc_camera_device *, struct v4l2_dbg_register *); |
| 173 | #endif | 173 | #endif |
| 174 | int (*get_control)(struct soc_camera_device *, struct v4l2_control *); | 174 | int (*get_control)(struct soc_camera_device *, struct v4l2_control *); |
| 175 | int (*set_control)(struct soc_camera_device *, struct v4l2_control *); | 175 | int (*set_control)(struct soc_camera_device *, struct v4l2_control *); |
diff --git a/include/media/v4l2-chip-ident.h b/include/media/v4l2-chip-ident.h index 43dbb659f1f5..9aaf652b20ef 100644 --- a/include/media/v4l2-chip-ident.h +++ b/include/media/v4l2-chip-ident.h | |||
| @@ -2,7 +2,7 @@ | |||
| 2 | v4l2 chip identifiers header | 2 | v4l2 chip identifiers header |
| 3 | 3 | ||
| 4 | This header provides a list of chip identifiers that can be returned | 4 | This header provides a list of chip identifiers that can be returned |
| 5 | through the VIDIOC_G_CHIP_IDENT ioctl. | 5 | through the VIDIOC_DBG_G_CHIP_IDENT ioctl. |
| 6 | 6 | ||
| 7 | Copyright (C) 2007 Hans Verkuil <hverkuil@xs4all.nl> | 7 | Copyright (C) 2007 Hans Verkuil <hverkuil@xs4all.nl> |
| 8 | 8 | ||
| @@ -24,7 +24,7 @@ | |||
| 24 | #ifndef V4L2_CHIP_IDENT_H_ | 24 | #ifndef V4L2_CHIP_IDENT_H_ |
| 25 | #define V4L2_CHIP_IDENT_H_ | 25 | #define V4L2_CHIP_IDENT_H_ |
| 26 | 26 | ||
| 27 | /* VIDIOC_G_CHIP_IDENT: identifies the actual chip installed on the board */ | 27 | /* VIDIOC_DBG_G_CHIP_IDENT: identifies the actual chip installed on the board */ |
| 28 | enum { | 28 | enum { |
| 29 | /* general idents: reserved range 0-49 */ | 29 | /* general idents: reserved range 0-49 */ |
| 30 | V4L2_IDENT_NONE = 0, /* No chip matched */ | 30 | V4L2_IDENT_NONE = 0, /* No chip matched */ |
diff --git a/include/media/v4l2-common.h b/include/media/v4l2-common.h index f99c866d8c37..95e74f1874e1 100644 --- a/include/media/v4l2-common.h +++ b/include/media/v4l2-common.h | |||
| @@ -114,10 +114,10 @@ u32 v4l2_ctrl_next(const u32 * const *ctrl_classes, u32 id); | |||
| 114 | /* Register/chip ident helper function */ | 114 | /* Register/chip ident helper function */ |
| 115 | 115 | ||
| 116 | struct i2c_client; /* forward reference */ | 116 | struct i2c_client; /* forward reference */ |
| 117 | int v4l2_chip_match_i2c_client(struct i2c_client *c, u32 id_type, u32 chip_id); | 117 | int v4l2_chip_match_i2c_client(struct i2c_client *c, const struct v4l2_dbg_match *match); |
| 118 | int v4l2_chip_ident_i2c_client(struct i2c_client *c, struct v4l2_chip_ident *chip, | 118 | int v4l2_chip_ident_i2c_client(struct i2c_client *c, struct v4l2_dbg_chip_ident *chip, |
| 119 | u32 ident, u32 revision); | 119 | u32 ident, u32 revision); |
| 120 | int v4l2_chip_match_host(u32 id_type, u32 chip_id); | 120 | int v4l2_chip_match_host(const struct v4l2_dbg_match *match); |
| 121 | 121 | ||
| 122 | /* ------------------------------------------------------------------------- */ | 122 | /* ------------------------------------------------------------------------- */ |
| 123 | 123 | ||
diff --git a/include/media/v4l2-dev.h b/include/media/v4l2-dev.h index 0a88d1d17d30..e36faab8459b 100644 --- a/include/media/v4l2-dev.h +++ b/include/media/v4l2-dev.h | |||
| @@ -25,6 +25,7 @@ | |||
| 25 | #define VFL_TYPE_MAX 4 | 25 | #define VFL_TYPE_MAX 4 |
| 26 | 26 | ||
| 27 | struct v4l2_ioctl_callbacks; | 27 | struct v4l2_ioctl_callbacks; |
| 28 | struct video_device; | ||
| 28 | struct v4l2_device; | 29 | struct v4l2_device; |
| 29 | 30 | ||
| 30 | /* Flag to mark the video_device struct as unregistered. | 31 | /* Flag to mark the video_device struct as unregistered. |
| @@ -32,6 +33,18 @@ struct v4l2_device; | |||
| 32 | device access. It is set by video_unregister_device. */ | 33 | device access. It is set by video_unregister_device. */ |
| 33 | #define V4L2_FL_UNREGISTERED (0) | 34 | #define V4L2_FL_UNREGISTERED (0) |
| 34 | 35 | ||
| 36 | struct v4l2_file_operations { | ||
| 37 | struct module *owner; | ||
| 38 | ssize_t (*read) (struct file *, char __user *, size_t, loff_t *); | ||
| 39 | ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *); | ||
| 40 | unsigned int (*poll) (struct file *, struct poll_table_struct *); | ||
| 41 | long (*ioctl) (struct file *, unsigned int, unsigned long); | ||
| 42 | long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long); | ||
| 43 | int (*mmap) (struct file *, struct vm_area_struct *); | ||
| 44 | int (*open) (struct file *); | ||
| 45 | int (*release) (struct file *); | ||
| 46 | }; | ||
| 47 | |||
| 35 | /* | 48 | /* |
| 36 | * Newer version of video_device, handled by videodev2.c | 49 | * Newer version of video_device, handled by videodev2.c |
| 37 | * This version moves redundant code from video device code to | 50 | * This version moves redundant code from video device code to |
| @@ -41,7 +54,7 @@ struct v4l2_device; | |||
| 41 | struct video_device | 54 | struct video_device |
| 42 | { | 55 | { |
| 43 | /* device ops */ | 56 | /* device ops */ |
| 44 | const struct file_operations *fops; | 57 | const struct v4l2_file_operations *fops; |
| 45 | 58 | ||
| 46 | /* sysfs */ | 59 | /* sysfs */ |
| 47 | struct device dev; /* v4l device */ | 60 | struct device dev; /* v4l device */ |
diff --git a/include/media/v4l2-device.h b/include/media/v4l2-device.h index 97b283a04289..9bf4ccc93dbf 100644 --- a/include/media/v4l2-device.h +++ b/include/media/v4l2-device.h | |||
| @@ -80,7 +80,7 @@ void v4l2_device_unregister_subdev(struct v4l2_subdev *sd); | |||
| 80 | #define __v4l2_device_call_subdevs_until_err(dev, cond, o, f, args...) \ | 80 | #define __v4l2_device_call_subdevs_until_err(dev, cond, o, f, args...) \ |
| 81 | ({ \ | 81 | ({ \ |
| 82 | struct v4l2_subdev *sd; \ | 82 | struct v4l2_subdev *sd; \ |
| 83 | int err = 0; \ | 83 | long err = 0; \ |
| 84 | \ | 84 | \ |
| 85 | list_for_each_entry(sd, &(dev)->subdevs, list) { \ | 85 | list_for_each_entry(sd, &(dev)->subdevs, list) { \ |
| 86 | if ((cond) && sd->ops->o && sd->ops->o->f) \ | 86 | if ((cond) && sd->ops->o && sd->ops->o->f) \ |
diff --git a/include/media/v4l2-int-device.h b/include/media/v4l2-int-device.h index ecda3c725837..fbf585561570 100644 --- a/include/media/v4l2-int-device.h +++ b/include/media/v4l2-int-device.h | |||
| @@ -219,7 +219,7 @@ enum v4l2_int_ioctl_num { | |||
| 219 | vidioc_int_reset_num, | 219 | vidioc_int_reset_num, |
| 220 | /* VIDIOC_INT_INIT */ | 220 | /* VIDIOC_INT_INIT */ |
| 221 | vidioc_int_init_num, | 221 | vidioc_int_init_num, |
| 222 | /* VIDIOC_INT_G_CHIP_IDENT */ | 222 | /* VIDIOC_DBG_G_CHIP_IDENT */ |
| 223 | vidioc_int_g_chip_ident_num, | 223 | vidioc_int_g_chip_ident_num, |
| 224 | 224 | ||
| 225 | /* | 225 | /* |
diff --git a/include/media/v4l2-ioctl.h b/include/media/v4l2-ioctl.h index fcdb58c4ce07..b01c044868d0 100644 --- a/include/media/v4l2-ioctl.h +++ b/include/media/v4l2-ioctl.h | |||
| @@ -225,12 +225,12 @@ struct v4l2_ioctl_ops { | |||
| 225 | /* Debugging ioctls */ | 225 | /* Debugging ioctls */ |
| 226 | #ifdef CONFIG_VIDEO_ADV_DEBUG | 226 | #ifdef CONFIG_VIDEO_ADV_DEBUG |
| 227 | int (*vidioc_g_register) (struct file *file, void *fh, | 227 | int (*vidioc_g_register) (struct file *file, void *fh, |
| 228 | struct v4l2_register *reg); | 228 | struct v4l2_dbg_register *reg); |
| 229 | int (*vidioc_s_register) (struct file *file, void *fh, | 229 | int (*vidioc_s_register) (struct file *file, void *fh, |
| 230 | struct v4l2_register *reg); | 230 | struct v4l2_dbg_register *reg); |
| 231 | #endif | 231 | #endif |
| 232 | int (*vidioc_g_chip_ident) (struct file *file, void *fh, | 232 | int (*vidioc_g_chip_ident) (struct file *file, void *fh, |
| 233 | struct v4l2_chip_ident *chip); | 233 | struct v4l2_dbg_chip_ident *chip); |
| 234 | 234 | ||
| 235 | int (*vidioc_enum_framesizes) (struct file *file, void *fh, | 235 | int (*vidioc_enum_framesizes) (struct file *file, void *fh, |
| 236 | struct v4l2_frmsizeenum *fsize); | 236 | struct v4l2_frmsizeenum *fsize); |
| @@ -239,7 +239,7 @@ struct v4l2_ioctl_ops { | |||
| 239 | struct v4l2_frmivalenum *fival); | 239 | struct v4l2_frmivalenum *fival); |
| 240 | 240 | ||
| 241 | /* For other private ioctls */ | 241 | /* For other private ioctls */ |
| 242 | int (*vidioc_default) (struct file *file, void *fh, | 242 | long (*vidioc_default) (struct file *file, void *fh, |
| 243 | int cmd, void *arg); | 243 | int cmd, void *arg); |
| 244 | }; | 244 | }; |
| 245 | 245 | ||
| @@ -277,36 +277,27 @@ extern const char *v4l2_field_names[]; | |||
| 277 | extern const char *v4l2_type_names[]; | 277 | extern const char *v4l2_type_names[]; |
| 278 | 278 | ||
| 279 | /* Compatibility layer interface -- v4l1-compat module */ | 279 | /* Compatibility layer interface -- v4l1-compat module */ |
| 280 | typedef int (*v4l2_kioctl)(struct file *file, | 280 | typedef long (*v4l2_kioctl)(struct file *file, |
| 281 | unsigned int cmd, void *arg); | 281 | unsigned int cmd, void *arg); |
| 282 | #ifdef CONFIG_VIDEO_V4L1_COMPAT | 282 | #ifdef CONFIG_VIDEO_V4L1_COMPAT |
| 283 | int v4l_compat_translate_ioctl(struct file *file, | 283 | long v4l_compat_translate_ioctl(struct file *file, |
| 284 | int cmd, void *arg, v4l2_kioctl driver_ioctl); | 284 | int cmd, void *arg, v4l2_kioctl driver_ioctl); |
| 285 | #else | 285 | #else |
| 286 | #define v4l_compat_translate_ioctl(file, cmd, arg, ioctl) (-EINVAL) | 286 | #define v4l_compat_translate_ioctl(file, cmd, arg, ioctl) (-EINVAL) |
| 287 | #endif | 287 | #endif |
| 288 | 288 | ||
| 289 | #ifdef CONFIG_COMPAT | ||
| 289 | /* 32 Bits compatibility layer for 64 bits processors */ | 290 | /* 32 Bits compatibility layer for 64 bits processors */ |
| 290 | extern long v4l_compat_ioctl32(struct file *file, unsigned int cmd, | 291 | extern long v4l2_compat_ioctl32(struct file *file, unsigned int cmd, |
| 291 | unsigned long arg); | 292 | unsigned long arg); |
| 293 | #endif | ||
| 292 | 294 | ||
| 293 | /* Include support for obsoleted stuff */ | 295 | /* Include support for obsoleted stuff */ |
| 294 | extern int video_usercopy(struct file *file, unsigned int cmd, | 296 | extern long video_usercopy(struct file *file, unsigned int cmd, |
| 295 | unsigned long arg, v4l2_kioctl func); | 297 | unsigned long arg, v4l2_kioctl func); |
| 296 | 298 | ||
| 297 | /* Standard handlers for V4L ioctl's */ | 299 | /* Standard handlers for V4L ioctl's */ |
| 298 | 300 | extern long video_ioctl2(struct file *file, | |
| 299 | /* This prototype is used on fops.unlocked_ioctl */ | ||
| 300 | extern long __video_ioctl2(struct file *file, | ||
| 301 | unsigned int cmd, unsigned long arg); | ||
| 302 | |||
| 303 | /* This prototype is used on fops.ioctl | ||
| 304 | * Since fops.ioctl enables Kernel Big Lock, it is preferred | ||
| 305 | * to use __video_ioctl2 instead. | ||
| 306 | * It should be noticed that there's no lock code inside | ||
| 307 | * video_ioctl2(). | ||
| 308 | */ | ||
| 309 | extern int video_ioctl2(struct inode *inode, struct file *file, | ||
| 310 | unsigned int cmd, unsigned long arg); | 301 | unsigned int cmd, unsigned long arg); |
| 311 | 302 | ||
| 312 | #endif /* _V4L2_IOCTL_H */ | 303 | #endif /* _V4L2_IOCTL_H */ |
diff --git a/include/media/v4l2-subdev.h b/include/media/v4l2-subdev.h index ceef016bb0b7..37b09e56e943 100644 --- a/include/media/v4l2-subdev.h +++ b/include/media/v4l2-subdev.h | |||
| @@ -69,7 +69,7 @@ struct tuner_setup; | |||
| 69 | not yet implemented) since ops provide proper type-checking. | 69 | not yet implemented) since ops provide proper type-checking. |
| 70 | */ | 70 | */ |
| 71 | struct v4l2_subdev_core_ops { | 71 | struct v4l2_subdev_core_ops { |
| 72 | int (*g_chip_ident)(struct v4l2_subdev *sd, struct v4l2_chip_ident *chip); | 72 | int (*g_chip_ident)(struct v4l2_subdev *sd, struct v4l2_dbg_chip_ident *chip); |
| 73 | int (*log_status)(struct v4l2_subdev *sd); | 73 | int (*log_status)(struct v4l2_subdev *sd); |
| 74 | int (*init)(struct v4l2_subdev *sd, u32 val); | 74 | int (*init)(struct v4l2_subdev *sd, u32 val); |
| 75 | int (*s_standby)(struct v4l2_subdev *sd, u32 standby); | 75 | int (*s_standby)(struct v4l2_subdev *sd, u32 standby); |
| @@ -79,10 +79,10 @@ struct v4l2_subdev_core_ops { | |||
| 79 | int (*g_ctrl)(struct v4l2_subdev *sd, struct v4l2_control *ctrl); | 79 | int (*g_ctrl)(struct v4l2_subdev *sd, struct v4l2_control *ctrl); |
| 80 | int (*s_ctrl)(struct v4l2_subdev *sd, struct v4l2_control *ctrl); | 80 | int (*s_ctrl)(struct v4l2_subdev *sd, struct v4l2_control *ctrl); |
| 81 | int (*querymenu)(struct v4l2_subdev *sd, struct v4l2_querymenu *qm); | 81 | int (*querymenu)(struct v4l2_subdev *sd, struct v4l2_querymenu *qm); |
| 82 | int (*ioctl)(struct v4l2_subdev *sd, unsigned int cmd, void *arg); | 82 | long (*ioctl)(struct v4l2_subdev *sd, unsigned int cmd, void *arg); |
| 83 | #ifdef CONFIG_VIDEO_ADV_DEBUG | 83 | #ifdef CONFIG_VIDEO_ADV_DEBUG |
| 84 | int (*g_register)(struct v4l2_subdev *sd, struct v4l2_register *reg); | 84 | int (*g_register)(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg); |
| 85 | int (*s_register)(struct v4l2_subdev *sd, struct v4l2_register *reg); | 85 | int (*s_register)(struct v4l2_subdev *sd, struct v4l2_dbg_register *reg); |
| 86 | #endif | 86 | #endif |
| 87 | }; | 87 | }; |
| 88 | 88 | ||
diff --git a/include/sound/tea575x-tuner.h b/include/sound/tea575x-tuner.h index b6870cbaf2b3..426899e529c5 100644 --- a/include/sound/tea575x-tuner.h +++ b/include/sound/tea575x-tuner.h | |||
| @@ -36,7 +36,7 @@ struct snd_tea575x_ops { | |||
| 36 | struct snd_tea575x { | 36 | struct snd_tea575x { |
| 37 | struct snd_card *card; | 37 | struct snd_card *card; |
| 38 | struct video_device vd; /* video device */ | 38 | struct video_device vd; /* video device */ |
| 39 | struct file_operations fops; | 39 | struct v4l2_file_operations fops; |
| 40 | int dev_nr; /* requested device number + 1 */ | 40 | int dev_nr; /* requested device number + 1 */ |
| 41 | int vd_registered; /* video device is registered */ | 41 | int vd_registered; /* video device is registered */ |
| 42 | int tea5759; /* 5759 chip is present */ | 42 | int tea5759; /* 5759 chip is present */ |
