reactor: Encapsulate a function _event_call.
Former code, there're many repeated defines. And some add asserts checking valid event and some don't add. To get the right reports from debugging mode and catch the errors, so encapsulate a common function to do these. And add assert in this function. This will help get the right failure point. Signed-off-by: yidong0635 <dongx.yi@intel.com> Change-Id: I23d71eac6652c4104ceff80419f39634ac5ce395 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/14335 Community-CI: Mellanox Build Bot Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Shuhei Matsumoto <smatsumoto@nvidia.com> Reviewed-by: Jim Harris <james.r.harris@intel.com>
This commit is contained in:
parent
7d4f7b7f01
commit
9e81535efe
@ -317,6 +317,16 @@ _reactor_set_notify_cpuset(void *arg1, void *arg2)
|
||||
spdk_cpuset_set_cpu(&reactor->notify_cpuset, target->lcore, target->new_in_interrupt);
|
||||
}
|
||||
|
||||
static void
|
||||
_event_call(uint32_t lcore, spdk_event_fn fn, void *arg1, void *arg2)
|
||||
{
|
||||
struct spdk_event *ev;
|
||||
|
||||
ev = spdk_event_allocate(lcore, fn, arg1, arg2);
|
||||
assert(ev);
|
||||
spdk_event_call(ev);
|
||||
}
|
||||
|
||||
static void
|
||||
_reactor_set_notify_cpuset_cpl(void *arg1, void *arg2)
|
||||
{
|
||||
@ -327,11 +337,7 @@ _reactor_set_notify_cpuset_cpl(void *arg1, void *arg2)
|
||||
spdk_thread_send_msg(_spdk_get_app_thread(), target->set_interrupt_mode_cb_fn,
|
||||
target->set_interrupt_mode_cb_arg);
|
||||
} else {
|
||||
struct spdk_event *ev;
|
||||
|
||||
ev = spdk_event_allocate(target->lcore, _reactor_set_interrupt_mode, target, NULL);
|
||||
assert(ev);
|
||||
spdk_event_call(ev);
|
||||
_event_call(target->lcore, _reactor_set_interrupt_mode, target, NULL);
|
||||
}
|
||||
}
|
||||
|
||||
@ -433,11 +439,7 @@ spdk_reactor_set_interrupt_mode(uint32_t lcore, bool new_in_interrupt,
|
||||
* first change the mode of the reactor and then clear the corresponding
|
||||
* bit of the notify_cpuset of each reactor.
|
||||
*/
|
||||
struct spdk_event *ev;
|
||||
|
||||
ev = spdk_event_allocate(lcore, _reactor_set_interrupt_mode, target, NULL);
|
||||
assert(ev);
|
||||
spdk_event_call(ev);
|
||||
_event_call(lcore, _reactor_set_interrupt_mode, target, NULL);
|
||||
} else {
|
||||
/* For race cases, when setting the reactor to interrupt mode, first set the
|
||||
* corresponding bit of the notify_cpuset of each reactor and then change the mode.
|
||||
@ -768,7 +770,6 @@ _reactors_scheduler_gather_metrics(void *arg1, void *arg2)
|
||||
struct spdk_lw_thread *lw_thread;
|
||||
struct spdk_thread *thread;
|
||||
struct spdk_reactor *reactor;
|
||||
struct spdk_event *evt;
|
||||
uint32_t next_core;
|
||||
uint32_t i = 0;
|
||||
|
||||
@ -791,8 +792,7 @@ _reactors_scheduler_gather_metrics(void *arg1, void *arg2)
|
||||
SPDK_ERRLOG("Failed to allocate memory when gathering metrics on %u\n", reactor->lcore);
|
||||
|
||||
/* Cancel this round of schedule work */
|
||||
evt = spdk_event_allocate(g_scheduling_reactor->lcore, _reactors_scheduler_cancel, NULL, NULL);
|
||||
spdk_event_call(evt);
|
||||
_event_call(g_scheduling_reactor->lcore, _reactors_scheduler_cancel, NULL, NULL);
|
||||
return;
|
||||
}
|
||||
|
||||
@ -819,13 +819,11 @@ _reactors_scheduler_gather_metrics(void *arg1, void *arg2)
|
||||
/* If we've looped back around to the scheduler thread, move to the next phase */
|
||||
if (next_core == g_scheduling_reactor->lcore) {
|
||||
/* Phase 2 of scheduling is rebalancing - deciding which threads to move where */
|
||||
evt = spdk_event_allocate(next_core, _reactors_scheduler_balance, NULL, NULL);
|
||||
spdk_event_call(evt);
|
||||
_event_call(next_core, _reactors_scheduler_balance, NULL, NULL);
|
||||
return;
|
||||
}
|
||||
|
||||
evt = spdk_event_allocate(next_core, _reactors_scheduler_gather_metrics, NULL, NULL);
|
||||
spdk_event_call(evt);
|
||||
_event_call(next_core, _reactors_scheduler_gather_metrics, NULL, NULL);
|
||||
}
|
||||
|
||||
static int _reactor_schedule_thread(struct spdk_thread *thread);
|
||||
@ -1350,7 +1348,6 @@ void
|
||||
spdk_for_each_reactor(spdk_event_fn fn, void *arg1, void *arg2, spdk_event_fn cpl)
|
||||
{
|
||||
struct call_reactor *cr;
|
||||
struct spdk_event *evt;
|
||||
|
||||
/* When the application framework is shutting down, we will send one
|
||||
* final for_each_reactor operation with completion callback _reactors_stop,
|
||||
@ -1383,10 +1380,7 @@ spdk_for_each_reactor(spdk_event_fn fn, void *arg1, void *arg2, spdk_event_fn cp
|
||||
|
||||
SPDK_DEBUGLOG(reactor, "Starting reactor iteration from %d\n", cr->orig_core);
|
||||
|
||||
evt = spdk_event_allocate(cr->cur_core, on_reactor, cr, NULL);
|
||||
assert(evt != NULL);
|
||||
|
||||
spdk_event_call(evt);
|
||||
_event_call(cr->cur_core, on_reactor, cr, NULL);
|
||||
}
|
||||
|
||||
#ifdef __linux__
|
||||
|
Loading…
Reference in New Issue
Block a user