|
@@ -1251,18 +1251,18 @@ EXPORT_SYMBOL(try_to_del_timer_sync);
|
|
*
|
|
*
|
|
* Note: For !irqsafe timers, you must not hold locks that are held in
|
|
* Note: For !irqsafe timers, you must not hold locks that are held in
|
|
* interrupt context while calling this function. Even if the lock has
|
|
* interrupt context while calling this function. Even if the lock has
|
|
- * nothing to do with the timer in question. Here's why:
|
|
|
|
|
|
+ * nothing to do with the timer in question. Here's why::
|
|
*
|
|
*
|
|
* CPU0 CPU1
|
|
* CPU0 CPU1
|
|
* ---- ----
|
|
* ---- ----
|
|
- * <SOFTIRQ>
|
|
|
|
- * call_timer_fn();
|
|
|
|
- * base->running_timer = mytimer;
|
|
|
|
- * spin_lock_irq(somelock);
|
|
|
|
|
|
+ * <SOFTIRQ>
|
|
|
|
+ * call_timer_fn();
|
|
|
|
+ * base->running_timer = mytimer;
|
|
|
|
+ * spin_lock_irq(somelock);
|
|
* <IRQ>
|
|
* <IRQ>
|
|
* spin_lock(somelock);
|
|
* spin_lock(somelock);
|
|
- * del_timer_sync(mytimer);
|
|
|
|
- * while (base->running_timer == mytimer);
|
|
|
|
|
|
+ * del_timer_sync(mytimer);
|
|
|
|
+ * while (base->running_timer == mytimer);
|
|
*
|
|
*
|
|
* Now del_timer_sync() will never return and never release somelock.
|
|
* Now del_timer_sync() will never return and never release somelock.
|
|
* The interrupt on the other CPU is waiting to grab somelock but
|
|
* The interrupt on the other CPU is waiting to grab somelock but
|