diff options
author | Ingo Molnar <mingo@kernel.org> | 2016-07-27 06:35:35 -0400 |
---|---|---|
committer | Ingo Molnar <mingo@kernel.org> | 2016-07-27 06:35:35 -0400 |
commit | df15929f8f5c69e987c31bf016eca4a38dba46f0 (patch) | |
tree | cfb5fe5e8ebff4cabd70557a304f355546943cc9 /lib | |
parent | efaad554b4ffae1840a2759e09e21325ddbc8b05 (diff) | |
parent | 37e13a1ebe32c4fbfbdb5413f42eb6e71d8b28a4 (diff) |
Merge branch 'linus' into x86/microcode, to pick up merge window changes
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Kconfig.debug | 33 | ||||
-rw-r--r-- | lib/Makefile | 5 | ||||
-rw-r--r-- | lib/atomic64.c | 32 | ||||
-rw-r--r-- | lib/atomic64_test.c | 34 | ||||
-rw-r--r-- | lib/bitmap.c | 2 | ||||
-rw-r--r-- | lib/hweight.c | 4 | ||||
-rw-r--r-- | lib/random32.c | 1 |
7 files changed, 67 insertions, 44 deletions
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index b9cfdbfae9aa..805b7048a1bd 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug | |||
@@ -1307,22 +1307,6 @@ config RCU_PERF_TEST | |||
1307 | Say M if you want the RCU performance tests to build as a module. | 1307 | Say M if you want the RCU performance tests to build as a module. |
1308 | Say N if you are unsure. | 1308 | Say N if you are unsure. |
1309 | 1309 | ||
1310 | config RCU_PERF_TEST_RUNNABLE | ||
1311 | bool "performance tests for RCU runnable by default" | ||
1312 | depends on RCU_PERF_TEST = y | ||
1313 | default n | ||
1314 | help | ||
1315 | This option provides a way to build the RCU performance tests | ||
1316 | directly into the kernel without them starting up at boot time. | ||
1317 | You can use /sys/module to manually override this setting. | ||
1318 | This /proc file is available only when the RCU performance | ||
1319 | tests have been built into the kernel. | ||
1320 | |||
1321 | Say Y here if you want the RCU performance tests to start during | ||
1322 | boot (you probably don't). | ||
1323 | Say N here if you want the RCU performance tests to start only | ||
1324 | after being manually enabled via /sys/module. | ||
1325 | |||
1326 | config RCU_TORTURE_TEST | 1310 | config RCU_TORTURE_TEST |
1327 | tristate "torture tests for RCU" | 1311 | tristate "torture tests for RCU" |
1328 | depends on DEBUG_KERNEL | 1312 | depends on DEBUG_KERNEL |
@@ -1340,23 +1324,6 @@ config RCU_TORTURE_TEST | |||
1340 | Say M if you want the RCU torture tests to build as a module. | 1324 | Say M if you want the RCU torture tests to build as a module. |
1341 | Say N if you are unsure. | 1325 | Say N if you are unsure. |
1342 | 1326 | ||
1343 | config RCU_TORTURE_TEST_RUNNABLE | ||
1344 | bool "torture tests for RCU runnable by default" | ||
1345 | depends on RCU_TORTURE_TEST = y | ||
1346 | default n | ||
1347 | help | ||
1348 | This option provides a way to build the RCU torture tests | ||
1349 | directly into the kernel without them starting up at boot | ||
1350 | time. You can use /proc/sys/kernel/rcutorture_runnable | ||
1351 | to manually override this setting. This /proc file is | ||
1352 | available only when the RCU torture tests have been built | ||
1353 | into the kernel. | ||
1354 | |||
1355 | Say Y here if you want the RCU torture tests to start during | ||
1356 | boot (you probably don't). | ||
1357 | Say N here if you want the RCU torture tests to start only | ||
1358 | after being manually enabled via /proc. | ||
1359 | |||
1360 | config RCU_TORTURE_TEST_SLOW_PREINIT | 1327 | config RCU_TORTURE_TEST_SLOW_PREINIT |
1361 | bool "Slow down RCU grace-period pre-initialization to expose races" | 1328 | bool "Slow down RCU grace-period pre-initialization to expose races" |
1362 | depends on RCU_TORTURE_TEST | 1329 | depends on RCU_TORTURE_TEST |
diff --git a/lib/Makefile b/lib/Makefile index ff6a7a6c6395..07d06a8b9788 100644 --- a/lib/Makefile +++ b/lib/Makefile | |||
@@ -15,9 +15,6 @@ KCOV_INSTRUMENT_rbtree.o := n | |||
15 | KCOV_INSTRUMENT_list_debug.o := n | 15 | KCOV_INSTRUMENT_list_debug.o := n |
16 | KCOV_INSTRUMENT_debugobjects.o := n | 16 | KCOV_INSTRUMENT_debugobjects.o := n |
17 | KCOV_INSTRUMENT_dynamic_debug.o := n | 17 | KCOV_INSTRUMENT_dynamic_debug.o := n |
18 | # Kernel does not boot if we instrument this file as it uses custom calling | ||
19 | # convention (see CONFIG_ARCH_HWEIGHT_CFLAGS). | ||
20 | KCOV_INSTRUMENT_hweight.o := n | ||
21 | 18 | ||
22 | lib-y := ctype.o string.o vsprintf.o cmdline.o \ | 19 | lib-y := ctype.o string.o vsprintf.o cmdline.o \ |
23 | rbtree.o radix-tree.o dump_stack.o timerqueue.o\ | 20 | rbtree.o radix-tree.o dump_stack.o timerqueue.o\ |
@@ -74,8 +71,6 @@ obj-$(CONFIG_HAS_IOMEM) += iomap_copy.o devres.o | |||
74 | obj-$(CONFIG_CHECK_SIGNATURE) += check_signature.o | 71 | obj-$(CONFIG_CHECK_SIGNATURE) += check_signature.o |
75 | obj-$(CONFIG_DEBUG_LOCKING_API_SELFTESTS) += locking-selftest.o | 72 | obj-$(CONFIG_DEBUG_LOCKING_API_SELFTESTS) += locking-selftest.o |
76 | 73 | ||
77 | GCOV_PROFILE_hweight.o := n | ||
78 | CFLAGS_hweight.o = $(subst $(quote),,$(CONFIG_ARCH_HWEIGHT_CFLAGS)) | ||
79 | obj-$(CONFIG_GENERIC_HWEIGHT) += hweight.o | 74 | obj-$(CONFIG_GENERIC_HWEIGHT) += hweight.o |
80 | 75 | ||
81 | obj-$(CONFIG_BTREE) += btree.o | 76 | obj-$(CONFIG_BTREE) += btree.o |
diff --git a/lib/atomic64.c b/lib/atomic64.c index 2886ebac6567..53c2d5edc826 100644 --- a/lib/atomic64.c +++ b/lib/atomic64.c | |||
@@ -96,17 +96,41 @@ long long atomic64_##op##_return(long long a, atomic64_t *v) \ | |||
96 | } \ | 96 | } \ |
97 | EXPORT_SYMBOL(atomic64_##op##_return); | 97 | EXPORT_SYMBOL(atomic64_##op##_return); |
98 | 98 | ||
99 | #define ATOMIC64_FETCH_OP(op, c_op) \ | ||
100 | long long atomic64_fetch_##op(long long a, atomic64_t *v) \ | ||
101 | { \ | ||
102 | unsigned long flags; \ | ||
103 | raw_spinlock_t *lock = lock_addr(v); \ | ||
104 | long long val; \ | ||
105 | \ | ||
106 | raw_spin_lock_irqsave(lock, flags); \ | ||
107 | val = v->counter; \ | ||
108 | v->counter c_op a; \ | ||
109 | raw_spin_unlock_irqrestore(lock, flags); \ | ||
110 | return val; \ | ||
111 | } \ | ||
112 | EXPORT_SYMBOL(atomic64_fetch_##op); | ||
113 | |||
99 | #define ATOMIC64_OPS(op, c_op) \ | 114 | #define ATOMIC64_OPS(op, c_op) \ |
100 | ATOMIC64_OP(op, c_op) \ | 115 | ATOMIC64_OP(op, c_op) \ |
101 | ATOMIC64_OP_RETURN(op, c_op) | 116 | ATOMIC64_OP_RETURN(op, c_op) \ |
117 | ATOMIC64_FETCH_OP(op, c_op) | ||
102 | 118 | ||
103 | ATOMIC64_OPS(add, +=) | 119 | ATOMIC64_OPS(add, +=) |
104 | ATOMIC64_OPS(sub, -=) | 120 | ATOMIC64_OPS(sub, -=) |
105 | ATOMIC64_OP(and, &=) | ||
106 | ATOMIC64_OP(or, |=) | ||
107 | ATOMIC64_OP(xor, ^=) | ||
108 | 121 | ||
109 | #undef ATOMIC64_OPS | 122 | #undef ATOMIC64_OPS |
123 | #define ATOMIC64_OPS(op, c_op) \ | ||
124 | ATOMIC64_OP(op, c_op) \ | ||
125 | ATOMIC64_OP_RETURN(op, c_op) \ | ||
126 | ATOMIC64_FETCH_OP(op, c_op) | ||
127 | |||
128 | ATOMIC64_OPS(and, &=) | ||
129 | ATOMIC64_OPS(or, |=) | ||
130 | ATOMIC64_OPS(xor, ^=) | ||
131 | |||
132 | #undef ATOMIC64_OPS | ||
133 | #undef ATOMIC64_FETCH_OP | ||
110 | #undef ATOMIC64_OP_RETURN | 134 | #undef ATOMIC64_OP_RETURN |
111 | #undef ATOMIC64_OP | 135 | #undef ATOMIC64_OP |
112 | 136 | ||
diff --git a/lib/atomic64_test.c b/lib/atomic64_test.c index 123481814320..dbb369145dda 100644 --- a/lib/atomic64_test.c +++ b/lib/atomic64_test.c | |||
@@ -53,11 +53,25 @@ do { \ | |||
53 | BUG_ON(atomic##bit##_read(&v) != r); \ | 53 | BUG_ON(atomic##bit##_read(&v) != r); \ |
54 | } while (0) | 54 | } while (0) |
55 | 55 | ||
56 | #define TEST_FETCH(bit, op, c_op, val) \ | ||
57 | do { \ | ||
58 | atomic##bit##_set(&v, v0); \ | ||
59 | r = v0; \ | ||
60 | r c_op val; \ | ||
61 | BUG_ON(atomic##bit##_##op(val, &v) != v0); \ | ||
62 | BUG_ON(atomic##bit##_read(&v) != r); \ | ||
63 | } while (0) | ||
64 | |||
56 | #define RETURN_FAMILY_TEST(bit, op, c_op, val) \ | 65 | #define RETURN_FAMILY_TEST(bit, op, c_op, val) \ |
57 | do { \ | 66 | do { \ |
58 | FAMILY_TEST(TEST_RETURN, bit, op, c_op, val); \ | 67 | FAMILY_TEST(TEST_RETURN, bit, op, c_op, val); \ |
59 | } while (0) | 68 | } while (0) |
60 | 69 | ||
70 | #define FETCH_FAMILY_TEST(bit, op, c_op, val) \ | ||
71 | do { \ | ||
72 | FAMILY_TEST(TEST_FETCH, bit, op, c_op, val); \ | ||
73 | } while (0) | ||
74 | |||
61 | #define TEST_ARGS(bit, op, init, ret, expect, args...) \ | 75 | #define TEST_ARGS(bit, op, init, ret, expect, args...) \ |
62 | do { \ | 76 | do { \ |
63 | atomic##bit##_set(&v, init); \ | 77 | atomic##bit##_set(&v, init); \ |
@@ -114,6 +128,16 @@ static __init void test_atomic(void) | |||
114 | RETURN_FAMILY_TEST(, sub_return, -=, onestwos); | 128 | RETURN_FAMILY_TEST(, sub_return, -=, onestwos); |
115 | RETURN_FAMILY_TEST(, sub_return, -=, -one); | 129 | RETURN_FAMILY_TEST(, sub_return, -=, -one); |
116 | 130 | ||
131 | FETCH_FAMILY_TEST(, fetch_add, +=, onestwos); | ||
132 | FETCH_FAMILY_TEST(, fetch_add, +=, -one); | ||
133 | FETCH_FAMILY_TEST(, fetch_sub, -=, onestwos); | ||
134 | FETCH_FAMILY_TEST(, fetch_sub, -=, -one); | ||
135 | |||
136 | FETCH_FAMILY_TEST(, fetch_or, |=, v1); | ||
137 | FETCH_FAMILY_TEST(, fetch_and, &=, v1); | ||
138 | FETCH_FAMILY_TEST(, fetch_andnot, &= ~, v1); | ||
139 | FETCH_FAMILY_TEST(, fetch_xor, ^=, v1); | ||
140 | |||
117 | INC_RETURN_FAMILY_TEST(, v0); | 141 | INC_RETURN_FAMILY_TEST(, v0); |
118 | DEC_RETURN_FAMILY_TEST(, v0); | 142 | DEC_RETURN_FAMILY_TEST(, v0); |
119 | 143 | ||
@@ -154,6 +178,16 @@ static __init void test_atomic64(void) | |||
154 | RETURN_FAMILY_TEST(64, sub_return, -=, onestwos); | 178 | RETURN_FAMILY_TEST(64, sub_return, -=, onestwos); |
155 | RETURN_FAMILY_TEST(64, sub_return, -=, -one); | 179 | RETURN_FAMILY_TEST(64, sub_return, -=, -one); |
156 | 180 | ||
181 | FETCH_FAMILY_TEST(64, fetch_add, +=, onestwos); | ||
182 | FETCH_FAMILY_TEST(64, fetch_add, +=, -one); | ||
183 | FETCH_FAMILY_TEST(64, fetch_sub, -=, onestwos); | ||
184 | FETCH_FAMILY_TEST(64, fetch_sub, -=, -one); | ||
185 | |||
186 | FETCH_FAMILY_TEST(64, fetch_or, |=, v1); | ||
187 | FETCH_FAMILY_TEST(64, fetch_and, &=, v1); | ||
188 | FETCH_FAMILY_TEST(64, fetch_andnot, &= ~, v1); | ||
189 | FETCH_FAMILY_TEST(64, fetch_xor, ^=, v1); | ||
190 | |||
157 | INIT(v0); | 191 | INIT(v0); |
158 | atomic64_inc(&v); | 192 | atomic64_inc(&v); |
159 | r += one; | 193 | r += one; |
diff --git a/lib/bitmap.c b/lib/bitmap.c index c66da508cbf7..eca88087fa8a 100644 --- a/lib/bitmap.c +++ b/lib/bitmap.c | |||
@@ -14,9 +14,9 @@ | |||
14 | #include <linux/bug.h> | 14 | #include <linux/bug.h> |
15 | #include <linux/kernel.h> | 15 | #include <linux/kernel.h> |
16 | #include <linux/string.h> | 16 | #include <linux/string.h> |
17 | #include <linux/uaccess.h> | ||
17 | 18 | ||
18 | #include <asm/page.h> | 19 | #include <asm/page.h> |
19 | #include <asm/uaccess.h> | ||
20 | 20 | ||
21 | /* | 21 | /* |
22 | * bitmaps provide an array of bits, implemented using an an | 22 | * bitmaps provide an array of bits, implemented using an an |
diff --git a/lib/hweight.c b/lib/hweight.c index 9a5c1f221558..43273a7d83cf 100644 --- a/lib/hweight.c +++ b/lib/hweight.c | |||
@@ -9,6 +9,7 @@ | |||
9 | * The Hamming Weight of a number is the total number of bits set in it. | 9 | * The Hamming Weight of a number is the total number of bits set in it. |
10 | */ | 10 | */ |
11 | 11 | ||
12 | #ifndef __HAVE_ARCH_SW_HWEIGHT | ||
12 | unsigned int __sw_hweight32(unsigned int w) | 13 | unsigned int __sw_hweight32(unsigned int w) |
13 | { | 14 | { |
14 | #ifdef CONFIG_ARCH_HAS_FAST_MULTIPLIER | 15 | #ifdef CONFIG_ARCH_HAS_FAST_MULTIPLIER |
@@ -25,6 +26,7 @@ unsigned int __sw_hweight32(unsigned int w) | |||
25 | #endif | 26 | #endif |
26 | } | 27 | } |
27 | EXPORT_SYMBOL(__sw_hweight32); | 28 | EXPORT_SYMBOL(__sw_hweight32); |
29 | #endif | ||
28 | 30 | ||
29 | unsigned int __sw_hweight16(unsigned int w) | 31 | unsigned int __sw_hweight16(unsigned int w) |
30 | { | 32 | { |
@@ -43,6 +45,7 @@ unsigned int __sw_hweight8(unsigned int w) | |||
43 | } | 45 | } |
44 | EXPORT_SYMBOL(__sw_hweight8); | 46 | EXPORT_SYMBOL(__sw_hweight8); |
45 | 47 | ||
48 | #ifndef __HAVE_ARCH_SW_HWEIGHT | ||
46 | unsigned long __sw_hweight64(__u64 w) | 49 | unsigned long __sw_hweight64(__u64 w) |
47 | { | 50 | { |
48 | #if BITS_PER_LONG == 32 | 51 | #if BITS_PER_LONG == 32 |
@@ -65,3 +68,4 @@ unsigned long __sw_hweight64(__u64 w) | |||
65 | #endif | 68 | #endif |
66 | } | 69 | } |
67 | EXPORT_SYMBOL(__sw_hweight64); | 70 | EXPORT_SYMBOL(__sw_hweight64); |
71 | #endif | ||
diff --git a/lib/random32.c b/lib/random32.c index 510d1ce7d4d2..69ed593aab07 100644 --- a/lib/random32.c +++ b/lib/random32.c | |||
@@ -233,7 +233,6 @@ static void __prandom_timer(unsigned long dontcare) | |||
233 | 233 | ||
234 | static void __init __prandom_start_seed_timer(void) | 234 | static void __init __prandom_start_seed_timer(void) |
235 | { | 235 | { |
236 | set_timer_slack(&seed_timer, HZ); | ||
237 | seed_timer.expires = jiffies + msecs_to_jiffies(40 * MSEC_PER_SEC); | 236 | seed_timer.expires = jiffies + msecs_to_jiffies(40 * MSEC_PER_SEC); |
238 | add_timer(&seed_timer); | 237 | add_timer(&seed_timer); |
239 | } | 238 | } |