Motr  M0
sm.c File Reference
#include "lib/trace.h"
#include "lib/errno.h"
#include "lib/misc.h"
#include "lib/mutex.h"
#include "lib/thread.h"
#include "lib/arith.h"
#include "lib/memory.h"
#include "lib/finject.h"
#include "lib/locality.h"
#include "addb2/addb2.h"
#include "addb2/identifier.h"
#include "sm/sm.h"
Include dependency graph for sm.c:

Go to the source code of this file.

Data Structures

struct  sm_call
 

Macros

#define M0_TRACE_SUBSYSTEM   M0_TRACE_SUBSYS_SM
 

Enumerations

enum  timer_state { INIT, ARMED, DONE }
 

Functions

M0_INTERNAL void m0_sm_group_init (struct m0_sm_group *grp)
 
M0_INTERNAL void m0_sm_group_fini (struct m0_sm_group *grp)
 
static void _sm_group_lock (struct m0_sm_group *grp)
 
M0_INTERNAL void m0_sm_group_lock (struct m0_sm_group *grp)
 
static void _sm_group_unlock (struct m0_sm_group *grp)
 
M0_INTERNAL void m0_sm_group_unlock (struct m0_sm_group *grp)
 
static bool grp_is_locked (const struct m0_sm_group *grp)
 
M0_INTERNAL bool m0_sm_group_is_locked (const struct m0_sm_group *grp)
 
M0_INTERNAL void m0_sm_group_lock_rec (struct m0_sm_group *grp, bool runast)
 
M0_INTERNAL void m0_sm_group_unlock_rec (struct m0_sm_group *grp, bool runast)
 
M0_INTERNAL void m0_sm_ast_post (struct m0_sm_group *grp, struct m0_sm_ast *ast)
 
M0_INTERNAL void m0_sm_asts_run (struct m0_sm_group *grp)
 
M0_INTERNAL void m0_sm_ast_cancel (struct m0_sm_group *grp, struct m0_sm_ast *ast)
 
static void sm_lock (struct m0_sm *mach)
 
static void sm_unlock (struct m0_sm *mach)
 
static bool sm_is_locked (const struct m0_sm *mach)
 
static bool state_is_valid (const struct m0_sm_conf *conf, uint32_t state)
 
static const struct m0_sm_state_descrstate_get (const struct m0_sm *mach, uint32_t state)
 
static const struct m0_sm_state_descrsm_state (const struct m0_sm *mach)
 
M0_INTERNAL bool sm_invariant0 (const struct m0_sm *mach)
 
M0_INTERNAL bool m0_sm_invariant (const struct m0_sm *mach)
 
static bool conf_invariant (const struct m0_sm_conf *conf)
 
M0_INTERNAL void m0_sm_init (struct m0_sm *mach, const struct m0_sm_conf *conf, uint32_t state, struct m0_sm_group *grp)
 
M0_INTERNAL void m0_sm_fini (struct m0_sm *mach)
 
M0_INTERNAL void m0_sm_conf_init (struct m0_sm_conf *conf)
 
M0_INTERNAL void m0_sm_conf_fini (struct m0_sm_conf *conf)
 
M0_INTERNAL bool m0_sm_conf_is_initialized (const struct m0_sm_conf *conf)
 
M0_INTERNAL int m0_sm_timedwait (struct m0_sm *mach, uint64_t states, m0_time_t deadline)
 
static void state_set (struct m0_sm *mach, int state, int32_t rc)
 
M0_INTERNAL void m0_sm_fail (struct m0_sm *mach, int fail_state, int32_t rc)
 
void m0_sm_state_set (struct m0_sm *mach, int state)
 
M0_INTERNAL void m0_sm_move (struct m0_sm *mach, int32_t rc, int state)
 
static unsigned long sm_timer_top (unsigned long data)
 
static void timer_done (struct m0_sm_timer *timer)
 
static void sm_timer_bottom (struct m0_sm_group *grp, struct m0_sm_ast *ast)
 
M0_INTERNAL void m0_sm_timer_init (struct m0_sm_timer *timer)
 
M0_INTERNAL void m0_sm_timer_fini (struct m0_sm_timer *timer)
 
