aboutsummaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
Diffstat (limited to 'lib')
-rw-r--r--lib/Kconfig14
-rw-r--r--lib/Kconfig.debug13
-rw-r--r--lib/Makefile3
-rw-r--r--lib/atomic64.c2
-rw-r--r--lib/atomic64_test.c2
-rw-r--r--lib/bitmap.c2
-rw-r--r--lib/checksum.c13
-rw-r--r--lib/cordic.c101
-rw-r--r--lib/cpumask.c4
-rw-r--r--lib/crc32.c2
-rw-r--r--lib/crc8.c86
-rw-r--r--lib/dec_and_lock.c2
-rw-r--r--lib/devres.c2
-rw-r--r--lib/fault-inject.c144
-rw-r--r--lib/iomap.c4
-rw-r--r--lib/kstrtox.c5
-rw-r--r--lib/lcm.c1
-rw-r--r--lib/plist.c7
-rw-r--r--lib/vsprintf.c26
-rw-r--r--lib/xz/xz_private.h2
20 files changed, 284 insertions, 151 deletions
diff --git a/lib/Kconfig b/lib/Kconfig
index 25c19678a30f..6c695ff9caba 100644
--- a/lib/Kconfig
+++ b/lib/Kconfig
@@ -79,6 +79,13 @@ config LIBCRC32C
79 require M here. See Castagnoli93. 79 require M here. See Castagnoli93.
80 Module will be libcrc32c. 80 Module will be libcrc32c.
81 81
82config CRC8
83 tristate "CRC8 function"
84 help
85 This option provides CRC8 function. Drivers may select this
86 when they need to do cyclic redundancy check according CRC8
87 algorithm. Module will be called crc8.
88
82config AUDIT_GENERIC 89config AUDIT_GENERIC
83 bool 90 bool
84 depends on AUDIT && !AUDIT_ARCH 91 depends on AUDIT && !AUDIT_ARCH
@@ -262,6 +269,13 @@ config AVERAGE
262 269
263 If unsure, say N. 270 If unsure, say N.
264 271
272config CORDIC
273 tristate "Cordic function"
274 help
275 The option provides arithmetic function using cordic algorithm
276 so its calculations are in fixed point. Modules can select this
277 when they require this function. Module will be called cordic.
278
265config LLIST 279config LLIST
266 bool 280 bool
267 281
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug
index dd373c8ee943..c0cb9c4bc46d 100644
--- a/lib/Kconfig.debug
+++ b/lib/Kconfig.debug
@@ -227,7 +227,7 @@ config BOOTPARAM_SOFTLOCKUP_PANIC_VALUE
227config DETECT_HUNG_TASK 227config DETECT_HUNG_TASK
228 bool "Detect Hung Tasks" 228 bool "Detect Hung Tasks"
229 depends on DEBUG_KERNEL 229 depends on DEBUG_KERNEL
230 default DETECT_SOFTLOCKUP 230 default LOCKUP_DETECTOR
231 help 231 help
232 Say Y here to enable the kernel to detect "hung tasks", 232 Say Y here to enable the kernel to detect "hung tasks",
233 which are bugs that cause the task to be stuck in 233 which are bugs that cause the task to be stuck in
@@ -648,12 +648,15 @@ config TRACE_IRQFLAGS
648 Enables hooks to interrupt enabling and disabling for 648 Enables hooks to interrupt enabling and disabling for
649 either tracing or lock debugging. 649 either tracing or lock debugging.
650 650
651config DEBUG_SPINLOCK_SLEEP 651config DEBUG_ATOMIC_SLEEP
652 bool "Spinlock debugging: sleep-inside-spinlock checking" 652 bool "Sleep inside atomic section checking"
653 select PREEMPT_COUNT
653 depends on DEBUG_KERNEL 654 depends on DEBUG_KERNEL
654 help 655 help
655 If you say Y here, various routines which may sleep will become very 656 If you say Y here, various routines which may sleep will become very
656 noisy if they are called with a spinlock held. 657 noisy if they are called inside atomic sections: when a spinlock is
658 held, inside an rcu read side critical section, inside preempt disabled
659 sections, inside an interrupt, etc...
657 660
658config DEBUG_LOCKING_API_SELFTESTS 661config DEBUG_LOCKING_API_SELFTESTS
659 bool "Locking API boot-time self-tests" 662 bool "Locking API boot-time self-tests"
@@ -866,7 +869,7 @@ config BOOT_PRINTK_DELAY
866 system, and then set "lpj=M" before setting "boot_delay=N". 869 system, and then set "lpj=M" before setting "boot_delay=N".
867 NOTE: Using this option may adversely affect SMP systems. 870 NOTE: Using this option may adversely affect SMP systems.
868 I.e., processors other than the first one may not boot up. 871 I.e., processors other than the first one may not boot up.
869 BOOT_PRINTK_DELAY also may cause DETECT_SOFTLOCKUP to detect 872 BOOT_PRINTK_DELAY also may cause LOCKUP_DETECTOR to detect
870 what it believes to be lockup conditions. 873 what it believes to be lockup conditions.
871 874
872config RCU_TORTURE_TEST 875config RCU_TORTURE_TEST
diff --git a/lib/Makefile b/lib/Makefile
index d770b817202e..6457af4a7caf 100644
--- a/lib/Makefile
+++ b/lib/Makefile
@@ -61,6 +61,7 @@ obj-$(CONFIG_CRC_ITU_T) += crc-itu-t.o
61obj-$(CONFIG_CRC32) += crc32.o 61obj-$(CONFIG_CRC32) += crc32.o
62obj-$(CONFIG_CRC7) += crc7.o 62obj-$(CONFIG_CRC7) += crc7.o
63obj-$(CONFIG_LIBCRC32C) += libcrc32c.o 63obj-$(CONFIG_LIBCRC32C) += libcrc32c.o
64obj-$(CONFIG_CRC8) += crc8.o
64obj-$(CONFIG_GENERIC_ALLOCATOR) += genalloc.o 65obj-$(CONFIG_GENERIC_ALLOCATOR) += genalloc.o
65 66
66obj-$(CONFIG_ZLIB_INFLATE) += zlib_inflate/ 67obj-$(CONFIG_ZLIB_INFLATE) += zlib_inflate/
@@ -112,6 +113,8 @@ obj-$(CONFIG_AVERAGE) += average.o
112 113
113obj-$(CONFIG_CPU_RMAP) += cpu_rmap.o 114obj-$(CONFIG_CPU_RMAP) += cpu_rmap.o
114 115
116obj-$(CONFIG_CORDIC) += cordic.o
117
115obj-$(CONFIG_LLIST) += llist.o 118obj-$(CONFIG_LLIST) += llist.o
116 119
117hostprogs-y := gen_crc32table 120hostprogs-y := gen_crc32table
diff --git a/lib/atomic64.c b/lib/atomic64.c
index a21c12bc727c..e12ae0dd08a8 100644
--- a/lib/atomic64.c
+++ b/lib/atomic64.c
@@ -14,7 +14,7 @@
14#include <linux/spinlock.h> 14#include <linux/spinlock.h>
15#include <linux/init.h> 15#include <linux/init.h>
16#include <linux/module.h> 16#include <linux/module.h>
17#include <asm/atomic.h> 17#include <linux/atomic.h>
18 18
19/* 19/*
20 * We use a hashed array of spinlocks to provide exclusive access 20 * We use a hashed array of spinlocks to provide exclusive access
diff --git a/lib/atomic64_test.c b/lib/atomic64_test.c
index 44524cc8c32a..0c33cde2a1e6 100644
--- a/lib/atomic64_test.c
+++ b/lib/atomic64_test.c
@@ -10,7 +10,7 @@
10 */ 10 */
11#include <linux/init.h> 11#include <linux/init.h>
12#include <linux/kernel.h> 12#include <linux/kernel.h>
13#include <asm/atomic.h> 13#include <linux/atomic.h>
14 14
15#define INIT(c) do { atomic64_set(&v, c); r = c; } while (0) 15#define INIT(c) do { atomic64_set(&v, c); r = c; } while (0)
16static __init int test_atomic64(void) 16static __init int test_atomic64(void)
diff --git a/lib/bitmap.c b/lib/bitmap.c
index e3c9e999501e..2f4412e4d071 100644
--- a/lib/bitmap.c
+++ b/lib/bitmap.c
@@ -754,7 +754,7 @@ static int bitmap_pos_to_ord(const unsigned long *buf, int pos, int bits)
754 * 754 *
755 * The bit positions 0 through @bits are valid positions in @buf. 755 * The bit positions 0 through @bits are valid positions in @buf.
756 */ 756 */
757static int bitmap_ord_to_pos(const unsigned long *buf, int ord, int bits) 757int bitmap_ord_to_pos(const unsigned long *buf, int ord, int bits)
758{ 758{
759 int pos = 0; 759 int pos = 0;
760 760
diff --git a/lib/checksum.c b/lib/checksum.c
index 097508732f34..8df2f91e6d98 100644
--- a/lib/checksum.c
+++ b/lib/checksum.c
@@ -49,7 +49,7 @@ static inline unsigned short from32to16(unsigned int x)
49 49
50static unsigned int do_csum(const unsigned char *buff, int len) 50static unsigned int do_csum(const unsigned char *buff, int len)
51{ 51{
52 int odd, count; 52 int odd;
53 unsigned int result = 0; 53 unsigned int result = 0;
54 54
55 if (len <= 0) 55 if (len <= 0)
@@ -64,25 +64,22 @@ static unsigned int do_csum(const unsigned char *buff, int len)
64 len--; 64 len--;
65 buff++; 65 buff++;
66 } 66 }
67 count = len >> 1; /* nr of 16-bit words.. */ 67 if (len >= 2) {
68 if (count) {
69 if (2 & (unsigned long) buff) { 68 if (2 & (unsigned long) buff) {
70 result += *(unsigned short *) buff; 69 result += *(unsigned short *) buff;
71 count--;
72 len -= 2; 70 len -= 2;
73 buff += 2; 71 buff += 2;
74 } 72 }
75 count >>= 1; /* nr of 32-bit words.. */ 73 if (len >= 4) {
76 if (count) { 74 const unsigned char *end = buff + ((unsigned)len & ~3);
77 unsigned int carry = 0; 75 unsigned int carry = 0;
78 do { 76 do {
79 unsigned int w = *(unsigned int *) buff; 77 unsigned int w = *(unsigned int *) buff;
80 count--;
81 buff += 4; 78 buff += 4;
82 result += carry; 79 result += carry;
83 result += w; 80 result += w;
84 carry = (w > result); 81 carry = (w > result);
85 } while (count); 82 } while (buff < end);
86 result += carry; 83 result += carry;
87 result = (result & 0xffff) + (result >> 16); 84 result = (result & 0xffff) + (result >> 16);
88 } 85 }
diff --git a/lib/cordic.c b/lib/cordic.c
new file mode 100644
index 000000000000..aa27a88d7e04
--- /dev/null
+++ b/lib/cordic.c
@@ -0,0 +1,101 @@
1/*
2 * Copyright (c) 2011 Broadcom Corporation
3 *
4 * Permission to use, copy, modify, and/or distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
7 *
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
11 * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
13 * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
14 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15 */
16#include <linux/module.h>
17#include <linux/cordic.h>
18
19#define CORDIC_ANGLE_GEN 39797
20#define CORDIC_PRECISION_SHIFT 16
21#define CORDIC_NUM_ITER (CORDIC_PRECISION_SHIFT + 2)
22
23#define FIXED(X) ((s32)((X) << CORDIC_PRECISION_SHIFT))
24#define FLOAT(X) (((X) >= 0) \
25 ? ((((X) >> (CORDIC_PRECISION_SHIFT - 1)) + 1) >> 1) \
26 : -((((-(X)) >> (CORDIC_PRECISION_SHIFT - 1)) + 1) >> 1))
27
28static const s32 arctan_table[] = {
29 2949120,
30 1740967,
31 919879,
32 466945,
33 234379,
34 117304,
35 58666,
36 29335,
37 14668,
38 7334,
39 3667,
40 1833,
41 917,
42 458,
43 229,
44 115,
45 57,
46 29
47};
48
49/*
50 * cordic_calc_iq() - calculates the i/q coordinate for given angle
51 *
52 * theta: angle in degrees for which i/q coordinate is to be calculated
53 * coord: function output parameter holding the i/q coordinate
54 */
55struct cordic_iq cordic_calc_iq(s32 theta)
56{
57 struct cordic_iq coord;
58 s32 angle, valtmp;
59 unsigned iter;
60 int signx = 1;
61 int signtheta;
62
63 coord.i = CORDIC_ANGLE_GEN;
64 coord.q = 0;
65 angle = 0;
66
67 theta = FIXED(theta);
68 signtheta = (theta < 0) ? -1 : 1;
69 theta = ((theta + FIXED(180) * signtheta) % FIXED(360)) -
70 FIXED(180) * signtheta;
71
72 if (FLOAT(theta) > 90) {
73 theta -= FIXED(180);
74 signx = -1;
75 } else if (FLOAT(theta) < -90) {
76 theta += FIXED(180);
77 signx = -1;
78 }
79
80 for (iter = 0; iter < CORDIC_NUM_ITER; iter++) {
81 if (theta > angle) {
82 valtmp = coord.i - (coord.q >> iter);
83 coord.q += (coord.i >> iter);
84 angle += arctan_table[iter];
85 } else {
86 valtmp = coord.i + (coord.q >> iter);
87 coord.q -= (coord.i >> iter);
88 angle -= arctan_table[iter];
89 }
90 coord.i = valtmp;
91 }
92
93 coord.i *= signx;
94 coord.q *= signx;
95 return coord;
96}
97EXPORT_SYMBOL(cordic_calc_iq);
98
99MODULE_DESCRIPTION("Cordic functions");
100MODULE_AUTHOR("Broadcom Corporation");
101MODULE_LICENSE("Dual BSD/GPL");
diff --git a/lib/cpumask.c b/lib/cpumask.c
index 05d6aca7fc19..af3e5817de98 100644
--- a/lib/cpumask.c
+++ b/lib/cpumask.c
@@ -30,7 +30,7 @@ int __any_online_cpu(const cpumask_t *mask)
30{ 30{
31 int cpu; 31 int cpu;
32 32
33 for_each_cpu_mask(cpu, *mask) { 33 for_each_cpu(cpu, mask) {
34 if (cpu_online(cpu)) 34 if (cpu_online(cpu))
35 break; 35 break;
36 } 36 }
@@ -131,7 +131,7 @@ EXPORT_SYMBOL(zalloc_cpumask_var_node);
131 */ 131 */
132bool alloc_cpumask_var(cpumask_var_t *mask, gfp_t flags) 132bool alloc_cpumask_var(cpumask_var_t *mask, gfp_t flags)
133{ 133{
134 return alloc_cpumask_var_node(mask, flags, numa_node_id()); 134 return alloc_cpumask_var_node(mask, flags, NUMA_NO_NODE);
135} 135}
136EXPORT_SYMBOL(alloc_cpumask_var); 136EXPORT_SYMBOL(alloc_cpumask_var);
137 137
diff --git a/lib/crc32.c b/lib/crc32.c
index 4855995fcde9..a6e633a48cea 100644
--- a/lib/crc32.c
+++ b/lib/crc32.c
@@ -26,7 +26,7 @@
26#include <linux/compiler.h> 26#include <linux/compiler.h>
27#include <linux/types.h> 27#include <linux/types.h>
28#include <linux/init.h> 28#include <linux/init.h>
29#include <asm/atomic.h> 29#include <linux/atomic.h>
30#include "crc32defs.h" 30#include "crc32defs.h"
31#if CRC_LE_BITS == 8 31#if CRC_LE_BITS == 8
32# define tole(x) __constant_cpu_to_le32(x) 32# define tole(x) __constant_cpu_to_le32(x)
diff --git a/lib/crc8.c b/lib/crc8.c
new file mode 100644
index 000000000000..87b59cafdb83
--- /dev/null
+++ b/lib/crc8.c
@@ -0,0 +1,86 @@
1/*
2 * Copyright (c) 2011 Broadcom Corporation
3 *
4 * Permission to use, copy, modify, and/or distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
7 *
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
11 * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
13 * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
14 * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15 */
16
17#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
18
19#include <linux/module.h>
20#include <linux/crc8.h>
21#include <linux/printk.h>
22
23/*
24 * crc8_populate_msb - fill crc table for given polynomial in reverse bit order.
25 *
26 * table: table to be filled.
27 * polynomial: polynomial for which table is to be filled.
28 */
29void crc8_populate_msb(u8 table[CRC8_TABLE_SIZE], u8 polynomial)
30{
31 int i, j;
32 const u8 msbit = 0x80;
33 u8 t = msbit;
34
35 table[0] = 0;
36
37 for (i = 1; i < CRC8_TABLE_SIZE; i *= 2) {
38 t = (t << 1) ^ (t & msbit ? polynomial : 0);
39 for (j = 0; j < i; j++)
40 table[i+j] = table[j] ^ t;
41 }
42}
43EXPORT_SYMBOL(crc8_populate_msb);
44
45/*
46 * crc8_populate_lsb - fill crc table for given polynomial in regular bit order.
47 *
48 * table: table to be filled.
49 * polynomial: polynomial for which table is to be filled.
50 */
51void crc8_populate_lsb(u8 table[CRC8_TABLE_SIZE], u8 polynomial)
52{
53 int i, j;
54 u8 t = 1;
55
56 table[0] = 0;
57
58 for (i = (CRC8_TABLE_SIZE >> 1); i; i >>= 1) {
59 t = (t >> 1) ^ (t & 1 ? polynomial : 0);
60 for (j = 0; j < CRC8_TABLE_SIZE; j += 2*i)
61 table[i+j] = table[j] ^ t;
62 }
63}
64EXPORT_SYMBOL(crc8_populate_lsb);
65
66/*
67 * crc8 - calculate a crc8 over the given input data.
68 *
69 * table: crc table used for calculation.
70 * pdata: pointer to data buffer.
71 * nbytes: number of bytes in data buffer.
72 * crc: previous returned crc8 value.
73 */
74u8 crc8(const u8 table[CRC8_TABLE_SIZE], u8 *pdata, size_t nbytes, u8 crc)
75{
76 /* loop over the buffer data */
77 while (nbytes-- > 0)
78 crc = table[(crc ^ *pdata++) & 0xff];
79
80 return crc;
81}
82EXPORT_SYMBOL(crc8);
83
84MODULE_DESCRIPTION("CRC8 (by Williams, Ross N.) function");
85MODULE_AUTHOR("Broadcom Corporation");
86MODULE_LICENSE("Dual BSD/GPL");
diff --git a/lib/dec_and_lock.c b/lib/dec_and_lock.c
index e73822aa6e9a..b5257725daad 100644
--- a/lib/dec_and_lock.c
+++ b/lib/dec_and_lock.c
@@ -1,6 +1,6 @@
1#include <linux/module.h> 1#include <linux/module.h>
2#include <linux/spinlock.h> 2#include <linux/spinlock.h>
3#include <asm/atomic.h> 3#include <linux/atomic.h>
4 4
5/* 5/*
6 * This is an implementation of the notion of "decrement a 6 * This is an implementation of the notion of "decrement a
diff --git a/lib/devres.c b/lib/devres.c
index 6efddf53b90c..7c0e953a7486 100644
--- a/lib/devres.c
+++ b/lib/devres.c
@@ -79,9 +79,9 @@ EXPORT_SYMBOL(devm_ioremap_nocache);
79 */ 79 */
80void devm_iounmap(struct device *dev, void __iomem *addr) 80void devm_iounmap(struct device *dev, void __iomem *addr)
81{ 81{
82 iounmap(addr);
83 WARN_ON(devres_destroy(dev, devm_ioremap_release, devm_ioremap_match, 82 WARN_ON(devres_destroy(dev, devm_ioremap_release, devm_ioremap_match,
84 (void *)addr)); 83 (void *)addr));
84 iounmap(addr);
85} 85}
86EXPORT_SYMBOL(devm_iounmap); 86EXPORT_SYMBOL(devm_iounmap);
87 87
diff --git a/lib/fault-inject.c b/lib/fault-inject.c
index 7e65af70635e..2577b121c7c1 100644
--- a/lib/fault-inject.c
+++ b/lib/fault-inject.c
@@ -8,7 +8,6 @@
8#include <linux/module.h> 8#include <linux/module.h>
9#include <linux/interrupt.h> 9#include <linux/interrupt.h>
10#include <linux/stacktrace.h> 10#include <linux/stacktrace.h>
11#include <linux/kallsyms.h>
12#include <linux/fault-inject.h> 11#include <linux/fault-inject.h>
13 12
14/* 13/*
@@ -140,16 +139,6 @@ static int debugfs_ul_set(void *data, u64 val)
140 return 0; 139 return 0;
141} 140}
142 141
143#ifdef CONFIG_FAULT_INJECTION_STACKTRACE_FILTER
144static int debugfs_ul_set_MAX_STACK_TRACE_DEPTH(void *data, u64 val)
145{
146 *(unsigned long *)data =
147 val < MAX_STACK_TRACE_DEPTH ?
148 val : MAX_STACK_TRACE_DEPTH;
149 return 0;
150}
151#endif /* CONFIG_FAULT_INJECTION_STACKTRACE_FILTER */
152
153static int debugfs_ul_get(void *data, u64 *val) 142static int debugfs_ul_get(void *data, u64 *val)
154{ 143{
155 *val = *(unsigned long *)data; 144 *val = *(unsigned long *)data;
@@ -165,16 +154,26 @@ static struct dentry *debugfs_create_ul(const char *name, mode_t mode,
165} 154}
166 155
167#ifdef CONFIG_FAULT_INJECTION_STACKTRACE_FILTER 156#ifdef CONFIG_FAULT_INJECTION_STACKTRACE_FILTER
168DEFINE_SIMPLE_ATTRIBUTE(fops_ul_MAX_STACK_TRACE_DEPTH, debugfs_ul_get,
169 debugfs_ul_set_MAX_STACK_TRACE_DEPTH, "%llu\n");
170 157
171static struct dentry *debugfs_create_ul_MAX_STACK_TRACE_DEPTH( 158static int debugfs_stacktrace_depth_set(void *data, u64 val)
159{
160 *(unsigned long *)data =
161 min_t(unsigned long, val, MAX_STACK_TRACE_DEPTH);
162
163 return 0;
164}
165
166DEFINE_SIMPLE_ATTRIBUTE(fops_stacktrace_depth, debugfs_ul_get,
167 debugfs_stacktrace_depth_set, "%llu\n");
168
169static struct dentry *debugfs_create_stacktrace_depth(
172 const char *name, mode_t mode, 170 const char *name, mode_t mode,
173 struct dentry *parent, unsigned long *value) 171 struct dentry *parent, unsigned long *value)
174{ 172{
175 return debugfs_create_file(name, mode, parent, value, 173 return debugfs_create_file(name, mode, parent, value,
176 &fops_ul_MAX_STACK_TRACE_DEPTH); 174 &fops_stacktrace_depth);
177} 175}
176
178#endif /* CONFIG_FAULT_INJECTION_STACKTRACE_FILTER */ 177#endif /* CONFIG_FAULT_INJECTION_STACKTRACE_FILTER */
179 178
180static int debugfs_atomic_t_set(void *data, u64 val) 179static int debugfs_atomic_t_set(void *data, u64 val)
@@ -200,48 +199,7 @@ static struct dentry *debugfs_create_atomic_t(const char *name, mode_t mode,
200 199
201void cleanup_fault_attr_dentries(struct fault_attr *attr) 200void cleanup_fault_attr_dentries(struct fault_attr *attr)
202{ 201{
203 debugfs_remove(attr->dentries.probability_file); 202 debugfs_remove_recursive(attr->dir);
204 attr->dentries.probability_file = NULL;
205
206 debugfs_remove(attr->dentries.interval_file);
207 attr->dentries.interval_file = NULL;
208
209 debugfs_remove(attr->dentries.times_file);
210 attr->dentries.times_file = NULL;
211
212 debugfs_remove(attr->dentries.space_file);
213 attr->dentries.space_file = NULL;
214
215 debugfs_remove(attr->dentries.verbose_file);
216 attr->dentries.verbose_file = NULL;
217
218 debugfs_remove(attr->dentries.task_filter_file);
219 attr->dentries.task_filter_file = NULL;
220
221#ifdef CONFIG_FAULT_INJECTION_STACKTRACE_FILTER
222
223 debugfs_remove(attr->dentries.stacktrace_depth_file);
224 attr->dentries.stacktrace_depth_file = NULL;
225
226 debugfs_remove(attr->dentries.require_start_file);
227 attr->dentries.require_start_file = NULL;
228
229 debugfs_remove(attr->dentries.require_end_file);
230 attr->dentries.require_end_file = NULL;
231
232 debugfs_remove(attr->dentries.reject_start_file);
233 attr->dentries.reject_start_file = NULL;
234
235 debugfs_remove(attr->dentries.reject_end_file);
236 attr->dentries.reject_end_file = NULL;
237
238#endif /* CONFIG_FAULT_INJECTION_STACKTRACE_FILTER */
239
240 if (attr->dentries.dir)
241 WARN_ON(!simple_empty(attr->dentries.dir));
242
243 debugfs_remove(attr->dentries.dir);
244 attr->dentries.dir = NULL;
245} 203}
246 204
247int init_fault_attr_dentries(struct fault_attr *attr, const char *name) 205int init_fault_attr_dentries(struct fault_attr *attr, const char *name)
@@ -249,66 +207,46 @@ int init_fault_attr_dentries(struct fault_attr *attr, const char *name)
249 mode_t mode = S_IFREG | S_IRUSR | S_IWUSR; 207 mode_t mode = S_IFREG | S_IRUSR | S_IWUSR;
250 struct dentry *dir; 208 struct dentry *dir;
251 209
252 memset(&attr->dentries, 0, sizeof(attr->dentries));
253
254 dir = debugfs_create_dir(name, NULL); 210 dir = debugfs_create_dir(name, NULL);
255 if (!dir) 211 if (!dir)
256 goto fail; 212 return -ENOMEM;
257 attr->dentries.dir = dir;
258
259 attr->dentries.probability_file =
260 debugfs_create_ul("probability", mode, dir, &attr->probability);
261 213
262 attr->dentries.interval_file = 214 attr->dir = dir;
263 debugfs_create_ul("interval", mode, dir, &attr->interval);
264 215
265 attr->dentries.times_file = 216 if (!debugfs_create_ul("probability", mode, dir, &attr->probability))
266 debugfs_create_atomic_t("times", mode, dir, &attr->times); 217 goto fail;
267 218 if (!debugfs_create_ul("interval", mode, dir, &attr->interval))
268 attr->dentries.space_file = 219 goto fail;
269 debugfs_create_atomic_t("space", mode, dir, &attr->space); 220 if (!debugfs_create_atomic_t("times", mode, dir, &attr->times))
270 221 goto fail;
271 attr->dentries.verbose_file = 222 if (!debugfs_create_atomic_t("space", mode, dir, &attr->space))
272 debugfs_create_ul("verbose", mode, dir, &attr->verbose); 223 goto fail;
273 224 if (!debugfs_create_ul("verbose", mode, dir, &attr->verbose))
274 attr->dentries.task_filter_file = debugfs_create_bool("task-filter", 225 goto fail;
275 mode, dir, &attr->task_filter); 226 if (!debugfs_create_bool("task-filter", mode, dir, &attr->task_filter))
276
277 if (!attr->dentries.probability_file || !attr->dentries.interval_file ||
278 !attr->dentries.times_file || !attr->dentries.space_file ||
279 !attr->dentries.verbose_file || !attr->dentries.task_filter_file)
280 goto fail; 227 goto fail;
281 228
282#ifdef CONFIG_FAULT_INJECTION_STACKTRACE_FILTER 229#ifdef CONFIG_FAULT_INJECTION_STACKTRACE_FILTER
283 230
284 attr->dentries.stacktrace_depth_file = 231 if (!debugfs_create_stacktrace_depth("stacktrace-depth", mode, dir,
285 debugfs_create_ul_MAX_STACK_TRACE_DEPTH( 232 &attr->stacktrace_depth))
286 "stacktrace-depth", mode, dir, &attr->stacktrace_depth); 233 goto fail;
287 234 if (!debugfs_create_ul("require-start", mode, dir,
288 attr->dentries.require_start_file = 235 &attr->require_start))
289 debugfs_create_ul("require-start", mode, dir, &attr->require_start); 236 goto fail;
290 237 if (!debugfs_create_ul("require-end", mode, dir, &attr->require_end))
291 attr->dentries.require_end_file = 238 goto fail;
292 debugfs_create_ul("require-end", mode, dir, &attr->require_end); 239 if (!debugfs_create_ul("reject-start", mode, dir, &attr->reject_start))
293 240 goto fail;
294 attr->dentries.reject_start_file = 241 if (!debugfs_create_ul("reject-end", mode, dir, &attr->reject_end))
295 debugfs_create_ul("reject-start", mode, dir, &attr->reject_start);
296
297 attr->dentries.reject_end_file =
298 debugfs_create_ul("reject-end", mode, dir, &attr->reject_end);
299
300 if (!attr->dentries.stacktrace_depth_file ||
301 !attr->dentries.require_start_file ||
302 !attr->dentries.require_end_file ||
303 !attr->dentries.reject_start_file ||
304 !attr->dentries.reject_end_file)
305 goto fail; 242 goto fail;
306 243
307#endif /* CONFIG_FAULT_INJECTION_STACKTRACE_FILTER */ 244#endif /* CONFIG_FAULT_INJECTION_STACKTRACE_FILTER */
308 245
309 return 0; 246 return 0;
310fail: 247fail:
311 cleanup_fault_attr_dentries(attr); 248 debugfs_remove_recursive(attr->dir);
249
312 return -ENOMEM; 250 return -ENOMEM;
313} 251}
314 252
diff --git a/lib/iomap.c b/lib/iomap.c
index d32229385151..5dbcb4b2d864 100644
--- a/lib/iomap.c
+++ b/lib/iomap.c
@@ -224,6 +224,7 @@ EXPORT_SYMBOL(iowrite8_rep);
224EXPORT_SYMBOL(iowrite16_rep); 224EXPORT_SYMBOL(iowrite16_rep);
225EXPORT_SYMBOL(iowrite32_rep); 225EXPORT_SYMBOL(iowrite32_rep);
226 226
227#ifdef CONFIG_HAS_IOPORT
227/* Create a virtual mapping cookie for an IO port range */ 228/* Create a virtual mapping cookie for an IO port range */
228void __iomem *ioport_map(unsigned long port, unsigned int nr) 229void __iomem *ioport_map(unsigned long port, unsigned int nr)
229{ 230{
@@ -238,7 +239,9 @@ void ioport_unmap(void __iomem *addr)
238} 239}
239EXPORT_SYMBOL(ioport_map); 240EXPORT_SYMBOL(ioport_map);
240EXPORT_SYMBOL(ioport_unmap); 241EXPORT_SYMBOL(ioport_unmap);
242#endif /* CONFIG_HAS_IOPORT */
241 243
244#ifdef CONFIG_PCI
242/** 245/**
243 * pci_iomap - create a virtual mapping cookie for a PCI BAR 246 * pci_iomap - create a virtual mapping cookie for a PCI BAR
244 * @dev: PCI device that owns the BAR 247 * @dev: PCI device that owns the BAR
@@ -280,3 +283,4 @@ void pci_iounmap(struct pci_dev *dev, void __iomem * addr)
280} 283}
281EXPORT_SYMBOL(pci_iomap); 284EXPORT_SYMBOL(pci_iomap);
282EXPORT_SYMBOL(pci_iounmap); 285EXPORT_SYMBOL(pci_iounmap);
286#endif /* CONFIG_PCI */
diff --git a/lib/kstrtox.c b/lib/kstrtox.c
index 2dbae88090ac..5e066759f551 100644
--- a/lib/kstrtox.c
+++ b/lib/kstrtox.c
@@ -19,11 +19,6 @@
19#include <linux/types.h> 19#include <linux/types.h>
20#include <asm/uaccess.h> 20#include <asm/uaccess.h>
21 21
22static inline char _tolower(const char c)
23{
24 return c | 0x20;
25}
26
27static int _kstrtoull(const char *s, unsigned int base, unsigned long long *res) 22static int _kstrtoull(const char *s, unsigned int base, unsigned long long *res)
28{ 23{
29 unsigned long long acc; 24 unsigned long long acc;
diff --git a/lib/lcm.c b/lib/lcm.c
index 157cd88a6ffc..10b5cfcacf6b 100644
--- a/lib/lcm.c
+++ b/lib/lcm.c
@@ -1,6 +1,7 @@
1#include <linux/kernel.h> 1#include <linux/kernel.h>
2#include <linux/gcd.h> 2#include <linux/gcd.h>
3#include <linux/module.h> 3#include <linux/module.h>
4#include <linux/lcm.h>
4 5
5/* Lowest common multiple */ 6/* Lowest common multiple */
6unsigned long lcm(unsigned long a, unsigned long b) 7unsigned long lcm(unsigned long a, unsigned long b)
diff --git a/lib/plist.c b/lib/plist.c
index 0ae7e6431726..a0a4da489c22 100644
--- a/lib/plist.c
+++ b/lib/plist.c
@@ -56,11 +56,6 @@ static void plist_check_list(struct list_head *top)
56 56
57static void plist_check_head(struct plist_head *head) 57static void plist_check_head(struct plist_head *head)
58{ 58{
59 WARN_ON(head != &test_head && !head->rawlock && !head->spinlock);
60 if (head->rawlock)
61 WARN_ON_SMP(!raw_spin_is_locked(head->rawlock));
62 if (head->spinlock)
63 WARN_ON_SMP(!spin_is_locked(head->spinlock));
64 if (!plist_head_empty(head)) 59 if (!plist_head_empty(head))
65 plist_check_list(&plist_first(head)->prio_list); 60 plist_check_list(&plist_first(head)->prio_list);
66 plist_check_list(&head->node_list); 61 plist_check_list(&head->node_list);
@@ -180,7 +175,7 @@ static int __init plist_test(void)
180 unsigned int r = local_clock(); 175 unsigned int r = local_clock();
181 176
182 printk(KERN_INFO "start plist test\n"); 177 printk(KERN_INFO "start plist test\n");
183 plist_head_init(&test_head, NULL); 178 plist_head_init(&test_head);
184 for (i = 0; i < ARRAY_SIZE(test_node); i++) 179 for (i = 0; i < ARRAY_SIZE(test_node); i++)
185 plist_node_init(test_node + i, 0); 180 plist_node_init(test_node + i, 0);
186 181
diff --git a/lib/vsprintf.c b/lib/vsprintf.c
index 4365df31a1d5..d7222a9c8267 100644
--- a/lib/vsprintf.c
+++ b/lib/vsprintf.c
@@ -31,13 +31,10 @@
31#include <asm/div64.h> 31#include <asm/div64.h>
32#include <asm/sections.h> /* for dereference_function_descriptor() */ 32#include <asm/sections.h> /* for dereference_function_descriptor() */
33 33
34/* Works only for digits and letters, but small and fast */
35#define TOLOWER(x) ((x) | 0x20)
36
37static unsigned int simple_guess_base(const char *cp) 34static unsigned int simple_guess_base(const char *cp)
38{ 35{
39 if (cp[0] == '0') { 36 if (cp[0] == '0') {
40 if (TOLOWER(cp[1]) == 'x' && isxdigit(cp[2])) 37 if (_tolower(cp[1]) == 'x' && isxdigit(cp[2]))
41 return 16; 38 return 16;
42 else 39 else
43 return 8; 40 return 8;
@@ -59,13 +56,13 @@ unsigned long long simple_strtoull(const char *cp, char **endp, unsigned int bas
59 if (!base) 56 if (!base)
60 base = simple_guess_base(cp); 57 base = simple_guess_base(cp);
61 58
62 if (base == 16 && cp[0] == '0' && TOLOWER(cp[1]) == 'x') 59 if (base == 16 && cp[0] == '0' && _tolower(cp[1]) == 'x')
63 cp += 2; 60 cp += 2;
64 61
65 while (isxdigit(*cp)) { 62 while (isxdigit(*cp)) {
66 unsigned int value; 63 unsigned int value;
67 64
68 value = isdigit(*cp) ? *cp - '0' : TOLOWER(*cp) - 'a' + 10; 65 value = isdigit(*cp) ? *cp - '0' : _tolower(*cp) - 'a' + 10;
69 if (value >= base) 66 if (value >= base)
70 break; 67 break;
71 result = result * base + value; 68 result = result * base + value;
@@ -1036,8 +1033,8 @@ precision:
1036qualifier: 1033qualifier:
1037 /* get the conversion qualifier */ 1034 /* get the conversion qualifier */
1038 spec->qualifier = -1; 1035 spec->qualifier = -1;
1039 if (*fmt == 'h' || TOLOWER(*fmt) == 'l' || 1036 if (*fmt == 'h' || _tolower(*fmt) == 'l' ||
1040 TOLOWER(*fmt) == 'z' || *fmt == 't') { 1037 _tolower(*fmt) == 'z' || *fmt == 't') {
1041 spec->qualifier = *fmt++; 1038 spec->qualifier = *fmt++;
1042 if (unlikely(spec->qualifier == *fmt)) { 1039 if (unlikely(spec->qualifier == *fmt)) {
1043 if (spec->qualifier == 'l') { 1040 if (spec->qualifier == 'l') {
@@ -1104,7 +1101,7 @@ qualifier:
1104 spec->type = FORMAT_TYPE_LONG; 1101 spec->type = FORMAT_TYPE_LONG;
1105 else 1102 else
1106 spec->type = FORMAT_TYPE_ULONG; 1103 spec->type = FORMAT_TYPE_ULONG;
1107 } else if (TOLOWER(spec->qualifier) == 'z') { 1104 } else if (_tolower(spec->qualifier) == 'z') {
1108 spec->type = FORMAT_TYPE_SIZE_T; 1105 spec->type = FORMAT_TYPE_SIZE_T;
1109 } else if (spec->qualifier == 't') { 1106 } else if (spec->qualifier == 't') {
1110 spec->type = FORMAT_TYPE_PTRDIFF; 1107 spec->type = FORMAT_TYPE_PTRDIFF;
@@ -1149,8 +1146,7 @@ qualifier:
1149 * %pi4 print an IPv4 address with leading zeros 1146 * %pi4 print an IPv4 address with leading zeros
1150 * %pI6 print an IPv6 address with colons 1147 * %pI6 print an IPv6 address with colons
1151 * %pi6 print an IPv6 address without colons 1148 * %pi6 print an IPv6 address without colons
1152 * %pI6c print an IPv6 address as specified by 1149 * %pI6c print an IPv6 address as specified by RFC 5952
1153 * http://tools.ietf.org/html/draft-ietf-6man-text-addr-representation-00
1154 * %pU[bBlL] print a UUID/GUID in big or little endian using lower or upper 1150 * %pU[bBlL] print a UUID/GUID in big or little endian using lower or upper
1155 * case. 1151 * case.
1156 * %n is ignored 1152 * %n is ignored
@@ -1263,7 +1259,7 @@ int vsnprintf(char *buf, size_t size, const char *fmt, va_list args)
1263 if (qualifier == 'l') { 1259 if (qualifier == 'l') {
1264 long *ip = va_arg(args, long *); 1260 long *ip = va_arg(args, long *);
1265 *ip = (str - buf); 1261 *ip = (str - buf);
1266 } else if (TOLOWER(qualifier) == 'z') { 1262 } else if (_tolower(qualifier) == 'z') {
1267 size_t *ip = va_arg(args, size_t *); 1263 size_t *ip = va_arg(args, size_t *);
1268 *ip = (str - buf); 1264 *ip = (str - buf);
1269 } else { 1265 } else {
@@ -1550,7 +1546,7 @@ do { \
1550 void *skip_arg; 1546 void *skip_arg;
1551 if (qualifier == 'l') 1547 if (qualifier == 'l')
1552 skip_arg = va_arg(args, long *); 1548 skip_arg = va_arg(args, long *);
1553 else if (TOLOWER(qualifier) == 'z') 1549 else if (_tolower(qualifier) == 'z')
1554 skip_arg = va_arg(args, size_t *); 1550 skip_arg = va_arg(args, size_t *);
1555 else 1551 else
1556 skip_arg = va_arg(args, int *); 1552 skip_arg = va_arg(args, int *);
@@ -1856,8 +1852,8 @@ int vsscanf(const char *buf, const char *fmt, va_list args)
1856 1852
1857 /* get conversion qualifier */ 1853 /* get conversion qualifier */
1858 qualifier = -1; 1854 qualifier = -1;
1859 if (*fmt == 'h' || TOLOWER(*fmt) == 'l' || 1855 if (*fmt == 'h' || _tolower(*fmt) == 'l' ||
1860 TOLOWER(*fmt) == 'z') { 1856 _tolower(*fmt) == 'z') {
1861 qualifier = *fmt++; 1857 qualifier = *fmt++;
1862 if (unlikely(qualifier == *fmt)) { 1858 if (unlikely(qualifier == *fmt)) {
1863 if (qualifier == 'h') { 1859 if (qualifier == 'h') {
diff --git a/lib/xz/xz_private.h b/lib/xz/xz_private.h
index a65633e06962..482b90f363fe 100644
--- a/lib/xz/xz_private.h
+++ b/lib/xz/xz_private.h
@@ -12,7 +12,7 @@
12 12
13#ifdef __KERNEL__ 13#ifdef __KERNEL__
14# include <linux/xz.h> 14# include <linux/xz.h>
15# include <asm/byteorder.h> 15# include <linux/kernel.h>
16# include <asm/unaligned.h> 16# include <asm/unaligned.h>
17 /* XZ_PREBOOT may be defined only via decompress_unxz.c. */ 17 /* XZ_PREBOOT may be defined only via decompress_unxz.c. */
18# ifndef XZ_PREBOOT 18# ifndef XZ_PREBOOT