diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Kconfig | 4 | ||||
-rw-r--r-- | lib/decompress.c | 3 | ||||
-rw-r--r-- | lib/devres.c | 4 | ||||
-rw-r--r-- | lib/idr.c | 24 | ||||
-rw-r--r-- | lib/iomap.c | 4 | ||||
-rw-r--r-- | lib/percpu_counter.c | 2 | ||||
-rw-r--r-- | lib/smp_processor_id.c | 18 |
7 files changed, 28 insertions, 31 deletions
diff --git a/lib/Kconfig b/lib/Kconfig index 991c98bc4a3f..5d4984c505f8 100644 --- a/lib/Kconfig +++ b/lib/Kconfig | |||
@@ -342,9 +342,9 @@ config HAS_IOMEM | |||
342 | select GENERIC_IO | 342 | select GENERIC_IO |
343 | default y | 343 | default y |
344 | 344 | ||
345 | config HAS_IOPORT | 345 | config HAS_IOPORT_MAP |
346 | boolean | 346 | boolean |
347 | depends on HAS_IOMEM && !NO_IOPORT | 347 | depends on HAS_IOMEM && !NO_IOPORT_MAP |
348 | default y | 348 | default y |
349 | 349 | ||
350 | config HAS_DMA | 350 | config HAS_DMA |
diff --git a/lib/decompress.c b/lib/decompress.c index 4d1cd0397aab..86069d74c062 100644 --- a/lib/decompress.c +++ b/lib/decompress.c | |||
@@ -16,6 +16,7 @@ | |||
16 | #include <linux/types.h> | 16 | #include <linux/types.h> |
17 | #include <linux/string.h> | 17 | #include <linux/string.h> |
18 | #include <linux/init.h> | 18 | #include <linux/init.h> |
19 | #include <linux/printk.h> | ||
19 | 20 | ||
20 | #ifndef CONFIG_DECOMPRESS_GZIP | 21 | #ifndef CONFIG_DECOMPRESS_GZIP |
21 | # define gunzip NULL | 22 | # define gunzip NULL |
@@ -61,6 +62,8 @@ decompress_fn __init decompress_method(const unsigned char *inbuf, int len, | |||
61 | if (len < 2) | 62 | if (len < 2) |
62 | return NULL; /* Need at least this much... */ | 63 | return NULL; /* Need at least this much... */ |
63 | 64 | ||
65 | pr_debug("Compressed data magic: %#.2x %#.2x\n", inbuf[0], inbuf[1]); | ||
66 | |||
64 | for (cf = compressed_formats; cf->name; cf++) { | 67 | for (cf = compressed_formats; cf->name; cf++) { |
65 | if (!memcmp(inbuf, cf->magic, 2)) | 68 | if (!memcmp(inbuf, cf->magic, 2)) |
66 | break; | 69 | break; |
diff --git a/lib/devres.c b/lib/devres.c index 48cb3c7bd7de..2f16c133fd36 100644 --- a/lib/devres.c +++ b/lib/devres.c | |||
@@ -170,7 +170,7 @@ void __iomem *devm_request_and_ioremap(struct device *device, | |||
170 | } | 170 | } |
171 | EXPORT_SYMBOL(devm_request_and_ioremap); | 171 | EXPORT_SYMBOL(devm_request_and_ioremap); |
172 | 172 | ||
173 | #ifdef CONFIG_HAS_IOPORT | 173 | #ifdef CONFIG_HAS_IOPORT_MAP |
174 | /* | 174 | /* |
175 | * Generic iomap devres | 175 | * Generic iomap devres |
176 | */ | 176 | */ |
@@ -229,7 +229,7 @@ void devm_ioport_unmap(struct device *dev, void __iomem *addr) | |||
229 | devm_ioport_map_match, (__force void *)addr)); | 229 | devm_ioport_map_match, (__force void *)addr)); |
230 | } | 230 | } |
231 | EXPORT_SYMBOL(devm_ioport_unmap); | 231 | EXPORT_SYMBOL(devm_ioport_unmap); |
232 | #endif /* CONFIG_HAS_IOPORT */ | 232 | #endif /* CONFIG_HAS_IOPORT_MAP */ |
233 | 233 | ||
234 | #ifdef CONFIG_PCI | 234 | #ifdef CONFIG_PCI |
235 | /* | 235 | /* |
@@ -196,7 +196,7 @@ static void idr_mark_full(struct idr_layer **pa, int id) | |||
196 | } | 196 | } |
197 | } | 197 | } |
198 | 198 | ||
199 | int __idr_pre_get(struct idr *idp, gfp_t gfp_mask) | 199 | static int __idr_pre_get(struct idr *idp, gfp_t gfp_mask) |
200 | { | 200 | { |
201 | while (idp->id_free_cnt < MAX_IDR_FREE) { | 201 | while (idp->id_free_cnt < MAX_IDR_FREE) { |
202 | struct idr_layer *new; | 202 | struct idr_layer *new; |
@@ -207,7 +207,6 @@ int __idr_pre_get(struct idr *idp, gfp_t gfp_mask) | |||
207 | } | 207 | } |
208 | return 1; | 208 | return 1; |
209 | } | 209 | } |
210 | EXPORT_SYMBOL(__idr_pre_get); | ||
211 | 210 | ||
212 | /** | 211 | /** |
213 | * sub_alloc - try to allocate an id without growing the tree depth | 212 | * sub_alloc - try to allocate an id without growing the tree depth |
@@ -374,20 +373,6 @@ static void idr_fill_slot(struct idr *idr, void *ptr, int id, | |||
374 | idr_mark_full(pa, id); | 373 | idr_mark_full(pa, id); |
375 | } | 374 | } |
376 | 375 | ||
377 | int __idr_get_new_above(struct idr *idp, void *ptr, int starting_id, int *id) | ||
378 | { | ||
379 | struct idr_layer *pa[MAX_IDR_LEVEL + 1]; | ||
380 | int rv; | ||
381 | |||
382 | rv = idr_get_empty_slot(idp, starting_id, pa, 0, idp); | ||
383 | if (rv < 0) | ||
384 | return rv == -ENOMEM ? -EAGAIN : rv; | ||
385 | |||
386 | idr_fill_slot(idp, ptr, rv, pa); | ||
387 | *id = rv; | ||
388 | return 0; | ||
389 | } | ||
390 | EXPORT_SYMBOL(__idr_get_new_above); | ||
391 | 376 | ||
392 | /** | 377 | /** |
393 | * idr_preload - preload for idr_alloc() | 378 | * idr_preload - preload for idr_alloc() |
@@ -548,7 +533,7 @@ static void sub_remove(struct idr *idp, int shift, int id) | |||
548 | n = id & IDR_MASK; | 533 | n = id & IDR_MASK; |
549 | if (likely(p != NULL && test_bit(n, p->bitmap))) { | 534 | if (likely(p != NULL && test_bit(n, p->bitmap))) { |
550 | __clear_bit(n, p->bitmap); | 535 | __clear_bit(n, p->bitmap); |
551 | rcu_assign_pointer(p->ary[n], NULL); | 536 | RCU_INIT_POINTER(p->ary[n], NULL); |
552 | to_free = NULL; | 537 | to_free = NULL; |
553 | while(*paa && ! --((**paa)->count)){ | 538 | while(*paa && ! --((**paa)->count)){ |
554 | if (to_free) | 539 | if (to_free) |
@@ -607,7 +592,7 @@ void idr_remove(struct idr *idp, int id) | |||
607 | } | 592 | } |
608 | EXPORT_SYMBOL(idr_remove); | 593 | EXPORT_SYMBOL(idr_remove); |
609 | 594 | ||
610 | void __idr_remove_all(struct idr *idp) | 595 | static void __idr_remove_all(struct idr *idp) |
611 | { | 596 | { |
612 | int n, id, max; | 597 | int n, id, max; |
613 | int bt_mask; | 598 | int bt_mask; |
@@ -617,7 +602,7 @@ void __idr_remove_all(struct idr *idp) | |||
617 | 602 | ||
618 | n = idp->layers * IDR_BITS; | 603 | n = idp->layers * IDR_BITS; |
619 | p = idp->top; | 604 | p = idp->top; |
620 | rcu_assign_pointer(idp->top, NULL); | 605 | RCU_INIT_POINTER(idp->top, NULL); |
621 | max = idr_max(idp->layers); | 606 | max = idr_max(idp->layers); |
622 | 607 | ||
623 | id = 0; | 608 | id = 0; |
@@ -640,7 +625,6 @@ void __idr_remove_all(struct idr *idp) | |||
640 | } | 625 | } |
641 | idp->layers = 0; | 626 | idp->layers = 0; |
642 | } | 627 | } |
643 | EXPORT_SYMBOL(__idr_remove_all); | ||
644 | 628 | ||
645 | /** | 629 | /** |
646 | * idr_destroy - release all cached layers within an idr tree | 630 | * idr_destroy - release all cached layers within an idr tree |
diff --git a/lib/iomap.c b/lib/iomap.c index 2c08f36862eb..fc3dcb4b238e 100644 --- a/lib/iomap.c +++ b/lib/iomap.c | |||
@@ -224,7 +224,7 @@ EXPORT_SYMBOL(iowrite8_rep); | |||
224 | EXPORT_SYMBOL(iowrite16_rep); | 224 | EXPORT_SYMBOL(iowrite16_rep); |
225 | EXPORT_SYMBOL(iowrite32_rep); | 225 | EXPORT_SYMBOL(iowrite32_rep); |
226 | 226 | ||
227 | #ifdef CONFIG_HAS_IOPORT | 227 | #ifdef CONFIG_HAS_IOPORT_MAP |
228 | /* Create a virtual mapping cookie for an IO port range */ | 228 | /* Create a virtual mapping cookie for an IO port range */ |
229 | void __iomem *ioport_map(unsigned long port, unsigned int nr) | 229 | void __iomem *ioport_map(unsigned long port, unsigned int nr) |
230 | { | 230 | { |
@@ -239,7 +239,7 @@ void ioport_unmap(void __iomem *addr) | |||
239 | } | 239 | } |
240 | EXPORT_SYMBOL(ioport_map); | 240 | EXPORT_SYMBOL(ioport_map); |
241 | EXPORT_SYMBOL(ioport_unmap); | 241 | EXPORT_SYMBOL(ioport_unmap); |
242 | #endif /* CONFIG_HAS_IOPORT */ | 242 | #endif /* CONFIG_HAS_IOPORT_MAP */ |
243 | 243 | ||
244 | #ifdef CONFIG_PCI | 244 | #ifdef CONFIG_PCI |
245 | /* Hide the details if this is a MMIO or PIO address space and just do what | 245 | /* Hide the details if this is a MMIO or PIO address space and just do what |
diff --git a/lib/percpu_counter.c b/lib/percpu_counter.c index 8280a5dd1727..7dd33577b905 100644 --- a/lib/percpu_counter.c +++ b/lib/percpu_counter.c | |||
@@ -169,7 +169,7 @@ static int percpu_counter_hotcpu_callback(struct notifier_block *nb, | |||
169 | struct percpu_counter *fbc; | 169 | struct percpu_counter *fbc; |
170 | 170 | ||
171 | compute_batch_value(); | 171 | compute_batch_value(); |
172 | if (action != CPU_DEAD) | 172 | if (action != CPU_DEAD && action != CPU_DEAD_FROZEN) |
173 | return NOTIFY_OK; | 173 | return NOTIFY_OK; |
174 | 174 | ||
175 | cpu = (unsigned long)hcpu; | 175 | cpu = (unsigned long)hcpu; |
diff --git a/lib/smp_processor_id.c b/lib/smp_processor_id.c index 04abe53f12a1..1afec32de6f2 100644 --- a/lib/smp_processor_id.c +++ b/lib/smp_processor_id.c | |||
@@ -7,7 +7,8 @@ | |||
7 | #include <linux/kallsyms.h> | 7 | #include <linux/kallsyms.h> |
8 | #include <linux/sched.h> | 8 | #include <linux/sched.h> |
9 | 9 | ||
10 | notrace unsigned int debug_smp_processor_id(void) | 10 | notrace static unsigned int check_preemption_disabled(const char *what1, |
11 | const char *what2) | ||
11 | { | 12 | { |
12 | int this_cpu = raw_smp_processor_id(); | 13 | int this_cpu = raw_smp_processor_id(); |
13 | 14 | ||
@@ -38,9 +39,9 @@ notrace unsigned int debug_smp_processor_id(void) | |||
38 | if (!printk_ratelimit()) | 39 | if (!printk_ratelimit()) |
39 | goto out_enable; | 40 | goto out_enable; |
40 | 41 | ||
41 | printk(KERN_ERR "BUG: using smp_processor_id() in preemptible [%08x] " | 42 | printk(KERN_ERR "BUG: using %s%s() in preemptible [%08x] code: %s/%d\n", |
42 | "code: %s/%d\n", | 43 | what1, what2, preempt_count() - 1, current->comm, current->pid); |
43 | preempt_count() - 1, current->comm, current->pid); | 44 | |
44 | print_symbol("caller is %s\n", (long)__builtin_return_address(0)); | 45 | print_symbol("caller is %s\n", (long)__builtin_return_address(0)); |
45 | dump_stack(); | 46 | dump_stack(); |
46 | 47 | ||
@@ -50,5 +51,14 @@ out: | |||
50 | return this_cpu; | 51 | return this_cpu; |
51 | } | 52 | } |
52 | 53 | ||
54 | notrace unsigned int debug_smp_processor_id(void) | ||
55 | { | ||
56 | return check_preemption_disabled("smp_processor_id", ""); | ||
57 | } | ||
53 | EXPORT_SYMBOL(debug_smp_processor_id); | 58 | EXPORT_SYMBOL(debug_smp_processor_id); |
54 | 59 | ||
60 | notrace void __this_cpu_preempt_check(const char *op) | ||
61 | { | ||
62 | check_preemption_disabled("__this_cpu_", op); | ||
63 | } | ||
64 | EXPORT_SYMBOL(__this_cpu_preempt_check); | ||