X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;ds=sidebyside;f=lib%2Flibrte_eal%2Fcommon%2Finclude%2Frte_keepalive.h;h=e9f8f083a16ace988a862b737a71209593b1d624;hb=d39d8c4bb66c68a6aa13fd363502e4d4986018f7;hp=f4cec0484e664c6c586fe14cbbae3ec959f961aa;hpb=1a8dbad49a9f053c35452a8e448344239a724651;p=dpdk.git diff --git a/lib/librte_eal/common/include/rte_keepalive.h b/lib/librte_eal/common/include/rte_keepalive.h index f4cec0484e..e9f8f083a1 100644 --- a/lib/librte_eal/common/include/rte_keepalive.h +++ b/lib/librte_eal/common/include/rte_keepalive.h @@ -1,7 +1,7 @@ /*- * BSD LICENSE * - * Copyright 2015 Intel Shannon Ltd. All rights reserved. + * Copyright 2015-2016 Intel Shannon Ltd. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions @@ -39,6 +39,7 @@ #ifndef _KEEPALIVE_H_ #define _KEEPALIVE_H_ +#include #include #ifndef RTE_KEEPALIVE_MAXCORES @@ -48,17 +49,45 @@ #define RTE_KEEPALIVE_MAXCORES RTE_MAX_LCORE #endif +enum rte_keepalive_state { + RTE_KA_STATE_UNUSED = 0, + RTE_KA_STATE_ALIVE = 1, + RTE_KA_STATE_MISSING = 4, + RTE_KA_STATE_DEAD = 2, + RTE_KA_STATE_GONE = 3, + RTE_KA_STATE_DOZING = 5, + RTE_KA_STATE_SLEEP = 6 +}; /** * Keepalive failure callback. * * Receives a data pointer passed to rte_keepalive_create() and the id of the * failed core. + * @param data Data pointer passed to rte_keepalive_create() + * @param id_core ID of the core that has failed */ typedef void (*rte_keepalive_failure_callback_t)( void *data, const int id_core); +/** + * Keepalive relay callback. + * + * Receives a data pointer passed to rte_keepalive_register_relay_callback(), + * the id of the core for which state is to be forwarded, and details of the + * current core state. + * @param data Data pointer passed to rte_keepalive_register_relay_callback() + * @param id_core ID of the core for which state is being reported + * @param core_state The current state of the core + * @param Timestamp of when core was last seen alive + */ +typedef void (*rte_keepalive_relay_callback_t)( + void *data, + const int id_core, + enum rte_keepalive_state core_state, + uint64_t last_seen + ); /** * Keepalive state structure. @@ -66,7 +95,6 @@ typedef void (*rte_keepalive_failure_callback_t)( */ struct rte_keepalive; - /** * Initialise keepalive sub-system. * @param callback @@ -80,7 +108,6 @@ struct rte_keepalive *rte_keepalive_create( rte_keepalive_failure_callback_t callback, void *data); - /** * Checks & handles keepalive state of monitored cores. * @param *ptr_timer Triggering timer (unused) @@ -88,7 +115,6 @@ struct rte_keepalive *rte_keepalive_create( */ void rte_keepalive_dispatch_pings(void *ptr_timer, void *ptr_data); - /** * Registers a core for keepalive checks. * @param *keepcfg @@ -99,7 +125,6 @@ void rte_keepalive_dispatch_pings(void *ptr_timer, void *ptr_data); void rte_keepalive_register_core(struct rte_keepalive *keepcfg, const int id_core); - /** * Per-core keepalive check. * @param *keepcfg @@ -111,5 +136,35 @@ void rte_keepalive_register_core(struct rte_keepalive *keepcfg, void rte_keepalive_mark_alive(struct rte_keepalive *keepcfg); +/** + * Per-core sleep-time indication. + * @param *keepcfg + * Keepalive structure pointer + * + * If CPU idling is enabled, this function needs to be called from within + * the main process loop of the LCore going to sleep, in order to avoid + * the LCore being mis-detected as dead. + */ +void +rte_keepalive_mark_sleep(struct rte_keepalive *keepcfg); + +/** + * Registers a 'live core' callback. + * + * The complement of the 'dead core' callback. This is called when a + * core is known to be alive, and is intended for cases when an app + * needs to know 'liveness' beyond just knowing when a core has died. + * + * @param *keepcfg + * Keepalive structure pointer + * @param callback + * Function called upon detection of a dead core. + * @param data + * Data pointer to be passed to function callback. + */ +void +rte_keepalive_register_relay_callback(struct rte_keepalive *keepcfg, + rte_keepalive_relay_callback_t callback, + void *data); #endif /* _KEEPALIVE_H_ */