clocksource/drivers: Set clockevent device cpumask to cpu_possible_mask
authorSudeep Holla <sudeep.holla@arm.com>
Wed, 11 Jul 2018 11:24:22 +0000 (12:24 +0100)
committerDaniel Lezcano <daniel.lezcano@linaro.org>
Thu, 26 Jul 2018 09:26:30 +0000 (11:26 +0200)
Currently, quite a few clockevent devices have cpumask set to
cpu_all_mask which should be fine. However, cpu_possible_mask is more
accurate and if there are any other clockevent devices in the system
which have cpumask set to cpu_possible_mask, then having cpu_all_mask
may result in issues (mostly boot hang with forever loops in
clockevents_notify_released).

So, lets replace all the clockevent device cpu_all_mask to
cpu_possible_mask in order to prevent above mentioned possible issue.

Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Thierry Reding <thierry.reding@gmail.com>
Cc: Jonathan Hunter <jonathanh@nvidia.com>
Cc: Santosh Shilimkar <ssantosh@kernel.org>
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
drivers/clocksource/tegra20_timer.c
drivers/clocksource/timer-atcpit100.c
drivers/clocksource/timer-keystone.c
drivers/clocksource/zevio-timer.c

index c337a8100a7b991988fa63cd31f0de96194803a2..dabf0a1035675faeeea358b35241627b406de39c 100644 (file)
@@ -230,7 +230,7 @@ static int __init tegra20_init_timer(struct device_node *np)
                return ret;
        }
 
-       tegra_clockevent.cpumask = cpu_all_mask;
+       tegra_clockevent.cpumask = cpu_possible_mask;
        tegra_clockevent.irq = tegra_timer_irq.irq;
        clockevents_config_and_register(&tegra_clockevent, 1000000,
                                        0x1, 0x1fffffff);
index 5e23d7b4a72200f7117283cce4cb47f003022e27..b4bd2f5b801d07f9209c27c5947e0cdd9ed1bd9e 100644 (file)
@@ -185,7 +185,7 @@ static struct timer_of to = {
                .set_state_oneshot = atcpit100_clkevt_set_oneshot,
                .tick_resume = atcpit100_clkevt_shutdown,
                .set_next_event = atcpit100_clkevt_next_event,
-               .cpumask = cpu_all_mask,
+               .cpumask = cpu_possible_mask,
        },
 
        .of_irq = {
index 0eee03250cfc87ef69b4e7744e7274b477071fcb..f5b2eda30bf336f79fd0b9553b7b6f1ef44f8dd4 100644 (file)
@@ -211,7 +211,7 @@ static int __init keystone_timer_init(struct device_node *np)
        event_dev->set_state_shutdown = keystone_shutdown;
        event_dev->set_state_periodic = keystone_set_periodic;
        event_dev->set_state_oneshot = keystone_shutdown;
-       event_dev->cpumask = cpu_all_mask;
+       event_dev->cpumask = cpu_possible_mask;
        event_dev->owner = THIS_MODULE;
        event_dev->name = TIMER_NAME;
        event_dev->irq = irq;
index a6a0338eea77f73fbae0b549e3ec77265c00b2f4..f74689334f7cb729f4f9f1840401f97fabda5819 100644 (file)
@@ -162,7 +162,7 @@ static int __init zevio_timer_add(struct device_node *node)
                timer->clkevt.set_state_oneshot = zevio_timer_set_oneshot;
                timer->clkevt.tick_resume       = zevio_timer_set_oneshot;
                timer->clkevt.rating            = 200;
-               timer->clkevt.cpumask           = cpu_all_mask;
+               timer->clkevt.cpumask           = cpu_possible_mask;
                timer->clkevt.features          = CLOCK_EVT_FEAT_ONESHOT;
                timer->clkevt.irq               = irqnr;