git.droids-corp.org
/
dpdk.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
table: remove deprecated variable size key lru hash tables
[dpdk.git]
/
lib
/
librte_eal
/
common
/
rte_keepalive.c
diff --git
a/lib/librte_eal/common/rte_keepalive.c
b/lib/librte_eal/common/rte_keepalive.c
index
56df0b1
..
cdd6956
100644
(file)
--- a/
lib/librte_eal/common/rte_keepalive.c
+++ b/
lib/librte_eal/common/rte_keepalive.c
@@
-38,16
+38,11
@@
#include <rte_log.h>
#include <rte_keepalive.h>
#include <rte_malloc.h>
#include <rte_log.h>
#include <rte_keepalive.h>
#include <rte_malloc.h>
-#include <rte_cycles.h>
struct rte_keepalive {
/** Core Liveness. */
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];
+ enum rte_keepalive_state __rte_cache_aligned state_flags[
+ RTE_KEEPALIVE_MAXCORES];
/** Last-seen-alive timestamps */
uint64_t last_alive[RTE_KEEPALIVE_MAXCORES];
/** Last-seen-alive timestamps */
uint64_t last_alive[RTE_KEEPALIVE_MAXCORES];
@@
-68,8
+63,16
@@
struct rte_keepalive {
void *callback_data;
uint64_t tsc_initial;
uint64_t tsc_mhz;
void *callback_data;
uint64_t tsc_initial;
uint64_t tsc_mhz;
-};
+ /** Core state relay handler. */
+ rte_keepalive_relay_callback_t relay_callback;
+
+ /**
+ * Core state relay handler app data.
+ * Pointer is passed to live core handler.
+ */
+ void *relay_callback_data;
+};
static void
print_trace(const char *msg, struct rte_keepalive *keepcfg, int idx_core)
static void
print_trace(const char *msg, struct rte_keepalive *keepcfg, int idx_core)
@@
-81,7
+84,6
@@
print_trace(const char *msg, struct rte_keepalive *keepcfg, int idx_core)
);
}
);
}
-
void
rte_keepalive_dispatch_pings(__rte_unused void *ptr_timer,
void *ptr_data)
void
rte_keepalive_dispatch_pings(__rte_unused void *ptr_timer,
void *ptr_data)
@@
-94,16
+96,18
@@
rte_keepalive_dispatch_pings(__rte_unused void *ptr_timer,
continue;
switch (keepcfg->state_flags[idx_core]) {
continue;
switch (keepcfg->state_flags[idx_core]) {
- case ALIVE: /* Alive */
- keepcfg->state_flags[idx_core] = MISSING;
+ case RTE_KA_STATE_UNUSED:
+ break;
+ case RTE_KA_STATE_ALIVE: /* Alive */
+ keepcfg->state_flags[idx_core] = RTE_KA_STATE_MISSING;
keepcfg->last_alive[idx_core] = rte_rdtsc();
break;
keepcfg->last_alive[idx_core] = rte_rdtsc();
break;
- case MISSING: /* MIA */
+ case
RTE_KA_STATE_
MISSING: /* MIA */
print_trace("Core MIA. ", keepcfg, idx_core);
print_trace("Core MIA. ", keepcfg, idx_core);
- keepcfg->state_flags[idx_core] = DEAD;
+ keepcfg->state_flags[idx_core] =
RTE_KA_STATE_
DEAD;
break;
break;
- case DEAD: /* Dead */
- keepcfg->state_flags[idx_core] = GONE;
+ case
RTE_KA_STATE_
DEAD: /* Dead */
+ keepcfg->state_flags[idx_core] =
RTE_KA_STATE_
GONE;
print_trace("Core died. ", keepcfg, idx_core);
if (keepcfg->callback)
keepcfg->callback(
print_trace("Core died. ", keepcfg, idx_core);
if (keepcfg->callback)
keepcfg->callback(
@@
-111,13
+115,25
@@
rte_keepalive_dispatch_pings(__rte_unused void *ptr_timer,
idx_core
);
break;
idx_core
);
break;
- case GONE: /* Buried */
+ case RTE_KA_STATE_GONE: /* Buried */
+ break;
+ case RTE_KA_STATE_DOZING: /* Core going idle */
+ keepcfg->state_flags[idx_core] = RTE_KA_STATE_SLEEP;
+ keepcfg->last_alive[idx_core] = rte_rdtsc();
+ break;
+ case RTE_KA_STATE_SLEEP: /* Idled core */
break;
}
break;
}
+ if (keepcfg->relay_callback)
+ keepcfg->relay_callback(
+ keepcfg->relay_callback_data,
+ idx_core,
+ keepcfg->state_flags[idx_core],
+ keepcfg->last_alive[idx_core]
+ );
}
}
}
}
-
struct rte_keepalive *
rte_keepalive_create(rte_keepalive_failure_callback_t callback,
void *data)
struct rte_keepalive *
rte_keepalive_create(rte_keepalive_failure_callback_t callback,
void *data)
@@
-136,19
+152,31
@@
rte_keepalive_create(rte_keepalive_failure_callback_t callback,
return keepcfg;
}
return keepcfg;
}
+void rte_keepalive_register_relay_callback(struct rte_keepalive *keepcfg,
+ rte_keepalive_relay_callback_t callback,
+ void *data)
+{
+ keepcfg->relay_callback = callback;
+ keepcfg->relay_callback_data = data;
+}
void
rte_keepalive_register_core(struct rte_keepalive *keepcfg, const int id_core)
{
if (id_core < RTE_KEEPALIVE_MAXCORES) {
void
rte_keepalive_register_core(struct rte_keepalive *keepcfg, const int id_core)
{
if (id_core < RTE_KEEPALIVE_MAXCORES) {
- keepcfg->active_cores[id_core] =
1
;
+ keepcfg->active_cores[id_core] =
RTE_KA_STATE_ALIVE
;
keepcfg->last_alive[id_core] = rte_rdtsc();
}
}
keepcfg->last_alive[id_core] = rte_rdtsc();
}
}
-
void
rte_keepalive_mark_alive(struct rte_keepalive *keepcfg)
{
void
rte_keepalive_mark_alive(struct rte_keepalive *keepcfg)
{
- keepcfg->state_flags[rte_lcore_id()] = ALIVE;
+ keepcfg->state_flags[rte_lcore_id()] = RTE_KA_STATE_ALIVE;
+}
+
+void
+rte_keepalive_mark_sleep(struct rte_keepalive *keepcfg)
+{
+ keepcfg->state_flags[rte_lcore_id()] = RTE_KA_STATE_DOZING;
}
}