From 1a8dbad49a9f053c35452a8e448344239a724651 Mon Sep 17 00:00:00 2001 From: Thomas Monjalon Date: Fri, 5 Feb 2016 17:14:17 +0100 Subject: [PATCH] eal: fix keep alive header for C++ MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit When built in a C++ application, the keepalive include fails: rte_keepalive.h:142:41: error: ‘ALIVE’ was not declared in this scope keepcfg->state_flags[rte_lcore_id()] = ALIVE; ^ C++ requires to use a scope operator to access an enum inside a struct. There was also a namespace issue for the values (no RTE prefix). The solution is to move the struct and related code out of the header file. Fixes: 75583b0d1efd ("eal: add keep alive monitoring") Signed-off-by: Thomas Monjalon Acked-by: Remy Horton --- lib/librte_eal/common/include/rte_keepalive.h | 37 ++---------------- lib/librte_eal/common/rte_keepalive.c | 38 +++++++++++++++++++ 2 files changed, 41 insertions(+), 34 deletions(-) diff --git a/lib/librte_eal/common/include/rte_keepalive.h b/lib/librte_eal/common/include/rte_keepalive.h index 02472c0256..f4cec0484e 100644 --- a/lib/librte_eal/common/include/rte_keepalive.h +++ b/lib/librte_eal/common/include/rte_keepalive.h @@ -64,35 +64,7 @@ typedef void (*rte_keepalive_failure_callback_t)( * Keepalive state structure. * @internal */ -struct rte_keepalive { - /** Core Liveness. */ - enum { - ALIVE = 1, - MISSING = 0, - DEAD = 2, - GONE = 3 - } __rte_cache_aligned state_flags[RTE_KEEPALIVE_MAXCORES]; - - /** Last-seen-alive timestamps */ - uint64_t last_alive[RTE_KEEPALIVE_MAXCORES]; - - /** - * Cores to check. - * Indexed by core id, non-zero if the core should be checked. - */ - uint8_t active_cores[RTE_KEEPALIVE_MAXCORES]; - - /** Dead core handler. */ - rte_keepalive_failure_callback_t callback; - - /** - * Dead core handler app data. - * Pointer is passed to dead core handler. - */ - void *callback_data; - uint64_t tsc_initial; - uint64_t tsc_mhz; -}; +struct rte_keepalive; /** @@ -136,11 +108,8 @@ void rte_keepalive_register_core(struct rte_keepalive *keepcfg, * This function needs to be called from within the main process loop of * the LCore to be checked. */ -static inline void -rte_keepalive_mark_alive(struct rte_keepalive *keepcfg) -{ - keepcfg->state_flags[rte_lcore_id()] = ALIVE; -} +void +rte_keepalive_mark_alive(struct rte_keepalive *keepcfg); #endif /* _KEEPALIVE_H_ */ diff --git a/lib/librte_eal/common/rte_keepalive.c b/lib/librte_eal/common/rte_keepalive.c index 736fd0f49c..bd1f16bf67 100644 --- a/lib/librte_eal/common/rte_keepalive.c +++ b/lib/librte_eal/common/rte_keepalive.c @@ -39,6 +39,37 @@ #include #include +struct rte_keepalive { + /** Core Liveness. */ + enum rte_keepalive_state { + ALIVE = 1, + MISSING = 0, + DEAD = 2, + GONE = 3 + } __rte_cache_aligned state_flags[RTE_KEEPALIVE_MAXCORES]; + + /** Last-seen-alive timestamps */ + uint64_t last_alive[RTE_KEEPALIVE_MAXCORES]; + + /** + * Cores to check. + * Indexed by core id, non-zero if the core should be checked. + */ + uint8_t active_cores[RTE_KEEPALIVE_MAXCORES]; + + /** Dead core handler. */ + rte_keepalive_failure_callback_t callback; + + /** + * Dead core handler app data. + * Pointer is passed to dead core handler. + */ + void *callback_data; + uint64_t tsc_initial; + uint64_t tsc_mhz; +}; + + static void print_trace(const char *msg, struct rte_keepalive *keepcfg, int idx_core) { @@ -111,3 +142,10 @@ rte_keepalive_register_core(struct rte_keepalive *keepcfg, const int id_core) if (id_core < RTE_KEEPALIVE_MAXCORES) keepcfg->active_cores[id_core] = 1; } + + +void +rte_keepalive_mark_alive(struct rte_keepalive *keepcfg) +{ + keepcfg->state_flags[rte_lcore_id()] = ALIVE; +} -- 2.20.1