/* * Removes the count for the old reader from the appropriate element of * the srcu_struct. */ void __srcu_read_unlock(struct srcu_struct *sp, int idx) { int newval = sp->srcu_lock_nesting[idx] - 1; WRITE_ONCE(sp->srcu_lock_nesting[idx], newval); if (!newval && READ_ONCE(sp->srcu_gp_waiting)) swake_up_one(&sp->srcu_wq); }
void s2idle_wake(void) { unsigned long flags; raw_spin_lock_irqsave(&s2idle_lock, flags); if (s2idle_state > S2IDLE_STATE_NONE) { s2idle_state = S2IDLE_STATE_WAKE; swake_up_one(&s2idle_wait_head); } raw_spin_unlock_irqrestore(&s2idle_lock, flags); }