Lines Matching refs:tep

52 #define	MCTE_CLASS(tep) ((tep)->mcte_flags & MCTE_F_MASK_CLASS)  argument
53 #define MCTE_SET_CLASS(tep, new) do { \ argument
54 (tep)->mcte_flags &= ~MCTE_F_MASK_CLASS; \
55 (tep)->mcte_flags |= MCTE_F_CLASS_##new; } while (0)
57 #define MCTE_STATE(tep) ((tep)->mcte_flags & MCTE_F_MASK_STATE) argument
58 #define MCTE_TRANSITION_STATE(tep, old, new) do { \ argument
59 BUG_ON(MCTE_STATE(tep) != (MCTE_F_STATE_##old)); \
60 (tep)->mcte_flags &= ~MCTE_F_MASK_STATE; \
61 (tep)->mcte_flags |= (MCTE_F_STATE_##new); } while (0)
71 #define MCTE2COOKIE(tep) ((mctelem_cookie_t)(tep)) argument
173 struct mctelem_ent *tep = COOKIE2MCTE(cookie); in mctelem_defer() local
179 mctelem_xchg_head(&mctctl->pending, &tep->mcte_next, tep); in mctelem_defer()
181 mctelem_xchg_head(&mctctl->lmce_pending, &tep->mcte_next, tep); in mctelem_defer()
195 mctelem_xchg_head(&mctctl->pending, &tep->mcte_next, tep); in mctelem_defer()
217 struct mctelem_ent *tep; in mctelem_process_deferred() local
249 for (tep = head, prev = NULL; tep != NULL; tep = tep->mcte_next) { in mctelem_process_deferred()
250 tep->mcte_prev = prev; in mctelem_process_deferred()
251 prev = tep; in mctelem_process_deferred()
260 for (tep = prev; tep != NULL; tep = prev) { in mctelem_process_deferred()
261 prev = tep->mcte_prev; in mctelem_process_deferred()
262 tep->mcte_next = tep->mcte_prev = NULL; in mctelem_process_deferred()
264 ret = fn(MCTE2COOKIE(tep)); in mctelem_process_deferred()
267 tep->mcte_prev = tep->mcte_next = NULL; in mctelem_process_deferred()
269 mctelem_commit(MCTE2COOKIE(tep)); in mctelem_process_deferred()
271 mctelem_dismiss(MCTE2COOKIE(tep)); in mctelem_process_deferred()
290 static void mctelem_free(struct mctelem_ent *tep) in mctelem_free() argument
292 BUG_ON(tep->mcte_refcnt != 0); in mctelem_free()
293 BUG_ON(MCTE_STATE(tep) != MCTE_F_STATE_FREE); in mctelem_free()
295 tep->mcte_prev = NULL; in mctelem_free()
296 tep->mcte_next = NULL; in mctelem_free()
299 set_bit(tep - mctctl.mctc_elems, mctctl.mctc_free); in mctelem_free()
305 static void mctelem_hold(struct mctelem_ent *tep) in mctelem_hold() argument
307 tep->mcte_refcnt++; in mctelem_hold()
313 static void mctelem_processing_hold(struct mctelem_ent *tep) in mctelem_processing_hold() argument
315 int which = MCTE_CLASS(tep) == MCTE_F_CLASS_URGENT ? in mctelem_processing_hold()
318 BUG_ON(tep != mctctl.mctc_processing_head[which]); in mctelem_processing_hold()
319 tep->mcte_refcnt++; in mctelem_processing_hold()
325 static void mctelem_processing_release(struct mctelem_ent *tep) in mctelem_processing_release() argument
327 int which = MCTE_CLASS(tep) == MCTE_F_CLASS_URGENT ? in mctelem_processing_release()
330 BUG_ON(tep != mctctl.mctc_processing_head[which]); in mctelem_processing_release()
331 if (--tep->mcte_refcnt == 0) { in mctelem_processing_release()
332 MCTE_TRANSITION_STATE(tep, PROCESSING, FREE); in mctelem_processing_release()
333 mctctl.mctc_processing_head[which] = tep->mcte_next; in mctelem_processing_release()
334 mctelem_free(tep); in mctelem_processing_release()
356 struct mctelem_ent *tep; in mctelem_init() local
358 tep = mctctl.mctc_elems + i; in mctelem_init()
359 tep->mcte_flags = MCTE_F_STATE_FREE; in mctelem_init()
360 tep->mcte_refcnt = 0; in mctelem_init()
361 tep->mcte_data = datarr + i * datasz; in mctelem_init()
364 tep->mcte_next = NULL; in mctelem_init()
365 tep->mcte_prev = NULL; in mctelem_init()
392 struct mctelem_ent *tep = mctctl.mctc_elems + bit; in mctelem_reserve() local
394 mctelem_hold(tep); in mctelem_reserve()
395 MCTE_TRANSITION_STATE(tep, FREE, UNCOMMITTED); in mctelem_reserve()
396 tep->mcte_next = NULL; in mctelem_reserve()
397 tep->mcte_prev = NULL; in mctelem_reserve()
399 MCTE_SET_CLASS(tep, URGENT); in mctelem_reserve()
401 MCTE_SET_CLASS(tep, NONURGENT); in mctelem_reserve()
402 return MCTE2COOKIE(tep); in mctelem_reserve()
409 struct mctelem_ent *tep = COOKIE2MCTE(cookie); in mctelem_dataptr() local
411 return tep->mcte_data; in mctelem_dataptr()
420 struct mctelem_ent *tep = COOKIE2MCTE(cookie); in mctelem_dismiss() local
422 tep->mcte_refcnt--; in mctelem_dismiss()
423 MCTE_TRANSITION_STATE(tep, UNCOMMITTED, FREE); in mctelem_dismiss()
424 mctelem_free(tep); in mctelem_dismiss()
434 struct mctelem_ent *tep = COOKIE2MCTE(cookie); in mctelem_commit() local
435 mctelem_class_t target = MCTE_CLASS(tep) == MCTE_F_CLASS_URGENT ? in mctelem_commit()
438 BUG_ON(tep->mcte_next != NULL || tep->mcte_prev != NULL); in mctelem_commit()
439 MCTE_TRANSITION_STATE(tep, UNCOMMITTED, COMMITTED); in mctelem_commit()
441 mctelem_xchg_head(&mctctl.mctc_committed[target], &tep->mcte_prev, tep); in mctelem_commit()
466 struct mctelem_ent *tep, *ltep; in mctelem_append_processing() local
484 for (tep = dangling[target], ltep = NULL; tep != NULL; in mctelem_append_processing()
485 tep = tep->mcte_prev) { in mctelem_append_processing()
486 MCTE_TRANSITION_STATE(tep, COMMITTED, PROCESSING); in mctelem_append_processing()
487 tep->mcte_next = ltep; in mctelem_append_processing()
488 ltep = tep; in mctelem_append_processing()
513 struct mctelem_ent *tep; in mctelem_consume_oldest_begin() local
517 if ((tep = mctctl.mctc_processing_head[target]) == NULL) { in mctelem_consume_oldest_begin()
522 mctelem_processing_hold(tep); in mctelem_consume_oldest_begin()
525 return MCTE2COOKIE(tep); in mctelem_consume_oldest_begin()
530 struct mctelem_ent *tep = COOKIE2MCTE(cookie); in mctelem_consume_oldest_end() local
533 mctelem_processing_release(tep); in mctelem_consume_oldest_end()
542 struct mctelem_ent *tep = COOKIE2MCTE(cookie); in mctelem_ack() local
544 if (tep == NULL) in mctelem_ack()
548 if (tep == mctctl.mctc_processing_head[target]) in mctelem_ack()
549 mctelem_processing_release(tep); in mctelem_ack()