M0_INTERNAL int m0_sm_timer_start (struct m0_sm_timer *timer, struct m0_sm_group *group, void(*cb)(struct m0_sm_timer *), m0_time_t deadline)
 
M0_INTERNAL void m0_sm_timer_cancel (struct m0_sm_timer *timer)
 
M0_INTERNAL bool m0_sm_timer_is_armed (const struct m0_sm_timer *timer)
 
static void timeout_ast (struct m0_sm_timer *timer)
 
static bool sm_timeout_cancel (struct m0_clink *link)
 
M0_INTERNAL void m0_sm_timeout_init (struct m0_sm_timeout *to)
 
M0_INTERNAL int m0_sm_timeout_arm (struct m0_sm *mach, struct m0_sm_timeout *to, m0_time_t timeout, int state, uint64_t bitmask)
 
M0_INTERNAL void m0_sm_timeout_fini (struct m0_sm_timeout *to)
 
M0_INTERNAL bool m0_sm_timeout_is_armed (const struct m0_sm_timeout *to)
 
static bool trans_exists (const struct m0_sm_conf *conf, uint32_t src, uint32_t tgt)
 
M0_INTERNAL void m0_sm_conf_trans_extend (const struct m0_sm_conf *base, struct m0_sm_conf *sub)
 
M0_INTERNAL void m0_sm_conf_extend (const struct m0_sm_state_descr *base, struct m0_sm_state_descr *sub, uint32_t nr)
 
M0_INTERNAL const char * m0_sm_conf_state_name (const struct m0_sm_conf *conf, int state)
 
M0_INTERNAL const char * m0_sm_state_name (const struct m0_sm *mach, int state)
 
static void sm_call_ast (struct m0_sm_group *grp, struct m0_sm_ast *ast)
 
int m0_sm_group_call (struct m0_sm_group *group, int(*cb)(void *), void *data)
 
static int sm_addb2_ctor (struct m0_sm_addb2_stats *stats, const struct m0_sm_conf *c)
 
static void sm_addb2_dtor (struct m0_sm_addb2_stats *stats, const struct m0_sm_conf *c)
 
M0_INTERNAL int m0_sm_addb2_init (struct m0_sm_conf *conf, uint64_t id, uint64_t counter)
 
M0_INTERNAL void m0_sm_addb2_fini (struct m0_sm_conf *conf)
 
static void sm_addb2_counter_init_add (struct m0_sm *sm)
 
M0_INTERNAL bool m0_sm_addb2_counter_init (struct m0_sm *sm)
 
M0_INTERNAL void m0_sm_ast_wait_init (struct m0_sm_ast_wait *wait, struct m0_mutex *ch_guard)
 
M0_INTERNAL void m0_sm_ast_wait_fini (struct m0_sm_ast_wait *wait)
 
M0_INTERNAL void m0_sm_ast_wait_prepare (struct m0_sm_ast_wait *wait, struct m0_clink *clink)
 
M0_INTERNAL void m0_sm_ast_wait_complete (struct m0_sm_ast_wait *wait, struct m0_clink *clink)
 
M0_INTERNAL void m0_sm_ast_wait_loop (struct m0_sm_ast_wait *wait, struct m0_clink *clink)
 
M0_INTERNAL void m0_sm_ast_wait (struct m0_sm_ast_wait *wait)
 
M0_INTERNAL void m0_sm_ast_wait_post (struct m0_sm_ast_wait *wait, struct m0_sm_group *grp, struct m0_sm_ast *ast)
 
M0_INTERNAL void m0_sm_ast_wait_signal (struct m0_sm_ast_wait *wait)
 
M0_INTERNAL void m0_sm_conf_print (const struct m0_sm_conf *conf)
 
M0_INTERNAL uint64_t m0_sm_id_get (const struct m0_sm *sm)
 

Variables

static struct m0_sm_ast eoq
 
M0_INTERNAL void(* m0_sm__conf_init )(const struct m0_sm_conf *conf) = NULL
 

Macro Definition Documentation

◆ M0_TRACE_SUBSYSTEM

#define M0_TRACE_SUBSYSTEM   M0_TRACE_SUBSYS_SM

Definition at line 23 of file sm.c.