diff options
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/Kconfig.debug | 66 | ||||
| -rw-r--r-- | lib/cpu_rmap.c | 2 | ||||
| -rw-r--r-- | lib/cpumask.c | 9 | ||||
| -rw-r--r-- | lib/radix-tree.c | 2 | ||||
| -rw-r--r-- | lib/raid6/x86.h | 2 | ||||
| -rw-r--r-- | lib/strnlen_user.c | 6 | ||||
| -rw-r--r-- | lib/swiotlb.c | 11 |
7 files changed, 84 insertions, 14 deletions
diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index ba2b0c87e65b..b908048f8d6a 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug | |||
| @@ -1233,6 +1233,7 @@ config RCU_TORTURE_TEST | |||
| 1233 | depends on DEBUG_KERNEL | 1233 | depends on DEBUG_KERNEL |
| 1234 | select TORTURE_TEST | 1234 | select TORTURE_TEST |
| 1235 | select SRCU | 1235 | select SRCU |
| 1236 | select TASKS_RCU | ||
| 1236 | default n | 1237 | default n |
| 1237 | help | 1238 | help |
| 1238 | This option provides a kernel module that runs torture tests | 1239 | This option provides a kernel module that runs torture tests |
| @@ -1261,12 +1262,38 @@ config RCU_TORTURE_TEST_RUNNABLE | |||
| 1261 | Say N here if you want the RCU torture tests to start only | 1262 | Say N here if you want the RCU torture tests to start only |
| 1262 | after being manually enabled via /proc. | 1263 | after being manually enabled via /proc. |
| 1263 | 1264 | ||
| 1265 | config RCU_TORTURE_TEST_SLOW_PREINIT | ||
| 1266 | bool "Slow down RCU grace-period pre-initialization to expose races" | ||
| 1267 | depends on RCU_TORTURE_TEST | ||
| 1268 | help | ||
| 1269 | This option delays grace-period pre-initialization (the | ||
| 1270 | propagation of CPU-hotplug changes up the rcu_node combining | ||
| 1271 | tree) for a few jiffies between initializing each pair of | ||
| 1272 | consecutive rcu_node structures. This helps to expose races | ||
| 1273 | involving grace-period pre-initialization, in other words, it | ||
| 1274 | makes your kernel less stable. It can also greatly increase | ||
| 1275 | grace-period latency, especially on systems with large numbers | ||
| 1276 | of CPUs. This is useful when torture-testing RCU, but in | ||
| 1277 | almost no other circumstance. | ||
| 1278 | |||
| 1279 | Say Y here if you want your system to crash and hang more often. | ||
| 1280 | Say N if you want a sane system. | ||
| 1281 | |||
| 1282 | config RCU_TORTURE_TEST_SLOW_PREINIT_DELAY | ||
| 1283 | int "How much to slow down RCU grace-period pre-initialization" | ||
| 1284 | range 0 5 | ||
| 1285 | default 3 | ||
| 1286 | depends on RCU_TORTURE_TEST_SLOW_PREINIT | ||
| 1287 | help | ||
| 1288 | This option specifies the number of jiffies to wait between | ||
| 1289 | each rcu_node structure pre-initialization step. | ||
| 1290 | |||
| 1264 | config RCU_TORTURE_TEST_SLOW_INIT | 1291 | config RCU_TORTURE_TEST_SLOW_INIT |
| 1265 | bool "Slow down RCU grace-period initialization to expose races" | 1292 | bool "Slow down RCU grace-period initialization to expose races" |
| 1266 | depends on RCU_TORTURE_TEST | 1293 | depends on RCU_TORTURE_TEST |
| 1267 | help | 1294 | help |
| 1268 | This option makes grace-period initialization block for a | 1295 | This option delays grace-period initialization for a few |
| 1269 | few jiffies between initializing each pair of consecutive | 1296 | jiffies between initializing each pair of consecutive |
| 1270 | rcu_node structures. This helps to expose races involving | 1297 | rcu_node structures. This helps to expose races involving |
| 1271 | grace-period initialization, in other words, it makes your | 1298 | grace-period initialization, in other words, it makes your |
| 1272 | kernel less stable. It can also greatly increase grace-period | 1299 | kernel less stable. It can also greatly increase grace-period |
| @@ -1286,6 +1313,30 @@ config RCU_TORTURE_TEST_SLOW_INIT_DELAY | |||
| 1286 | This option specifies the number of jiffies to wait between | 1313 | This option specifies the number of jiffies to wait between |
| 1287 | each rcu_node structure initialization. | 1314 | each rcu_node structure initialization. |
| 1288 | 1315 | ||
| 1316 | config RCU_TORTURE_TEST_SLOW_CLEANUP | ||
| 1317 | bool "Slow down RCU grace-period cleanup to expose races" | ||
| 1318 | depends on RCU_TORTURE_TEST | ||
| 1319 | help | ||
| 1320 | This option delays grace-period cleanup for a few jiffies | ||
| 1321 | between cleaning up each pair of consecutive rcu_node | ||
| 1322 | structures. This helps to expose races involving grace-period | ||
| 1323 | cleanup, in other words, it makes your kernel less stable. | ||
| 1324 | It can also greatly increase grace-period latency, especially | ||
| 1325 | on systems with large numbers of CPUs. This is useful when | ||
| 1326 | torture-testing RCU, but in almost no other circumstance. | ||
| 1327 | |||
| 1328 | Say Y here if you want your system to crash and hang more often. | ||
| 1329 | Say N if you want a sane system. | ||
| 1330 | |||
| 1331 | config RCU_TORTURE_TEST_SLOW_CLEANUP_DELAY | ||
| 1332 | int "How much to slow down RCU grace-period cleanup" | ||
| 1333 | range 0 5 | ||
| 1334 | default 3 | ||
| 1335 | depends on RCU_TORTURE_TEST_SLOW_CLEANUP | ||
| 1336 | help | ||
| 1337 | This option specifies the number of jiffies to wait between | ||
| 1338 | each rcu_node structure cleanup operation. | ||
| 1339 | |||
| 1289 | config RCU_CPU_STALL_TIMEOUT | 1340 | config RCU_CPU_STALL_TIMEOUT |
| 1290 | int "RCU CPU stall timeout in seconds" | 1341 | int "RCU CPU stall timeout in seconds" |
| 1291 | depends on RCU_STALL_COMMON | 1342 | depends on RCU_STALL_COMMON |
| @@ -1322,6 +1373,17 @@ config RCU_TRACE | |||
| 1322 | Say Y here if you want to enable RCU tracing | 1373 | Say Y here if you want to enable RCU tracing |
| 1323 | Say N if you are unsure. | 1374 | Say N if you are unsure. |
| 1324 | 1375 | ||
| 1376 | config RCU_EQS_DEBUG | ||
| 1377 | bool "Use this when adding any sort of NO_HZ support to your arch" | ||
| 1378 | depends on DEBUG_KERNEL | ||
| 1379 | help | ||
| 1380 | This option provides consistency checks in RCU's handling of | ||
| 1381 | NO_HZ. These checks have proven quite helpful in detecting | ||
| 1382 | bugs in arch-specific NO_HZ code. | ||
| 1383 | |||
| 1384 | Say N here if you need ultimate kernel/user switch latencies | ||
| 1385 | Say Y if you are unsure | ||
| 1386 | |||
| 1325 | endmenu # "RCU Debugging" | 1387 | endmenu # "RCU Debugging" |
| 1326 | 1388 | ||
| 1327 | config DEBUG_BLOCK_EXT_DEVT | 1389 | config DEBUG_BLOCK_EXT_DEVT |
diff --git a/lib/cpu_rmap.c b/lib/cpu_rmap.c index 4f134d8907a7..f610b2a10b3e 100644 --- a/lib/cpu_rmap.c +++ b/lib/cpu_rmap.c | |||
| @@ -191,7 +191,7 @@ int cpu_rmap_update(struct cpu_rmap *rmap, u16 index, | |||
| 191 | /* Update distances based on topology */ | 191 | /* Update distances based on topology */ |
| 192 | for_each_cpu(cpu, update_mask) { | 192 | for_each_cpu(cpu, update_mask) { |
| 193 | if (cpu_rmap_copy_neigh(rmap, cpu, | 193 | if (cpu_rmap_copy_neigh(rmap, cpu, |
| 194 | topology_thread_cpumask(cpu), 1)) | 194 | topology_sibling_cpumask(cpu), 1)) |
| 195 | continue; | 195 | continue; |
| 196 | if (cpu_rmap_copy_neigh(rmap, cpu, | 196 | if (cpu_rmap_copy_neigh(rmap, cpu, |
| 197 | topology_core_cpumask(cpu), 2)) | 197 | topology_core_cpumask(cpu), 2)) |
diff --git a/lib/cpumask.c b/lib/cpumask.c index 5f627084f2e9..5a70f6196f57 100644 --- a/lib/cpumask.c +++ b/lib/cpumask.c | |||
| @@ -16,11 +16,10 @@ | |||
| 16 | int cpumask_next_and(int n, const struct cpumask *src1p, | 16 | int cpumask_next_and(int n, const struct cpumask *src1p, |
| 17 | const struct cpumask *src2p) | 17 | const struct cpumask *src2p) |
| 18 | { | 18 | { |
| 19 | struct cpumask tmp; | 19 | while ((n = cpumask_next(n, src1p)) < nr_cpu_ids) |
| 20 | 20 | if (cpumask_test_cpu(n, src2p)) | |
| 21 | if (cpumask_and(&tmp, src1p, src2p)) | 21 | break; |
| 22 | return cpumask_next(n, &tmp); | 22 | return n; |
| 23 | return nr_cpu_ids; | ||
| 24 | } | 23 | } |
| 25 | EXPORT_SYMBOL(cpumask_next_and); | 24 | EXPORT_SYMBOL(cpumask_next_and); |
| 26 | 25 | ||
diff --git a/lib/radix-tree.c b/lib/radix-tree.c index 3d2aa27b845b..061550de77bc 100644 --- a/lib/radix-tree.c +++ b/lib/radix-tree.c | |||
| @@ -33,7 +33,7 @@ | |||
| 33 | #include <linux/string.h> | 33 | #include <linux/string.h> |
| 34 | #include <linux/bitops.h> | 34 | #include <linux/bitops.h> |
| 35 | #include <linux/rcupdate.h> | 35 | #include <linux/rcupdate.h> |
| 36 | #include <linux/preempt_mask.h> /* in_interrupt() */ | 36 | #include <linux/preempt.h> /* in_interrupt() */ |
| 37 | 37 | ||
| 38 | 38 | ||
| 39 | /* | 39 | /* |
diff --git a/lib/raid6/x86.h b/lib/raid6/x86.h index b7595484a815..8fe9d9662abb 100644 --- a/lib/raid6/x86.h +++ b/lib/raid6/x86.h | |||
| @@ -23,7 +23,7 @@ | |||
| 23 | 23 | ||
| 24 | #ifdef __KERNEL__ /* Real code */ | 24 | #ifdef __KERNEL__ /* Real code */ |
| 25 | 25 | ||
| 26 | #include <asm/i387.h> | 26 | #include <asm/fpu/api.h> |
| 27 | 27 | ||
| 28 | #else /* Dummy code for user space testing */ | 28 | #else /* Dummy code for user space testing */ |
| 29 | 29 | ||
diff --git a/lib/strnlen_user.c b/lib/strnlen_user.c index fe9a32591c24..3a5f2b366d84 100644 --- a/lib/strnlen_user.c +++ b/lib/strnlen_user.c | |||
| @@ -85,7 +85,8 @@ static inline long do_strnlen_user(const char __user *src, unsigned long count, | |||
| 85 | * @str: The string to measure. | 85 | * @str: The string to measure. |
| 86 | * @count: Maximum count (including NUL character) | 86 | * @count: Maximum count (including NUL character) |
| 87 | * | 87 | * |
| 88 | * Context: User context only. This function may sleep. | 88 | * Context: User context only. This function may sleep if pagefaults are |
| 89 | * enabled. | ||
| 89 | * | 90 | * |
| 90 | * Get the size of a NUL-terminated string in user space. | 91 | * Get the size of a NUL-terminated string in user space. |
| 91 | * | 92 | * |
| @@ -121,7 +122,8 @@ EXPORT_SYMBOL(strnlen_user); | |||
| 121 | * strlen_user: - Get the size of a user string INCLUDING final NUL. | 122 | * strlen_user: - Get the size of a user string INCLUDING final NUL. |
| 122 | * @str: The string to measure. | 123 | * @str: The string to measure. |
| 123 | * | 124 | * |
| 124 | * Context: User context only. This function may sleep. | 125 | * Context: User context only. This function may sleep if pagefaults are |
| 126 | * enabled. | ||
| 125 | * | 127 | * |
| 126 | * Get the size of a NUL-terminated string in user space. | 128 | * Get the size of a NUL-terminated string in user space. |
| 127 | * | 129 | * |
diff --git a/lib/swiotlb.c b/lib/swiotlb.c index 3c365ab6cf5f..42e192decbfd 100644 --- a/lib/swiotlb.c +++ b/lib/swiotlb.c | |||
| @@ -656,7 +656,7 @@ swiotlb_alloc_coherent(struct device *hwdev, size_t size, | |||
| 656 | */ | 656 | */ |
| 657 | phys_addr_t paddr = map_single(hwdev, 0, size, DMA_FROM_DEVICE); | 657 | phys_addr_t paddr = map_single(hwdev, 0, size, DMA_FROM_DEVICE); |
| 658 | if (paddr == SWIOTLB_MAP_ERROR) | 658 | if (paddr == SWIOTLB_MAP_ERROR) |
| 659 | return NULL; | 659 | goto err_warn; |
| 660 | 660 | ||
| 661 | ret = phys_to_virt(paddr); | 661 | ret = phys_to_virt(paddr); |
| 662 | dev_addr = phys_to_dma(hwdev, paddr); | 662 | dev_addr = phys_to_dma(hwdev, paddr); |
| @@ -670,7 +670,7 @@ swiotlb_alloc_coherent(struct device *hwdev, size_t size, | |||
| 670 | /* DMA_TO_DEVICE to avoid memcpy in unmap_single */ | 670 | /* DMA_TO_DEVICE to avoid memcpy in unmap_single */ |
| 671 | swiotlb_tbl_unmap_single(hwdev, paddr, | 671 | swiotlb_tbl_unmap_single(hwdev, paddr, |
| 672 | size, DMA_TO_DEVICE); | 672 | size, DMA_TO_DEVICE); |
| 673 | return NULL; | 673 | goto err_warn; |
| 674 | } | 674 | } |
| 675 | } | 675 | } |
| 676 | 676 | ||
| @@ -678,6 +678,13 @@ swiotlb_alloc_coherent(struct device *hwdev, size_t size, | |||
| 678 | memset(ret, 0, size); | 678 | memset(ret, 0, size); |
| 679 | 679 | ||
| 680 | return ret; | 680 | return ret; |
| 681 | |||
| 682 | err_warn: | ||
| 683 | pr_warn("swiotlb: coherent allocation failed for device %s size=%zu\n", | ||
| 684 | dev_name(hwdev), size); | ||
| 685 | dump_stack(); | ||
| 686 | |||
| 687 | return NULL; | ||
| 681 | } | 688 | } |
| 682 | EXPORT_SYMBOL(swiotlb_alloc_coherent); | 689 | EXPORT_SYMBOL(swiotlb_alloc_coherent); |
| 683 | 690 | ||
