HEALTH_TYPE_APP_REG = 2,
HEALTH_TYPE_KERNEL = 3,
HEALTH_TYPE_CONSUMER = 4,
+ HEALTH_TYPE_HT_CLEANUP = 5,
+ HEALTH_TYPE_APP_MANAGE_NOTIFY = 6,
+ HEALTH_TYPE_APP_REG_DISPATCH = 7,
HEALTH_NUM_TYPE,
};
/* Declare TLS health state. */
extern DECLARE_URCU_TLS(struct health_state, health_state);
-/* Health state counters for the client command thread */
-extern struct health_state health_thread_cmd;
-
-/* Health state counters for the application management thread */
-extern struct health_state health_thread_app_manage;
-
-/* Health state counters for the application registration thread */
-extern struct health_state health_thread_app_reg;
+/*
+ * Update current counter by 1 to indicate that the thread entered or left a
+ * blocking state caused by a poll(). If the counter's value is not an even
+ * number (meaning a code execution flow), an assert() is raised.
+ */
+static inline void health_poll_entry(void)
+{
+ /* Code MUST be in code execution state which is an even number. */
+ assert(!(uatomic_read(&URCU_TLS(health_state).current)
+ & HEALTH_POLL_VALUE));
-/* Health state counters for the kernel thread */
-extern struct health_state health_thread_kernel;
+ uatomic_add(&URCU_TLS(health_state).current, HEALTH_POLL_VALUE);
+}
/*
- * Update current counter by 1 to indicate that the thread entered or
- * left a blocking state caused by a poll().
+ * Update current counter by 1 indicating the exit of a poll or blocking call.
+ * If the counter's value is not an odd number (a poll execution), an assert()
+ * is raised.
*/
-static inline void health_poll_update(struct health_state *state)
+static inline void health_poll_exit(void)
{
+ /* Code MUST be in poll execution state which is an odd number. */
+ assert(uatomic_read(&URCU_TLS(health_state).current)
+ & HEALTH_POLL_VALUE);
+
uatomic_add(&URCU_TLS(health_state).current, HEALTH_POLL_VALUE);
}
* Update current counter by 2 indicates progress in execution of a
* thread.
*/
-static inline void health_code_update(struct health_state *state)
+static inline void health_code_update(void)
{
uatomic_add(&URCU_TLS(health_state).current, HEALTH_CODE_VALUE);
}
/*
* Set health "error" flag.
*/
-static inline void health_error(struct health_state *state)
+static inline void health_error(void)
{
uatomic_or(&URCU_TLS(health_state).flags, HEALTH_ERROR);
}