diff options
-rw-r--r-- | arch/tile/include/hv/hypervisor.h | 6 | ||||
-rw-r--r-- | arch/tile/kernel/setup.c | 23 |
2 files changed, 28 insertions, 1 deletions
diff --git a/arch/tile/include/hv/hypervisor.h b/arch/tile/include/hv/hypervisor.h index dfcdeb61ba34..e0e6af4e783b 100644 --- a/arch/tile/include/hv/hypervisor.h +++ b/arch/tile/include/hv/hypervisor.h | |||
@@ -961,7 +961,11 @@ typedef enum { | |||
961 | HV_INQ_TILES_HFH_CACHE = 2, | 961 | HV_INQ_TILES_HFH_CACHE = 2, |
962 | 962 | ||
963 | /** The set of tiles that can be legally used as a LOTAR for a PTE. */ | 963 | /** The set of tiles that can be legally used as a LOTAR for a PTE. */ |
964 | HV_INQ_TILES_LOTAR = 3 | 964 | HV_INQ_TILES_LOTAR = 3, |
965 | |||
966 | /** The set of "shared" driver tiles that the hypervisor may | ||
967 | * periodically interrupt. */ | ||
968 | HV_INQ_TILES_SHARED = 4 | ||
965 | } HV_InqTileSet; | 969 | } HV_InqTileSet; |
966 | 970 | ||
967 | /** Returns specific information about various sets of tiles within the | 971 | /** Returns specific information about various sets of tiles within the |
diff --git a/arch/tile/kernel/setup.c b/arch/tile/kernel/setup.c index f1f579914952..7833b2ccdfbc 100644 --- a/arch/tile/kernel/setup.c +++ b/arch/tile/kernel/setup.c | |||
@@ -32,6 +32,7 @@ | |||
32 | #include <linux/hugetlb.h> | 32 | #include <linux/hugetlb.h> |
33 | #include <linux/start_kernel.h> | 33 | #include <linux/start_kernel.h> |
34 | #include <linux/screen_info.h> | 34 | #include <linux/screen_info.h> |
35 | #include <linux/tick.h> | ||
35 | #include <asm/setup.h> | 36 | #include <asm/setup.h> |
36 | #include <asm/sections.h> | 37 | #include <asm/sections.h> |
37 | #include <asm/cacheflush.h> | 38 | #include <asm/cacheflush.h> |
@@ -1390,6 +1391,28 @@ static int __init dataplane(char *str) | |||
1390 | 1391 | ||
1391 | early_param("dataplane", dataplane); | 1392 | early_param("dataplane", dataplane); |
1392 | 1393 | ||
1394 | #ifdef CONFIG_NO_HZ_FULL | ||
1395 | /* Warn if hypervisor shared cpus are marked as nohz_full. */ | ||
1396 | static int __init check_nohz_full_cpus(void) | ||
1397 | { | ||
1398 | struct cpumask shared; | ||
1399 | int cpu; | ||
1400 | |||
1401 | if (hv_inquire_tiles(HV_INQ_TILES_SHARED, | ||
1402 | (HV_VirtAddr) shared.bits, sizeof(shared)) < 0) { | ||
1403 | pr_warn("WARNING: No support for inquiring hv shared tiles\n"); | ||
1404 | return 0; | ||
1405 | } | ||
1406 | for_each_cpu(cpu, &shared) { | ||
1407 | if (tick_nohz_full_cpu(cpu)) | ||
1408 | pr_warn("WARNING: nohz_full cpu %d receives hypervisor interrupts!\n", | ||
1409 | cpu); | ||
1410 | } | ||
1411 | return 0; | ||
1412 | } | ||
1413 | arch_initcall(check_nohz_full_cpus); | ||
1414 | #endif | ||
1415 | |||
1393 | #ifdef CONFIG_CMDLINE_BOOL | 1416 | #ifdef CONFIG_CMDLINE_BOOL |
1394 | static char __initdata builtin_cmdline[COMMAND_LINE_SIZE] = CONFIG_CMDLINE; | 1417 | static char __initdata builtin_cmdline[COMMAND_LINE_SIZE] = CONFIG_CMDLINE; |
1395 | #endif | 1418 | #endif |