Lines Matching refs:cur

132  * @cur:	Old/expected state
135 * Return: True on success. False on fail and @cur is updated.
137 static inline bool nbcon_state_try_cmpxchg(struct console *con, struct nbcon_state *cur,
140 return atomic_try_cmpxchg(&ACCESS_PRIVATE(con, nbcon_state), &cur->atom, new->atom);
207 * @cur: The current console state
212 * Return: 0 on success. Otherwise, an error code on failure. Also @cur
227 struct nbcon_state *cur)
237 if (ctxt->prio <= cur->prio || ctxt->prio <= cur->req_prio)
240 if (cur->unsafe)
247 WARN_ON_ONCE(cur->unsafe_takeover);
249 new.atom = cur->atom;
252 new.unsafe = cur->unsafe_takeover;
255 } while (!nbcon_state_try_cmpxchg(con, cur, &new));
260 static bool nbcon_waiter_matches(struct nbcon_state *cur, int expected_prio)
279 return (cur->req_prio == expected_prio);
286 * @cur: The current console state
292 * Return: 0 on success and @cur is updated to the new console state.
307 struct nbcon_state *cur)
321 if (!nbcon_waiter_matches(cur, ctxt->prio))
325 if (cur->prio != NBCON_PRIO_NONE)
332 WARN_ON_ONCE(cur->unsafe);
334 new.atom = cur->atom;
337 new.unsafe = cur->unsafe_takeover;
340 if (!nbcon_state_try_cmpxchg(con, cur, &new)) {
345 WARN_ON_ONCE(nbcon_waiter_matches(cur, ctxt->prio));
356 * @cur: The current console state
370 * Return: 0 on success. Otherwise, an error code on failure. Also @cur
386 * -EAGAIN: @cur has changed when creating the handover request.
390 struct nbcon_state *cur)
402 WARN_ON_ONCE(ctxt->prio <= cur->prio || ctxt->prio <= cur->req_prio);
403 WARN_ON_ONCE(!cur->unsafe);
406 if (cur->cpu == cpu)
413 if (cur->unsafe_takeover)
424 new.atom = cur->atom;
426 if (!nbcon_state_try_cmpxchg(con, cur, &new))
429 cur->atom = new.atom;
434 request_err = nbcon_context_try_acquire_requested(ctxt, cur);
448 nbcon_state_read(con, cur);
458 if (!nbcon_waiter_matches(cur, ctxt->prio))
462 new.atom = cur->atom;
464 if (nbcon_state_try_cmpxchg(con, cur, &new)) {
469 cur->atom = new.atom;
477 } while (nbcon_context_try_acquire_requested(ctxt, cur));
486 * @cur: The current console state
496 struct nbcon_state *cur)
513 WARN_ON_ONCE(ctxt->prio <= cur->prio || ctxt->prio <= cur->req_prio);
514 WARN_ON_ONCE(cur->unsafe != true);
517 new.atom = cur->atom;
520 new.unsafe |= cur->unsafe_takeover;
521 new.unsafe_takeover |= cur->unsafe;
523 } while (!nbcon_state_try_cmpxchg(con, cur, &new));
546 struct nbcon_state cur;
549 nbcon_state_read(con, &cur);
551 err = nbcon_context_try_acquire_direct(ctxt, &cur);
555 err = nbcon_context_try_acquire_handover(ctxt, &cur);
561 err = nbcon_context_try_acquire_hostile(ctxt, &cur);
580 static bool nbcon_owner_matches(struct nbcon_state *cur, int expected_cpu,
591 if (cur->prio != expected_prio)
594 if (cur->cpu != expected_cpu)
608 struct nbcon_state cur;
611 nbcon_state_read(con, &cur);
614 if (!nbcon_owner_matches(&cur, cpu, ctxt->prio))
617 new.atom = cur.atom;
624 new.unsafe |= cur.unsafe_takeover;
626 } while (!nbcon_state_try_cmpxchg(con, &cur, &new));
634 * @cur: The current console state
657 static bool nbcon_context_can_proceed(struct nbcon_context *ctxt, struct nbcon_state *cur)
662 if (!nbcon_owner_matches(cur, cpu, ctxt->prio))
666 if (cur->req_prio == NBCON_PRIO_NONE)
675 if (cur->unsafe)
679 WARN_ON_ONCE(cur->req_prio <= cur->prio);
729 struct nbcon_state cur;
731 nbcon_state_read(con, &cur);
733 return nbcon_context_can_proceed(ctxt, &cur);
762 struct nbcon_state cur;
765 nbcon_state_read(con, &cur);
772 if (!unsafe && cur.unsafe_takeover)
775 if (!nbcon_context_can_proceed(ctxt, &cur))
778 new.atom = cur.atom;
780 } while (!nbcon_state_try_cmpxchg(con, &cur, &new));
782 cur.atom = new.atom;
784 return nbcon_context_can_proceed(ctxt, &cur);
853 struct nbcon_state cur;
891 nbcon_state_read(con, &cur);
892 wctxt->unsafe_takeover = cur.unsafe_takeover;