cregit-Linux how code gets into the kernel

Release 4.11 tools/perf/util/trigger.h

Directory: tools/perf/util
#ifndef __TRIGGER_H_

#define __TRIGGER_H_ 1

#include "util/debug.h"
#include "asm/bug.h"

/*
 * Use trigger to model operations which need to be executed when
 * an event (a signal, for example) is observed.
 *
 * States and transits:
 *
 *
 *  OFF--(on)--> READY --(hit)--> HIT
 *                 ^               |
 *                 |            (ready)
 *                 |               |
 *                  \_____________/
 *
 * is_hit and is_ready are two key functions to query the state of
 * a trigger. is_hit means the event already happen; is_ready means the
 * trigger is waiting for the event.
 */


struct trigger {
	volatile enum {
		
TRIGGER_ERROR		= -2,
		
TRIGGER_OFF		= -1,
		
TRIGGER_READY		= 0,
		
TRIGGER_HIT		= 1,
        } 
state;
	
const char *name;
};


#define TRIGGER_WARN_ONCE(t, exp) \
	WARN_ONCE(t->state != exp, "trigger '%s' state transist error: %d in %s()\n", \
                  t->name, t->state, __func__)


static inline bool trigger_is_available(struct trigger *t) { return t->state >= 0; }

Contributors

PersonTokensPropCommitsCommitProp
Wang Nan19100.00%1100.00%
Total19100.00%1100.00%


static inline bool trigger_is_error(struct trigger *t) { return t->state <= TRIGGER_ERROR; }

Contributors

PersonTokensPropCommitsCommitProp
Wang Nan19100.00%1100.00%
Total19100.00%1100.00%


static inline void trigger_on(struct trigger *t) { TRIGGER_WARN_ONCE(t, TRIGGER_OFF); t->state = TRIGGER_READY; }

Contributors

PersonTokensPropCommitsCommitProp
Wang Nan25100.00%1100.00%
Total25100.00%1100.00%


static inline void trigger_ready(struct trigger *t) { if (!trigger_is_available(t)) return; t->state = TRIGGER_READY; }

Contributors

PersonTokensPropCommitsCommitProp
Wang Nan27100.00%1100.00%
Total27100.00%1100.00%


static inline void trigger_hit(struct trigger *t) { if (!trigger_is_available(t)) return; TRIGGER_WARN_ONCE(t, TRIGGER_READY); t->state = TRIGGER_HIT; }

Contributors

PersonTokensPropCommitsCommitProp
Wang Nan34100.00%1100.00%
Total34100.00%1100.00%


static inline void trigger_off(struct trigger *t) { if (!trigger_is_available(t)) return; t->state = TRIGGER_OFF; }

Contributors

PersonTokensPropCommitsCommitProp
Wang Nan27100.00%1100.00%
Total27100.00%1100.00%


static inline void trigger_error(struct trigger *t) { t->state = TRIGGER_ERROR; }

Contributors

PersonTokensPropCommitsCommitProp
Wang Nan18100.00%1100.00%
Total18100.00%1100.00%


static inline bool trigger_is_ready(struct trigger *t) { return t->state == TRIGGER_READY; }

Contributors

PersonTokensPropCommitsCommitProp
Wang Nan19100.00%1100.00%
Total19100.00%1100.00%


static inline bool trigger_is_hit(struct trigger *t) { return t->state == TRIGGER_HIT; }

Contributors

PersonTokensPropCommitsCommitProp
Wang Nan19100.00%1100.00%
Total19100.00%1100.00%

#define DEFINE_TRIGGER(n) \ struct trigger n = {.state = TRIGGER_OFF, .name = #n} #endif

Overall Contributors

PersonTokensPropCommitsCommitProp
Wang Nan274100.00%1100.00%
Total274100.00%1100.00%
Directory: tools/perf/util
Information contained on this website is for historical information purposes only and does not indicate or represent copyright ownership.
Created with cregit.