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,
};
extern DECLARE_URCU_TLS(struct health_state, health_state);
/*
- * 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 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_update(void)
+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));
+
+ uatomic_add(&URCU_TLS(health_state).current, HEALTH_POLL_VALUE);
+}
+
+/*
+ * 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_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);
}