Changeset View
Changeset View
Standalone View
Standalone View
sys/sys/smr.h
Show First 20 Lines • Show All 59 Lines • ▼ Show 20 Lines | |||||
union s_wr { | union s_wr { | ||||
struct { | struct { | ||||
smr_seq_t seq; /* Current write sequence #. */ | smr_seq_t seq; /* Current write sequence #. */ | ||||
int ticks; /* tick of last update (LAZY) */ | int ticks; /* tick of last update (LAZY) */ | ||||
}; | }; | ||||
uint64_t _pair; | uint64_t _pair; | ||||
}; | }; | ||||
struct smr_shared { | struct smr_shared { | ||||
const char *s_name; /* Name for debugging/reporting. */ | |||||
union s_wr s_wr; /* Write sequence */ | union s_wr s_wr; /* Write sequence */ | ||||
smr_seq_t s_rd_seq; /* Minimum observed read sequence. */ | smr_seq_t s_rd_seq; /* Minimum observed read sequence. */ | ||||
smr_t s_cpu; /* Per-CPU sections. */ | |||||
struct smr_shared *s_next; /* Deferred init list entry. */ | |||||
const char *s_name; /* Name for debugging/reporting. */ | |||||
}; | }; | ||||
typedef struct smr_shared *smr_shared_t; | typedef struct smr_shared *smr_shared_t; | ||||
/* Per-cpu SMR state. */ | /* Per-cpu SMR state. */ | ||||
struct smr { | struct smr { | ||||
smr_seq_t c_seq; /* Current observed sequence. */ | smr_seq_t c_seq; /* Current observed sequence. */ | ||||
smr_shared_t c_shared; /* Shared SMR state. */ | smr_shared_t c_shared; /* Shared SMR state. */ | ||||
int c_deferred; /* Deferred advance counter. */ | int c_deferred; /* Deferred advance counter. */ | ||||
▲ Show 20 Lines • Show All 170 Lines • ▼ Show 20 Lines | |||||
* be less chance of busy looping while waiting for readers. | * be less chance of busy looping while waiting for readers. | ||||
*/ | */ | ||||
static inline void | static inline void | ||||
smr_synchronize(smr_t smr) | smr_synchronize(smr_t smr) | ||||
{ | { | ||||
smr_wait(smr, smr_advance(smr)); | smr_wait(smr, smr_advance(smr)); | ||||
} | } | ||||
/* Only at startup. */ | |||||
void smr_init(void); | |||||
#endif /* _SYS_SMR_H_ */ | #endif /* _SYS_SMR_H_ */ |