Lines Matching refs:cur
151 static inline bool nbcon_state_try_cmpxchg(struct console *con, struct nbcon_state *cur, in nbcon_state_try_cmpxchg() argument
154 return atomic_try_cmpxchg(&ACCESS_PRIVATE(con, nbcon_state), &cur->atom, new->atom); in nbcon_state_try_cmpxchg()
238 struct nbcon_state *cur) in nbcon_context_try_acquire_direct() argument
255 if (ctxt->prio <= cur->prio || ctxt->prio <= cur->req_prio) in nbcon_context_try_acquire_direct()
258 if (cur->unsafe) in nbcon_context_try_acquire_direct()
265 WARN_ON_ONCE(cur->unsafe_takeover); in nbcon_context_try_acquire_direct()
267 new.atom = cur->atom; in nbcon_context_try_acquire_direct()
270 new.unsafe = cur->unsafe_takeover; in nbcon_context_try_acquire_direct()
273 } while (!nbcon_state_try_cmpxchg(con, cur, &new)); in nbcon_context_try_acquire_direct()
278 static bool nbcon_waiter_matches(struct nbcon_state *cur, int expected_prio) in nbcon_waiter_matches() argument
308 return (cur->req_prio == expected_prio); in nbcon_waiter_matches()
336 struct nbcon_state *cur) in nbcon_context_try_acquire_requested() argument
350 if (!nbcon_waiter_matches(cur, ctxt->prio)) in nbcon_context_try_acquire_requested()
354 if (cur->prio != NBCON_PRIO_NONE) in nbcon_context_try_acquire_requested()
361 WARN_ON_ONCE(cur->unsafe); in nbcon_context_try_acquire_requested()
363 new.atom = cur->atom; in nbcon_context_try_acquire_requested()
366 new.unsafe = cur->unsafe_takeover; in nbcon_context_try_acquire_requested()
369 if (!nbcon_state_try_cmpxchg(con, cur, &new)) { in nbcon_context_try_acquire_requested()
374 WARN_ON_ONCE(nbcon_waiter_matches(cur, ctxt->prio)); in nbcon_context_try_acquire_requested()
419 struct nbcon_state *cur) in nbcon_context_try_acquire_handover() argument
431 WARN_ON_ONCE(ctxt->prio <= cur->prio || ctxt->prio <= cur->req_prio); in nbcon_context_try_acquire_handover()
432 WARN_ON_ONCE(!cur->unsafe); in nbcon_context_try_acquire_handover()
435 if (cur->cpu == cpu) in nbcon_context_try_acquire_handover()
442 if (cur->unsafe_takeover) in nbcon_context_try_acquire_handover()
453 new.atom = cur->atom; in nbcon_context_try_acquire_handover()
455 if (!nbcon_state_try_cmpxchg(con, cur, &new)) in nbcon_context_try_acquire_handover()
458 cur->atom = new.atom; in nbcon_context_try_acquire_handover()
463 request_err = nbcon_context_try_acquire_requested(ctxt, cur); in nbcon_context_try_acquire_handover()
477 nbcon_state_read(con, cur); in nbcon_context_try_acquire_handover()
487 if (!nbcon_waiter_matches(cur, ctxt->prio)) in nbcon_context_try_acquire_handover()
491 new.atom = cur->atom; in nbcon_context_try_acquire_handover()
493 if (nbcon_state_try_cmpxchg(con, cur, &new)) { in nbcon_context_try_acquire_handover()
498 cur->atom = new.atom; in nbcon_context_try_acquire_handover()
506 } while (nbcon_context_try_acquire_requested(ctxt, cur)); in nbcon_context_try_acquire_handover()
525 struct nbcon_state *cur) in nbcon_context_try_acquire_hostile() argument
542 WARN_ON_ONCE(ctxt->prio <= cur->prio || ctxt->prio <= cur->req_prio); in nbcon_context_try_acquire_hostile()
543 WARN_ON_ONCE(cur->unsafe != true); in nbcon_context_try_acquire_hostile()
546 new.atom = cur->atom; in nbcon_context_try_acquire_hostile()
549 new.unsafe |= cur->unsafe_takeover; in nbcon_context_try_acquire_hostile()
550 new.unsafe_takeover |= cur->unsafe; in nbcon_context_try_acquire_hostile()
552 } while (!nbcon_state_try_cmpxchg(con, cur, &new)); in nbcon_context_try_acquire_hostile()
575 struct nbcon_state cur; in nbcon_context_try_acquire() local
578 nbcon_state_read(con, &cur); in nbcon_context_try_acquire()
580 err = nbcon_context_try_acquire_direct(ctxt, &cur); in nbcon_context_try_acquire()
584 err = nbcon_context_try_acquire_handover(ctxt, &cur); in nbcon_context_try_acquire()
590 err = nbcon_context_try_acquire_hostile(ctxt, &cur); in nbcon_context_try_acquire()
609 static bool nbcon_owner_matches(struct nbcon_state *cur, int expected_cpu, in nbcon_owner_matches() argument
638 if (cur->prio != expected_prio) in nbcon_owner_matches()
641 if (cur->cpu != expected_cpu) in nbcon_owner_matches()
655 struct nbcon_state cur; in nbcon_context_release() local
658 nbcon_state_read(con, &cur); in nbcon_context_release()
661 if (!nbcon_owner_matches(&cur, cpu, ctxt->prio)) in nbcon_context_release()
664 new.atom = cur.atom; in nbcon_context_release()
671 new.unsafe |= cur.unsafe_takeover; in nbcon_context_release()
673 } while (!nbcon_state_try_cmpxchg(con, &cur, &new)); in nbcon_context_release()
704 static bool nbcon_context_can_proceed(struct nbcon_context *ctxt, struct nbcon_state *cur) in nbcon_context_can_proceed() argument
709 if (!nbcon_owner_matches(cur, cpu, ctxt->prio)) in nbcon_context_can_proceed()
713 if (cur->req_prio == NBCON_PRIO_NONE) in nbcon_context_can_proceed()
722 if (cur->unsafe) in nbcon_context_can_proceed()
726 WARN_ON_ONCE(cur->req_prio <= cur->prio); in nbcon_context_can_proceed()
776 struct nbcon_state cur; in nbcon_can_proceed() local
778 nbcon_state_read(con, &cur); in nbcon_can_proceed()
780 return nbcon_context_can_proceed(ctxt, &cur); in nbcon_can_proceed()
809 struct nbcon_state cur; in __nbcon_context_update_unsafe() local
812 nbcon_state_read(con, &cur); in __nbcon_context_update_unsafe()
819 if (!unsafe && cur.unsafe_takeover) in __nbcon_context_update_unsafe()
822 if (!nbcon_context_can_proceed(ctxt, &cur)) in __nbcon_context_update_unsafe()
825 new.atom = cur.atom; in __nbcon_context_update_unsafe()
827 } while (!nbcon_state_try_cmpxchg(con, &cur, &new)); in __nbcon_context_update_unsafe()
829 cur.atom = new.atom; in __nbcon_context_update_unsafe()
831 return nbcon_context_can_proceed(ctxt, &cur); in __nbcon_context_update_unsafe()
839 struct nbcon_state cur; in nbcon_write_context_set_buf() local
843 nbcon_state_read(con, &cur); in nbcon_write_context_set_buf()
844 wctxt->unsafe_takeover = cur.unsafe_takeover; in nbcon_write_context_set_buf()
949 struct nbcon_state cur; in nbcon_emit_next_record() local
1007 nbcon_state_read(con, &cur); in nbcon_emit_next_record()
1008 if (!nbcon_context_can_proceed(ctxt, &cur)) in nbcon_emit_next_record()