OSDN Git Service

tick/broadcast: Return busy if periodic mode and hrtimer broadcast
authorThomas Gleixner <tglx@linutronix.de>
Tue, 7 Jul 2015 15:45:22 +0000 (17:45 +0200)
committerThomas Gleixner <tglx@linutronix.de>
Tue, 7 Jul 2015 16:46:48 +0000 (18:46 +0200)
If the system is in periodic mode and the broadcast device is hrtimer
based, return busy as we have no proper handling for this.

[ Split out from a larger combo patch ]

Tested-by: Sudeep Holla <sudeep.holla@arm.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Suzuki Poulose <Suzuki.Poulose@arm.com>
Cc: Lorenzo Pieralisi <Lorenzo.Pieralisi@arm.com>
Cc: Catalin Marinas <Catalin.Marinas@arm.com>
Cc: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Preeti U Murthy <preeti@linux.vnet.ibm.com>
Cc: Ingo Molnar <mingo@kernel.org>
Link: http://lkml.kernel.org/r/alpine.DEB.2.11.1507070929360.3916@nanos
kernel/time/tick-broadcast.c

index 83aa92e..da7b40f 100644 (file)
@@ -709,8 +709,12 @@ int __tick_broadcast_oneshot_control(enum tick_broadcast_state state)
                 * If the broadcast device is in periodic mode, we
                 * return.
                 */
-               if (tick_broadcast_device.mode == TICKDEV_MODE_PERIODIC)
+               if (tick_broadcast_device.mode == TICKDEV_MODE_PERIODIC) {
+                       /* If it is a hrtimer based broadcast, return busy */
+                       if (bc->features & CLOCK_EVT_FEAT_HRTIMER)
+                               ret = -EBUSY;
                        goto out;
+               }
 
                if (!cpumask_test_and_set_cpu(cpu, tick_broadcast_oneshot_mask)) {
                        WARN_ON_ONCE(cpumask_test_cpu(cpu, tick_broadcast_pending_mask));