WQ_FLAG_WOKEN
if (wq_entry->flags & WQ_FLAG_WOKEN)
smp_store_mb(wq_entry->flags, wq_entry->flags & ~WQ_FLAG_WOKEN);
if (!(wq_entry->flags & WQ_FLAG_WOKEN) && !kthread_should_stop_or_park())
smp_store_mb(wq_entry->flags, wq_entry->flags & ~WQ_FLAG_WOKEN); /* B */
wq_entry->flags |= WQ_FLAG_WOKEN;
smp_store_release(&wait->flags, flags | WQ_FLAG_WOKEN);
wait->flags |= WQ_FLAG_WOKEN | WQ_FLAG_DONE;
if (!(flags & WQ_FLAG_WOKEN)) {
return wait->flags & WQ_FLAG_WOKEN ? 0 : -EINTR;
if (!(flags & WQ_FLAG_WOKEN)) {