/* append new alarm to list, in soonest-alarm-first order */
        spin_lock_irqsave(&priv->lock, flags);
-       list_for_each_entry(list, &priv->alarms, head) {
-               if (list->timestamp > alarm->timestamp)
-                       break;
+       if (!time) {
+               if (!list_empty(&alarm->head))
+                       list_del(&alarm->head);
+       } else {
+               list_for_each_entry(list, &priv->alarms, head) {
+                       if (list->timestamp > alarm->timestamp)
+                               break;
+               }
+               list_add_tail(&alarm->head, &list->head);
        }
-       list_add_tail(&alarm->head, &list->head);
        spin_unlock_irqrestore(&priv->lock, flags);
 
        /* process pending alarms */