static inline long __sched __wait_for_common(struct completion *x, long (*action)(long), long timeout, int state) { might_sleep(); spin_lock_irq(&x->wait.lock); timeout = do_wait_for_common(x, action, timeout, state); spin_unlock_irq(&x->wait.lock); return timeout; }
// ARM10C 20170830 // x: &kthreadd_done, schedule_timeout, timeout: 0x7FFFFFFF, state: 2 static inline long __sched __wait_for_common(struct completion *x, long (*action)(long), long timeout, int state) { might_sleep(); // null function // &x->wait.lock: &(&kthreadd_done)->wait.lock spin_lock_irq(&x->wait.lock); // spin_lock_irq 에서 한일: // &(&kthreadd_done)->wait.lock 을 사용하여 spin lock 수행 // x: &kthreadd_done, action: schedule_timeout, timeout: 0x7FFFFFFF, state: 2 timeout = do_wait_for_common(x, action, timeout, state); spin_unlock_irq(&x->wait.lock); return timeout; }