static int alarm_release(struct inode *inode, struct file *file) { int i; unsigned long flags; spin_lock_irqsave(&alarm_slock, flags); if (file->private_data) { for (i = 0; i < ANDROID_ALARM_TYPE_COUNT; i++) { uint32_t alarm_type_mask = 1U << i; if (alarm_enabled & alarm_type_mask) { alarm_dbg(INFO, "%s: clear alarm, pending %d\n", __func__, !!(alarm_pending & alarm_type_mask)); alarm_enabled &= ~alarm_type_mask; } spin_unlock_irqrestore(&alarm_slock, flags); devalarm_cancel(&alarms[i]); spin_lock_irqsave(&alarm_slock, flags); } if (alarm_pending | wait_pending) { if (alarm_pending) alarm_dbg(INFO, "%s: clear pending alarms %x\n", __func__, alarm_pending); __pm_relax(&alarm_wake_lock); wait_pending = 0; alarm_pending = 0; } alarm_opened = 0; } spin_unlock_irqrestore(&alarm_slock, flags); return 0; }
static int alarm_release(struct inode *inode, struct file *file) { int i; unsigned long flags; spin_lock_irqsave(&alarm_slock, flags); if (file->private_data != 0) { for (i = 0; i < ANDROID_ALARM_TYPE_COUNT; i++) { uint32_t alarm_type_mask = 1U << i; if (alarm_enabled & alarm_type_mask) { pr_alarm(INFO, "alarm_release: clear alarm, " "pending %d\n", !!(alarm_pending & alarm_type_mask)); alarm_enabled &= ~alarm_type_mask; } spin_unlock_irqrestore(&alarm_slock, flags); devalarm_cancel(&alarms[i]); spin_lock_irqsave(&alarm_slock, flags); } if (alarm_pending | wait_pending) { if (alarm_pending) pr_alarm(INFO, "alarm_release: clear " "pending alarms %x\n", alarm_pending); wake_unlock(&alarm_wake_lock); wait_pending = 0; alarm_pending = 0; } alarm_opened = 0; } spin_unlock_irqrestore(&alarm_slock, flags); pr_alarm(INFO, "alarm_release (%d:%d)(%d)\n", current->tgid, current->pid, (int)file->private_data); return 0; }