thread: Change if-else_if to switch-case blocks of spdk_poller_pause/resume()

It will be sufficiently reasonable to check if the caller thread is valid
even if spdk_poller_pause() or spdk_poller_resume() does nothing.
Besides, let's write all possibles states explicitly in switch - cases.

This refactoring clarifies the logic and makes the following patches easier.

Signed-off-by: Shuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Change-Id: I1163eff388fe741d6b6924f474a82b1aa7d18acb
Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/7665
Community-CI: Mellanox Build Bot
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Jim Harris <james.r.harris@intel.com>
Reviewed-by: Konrad Sztyber <konrad.sztyber@intel.com>
Reviewed-by: Aleksey Marchuk <alexeymar@mellanox.com>
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
This commit is contained in:
Shuhei Matsumoto 2021-04-27 07:51:52 +09:00 committed by Tomasz Zawadzki
parent 3f45ed2467
commit 42ad32da60

View File

@ -1391,11 +1391,6 @@ spdk_poller_pause(struct spdk_poller *poller)
{ {
struct spdk_thread *thread; struct spdk_thread *thread;
if (poller->state == SPDK_POLLER_STATE_PAUSED ||
poller->state == SPDK_POLLER_STATE_PAUSING) {
return;
}
thread = spdk_get_thread(); thread = spdk_get_thread();
if (!thread) { if (!thread) {
assert(false); assert(false);
@ -1414,9 +1409,11 @@ spdk_poller_pause(struct spdk_poller *poller)
* allows a poller to be paused from another one's context without * allows a poller to be paused from another one's context without
* breaking the TAILQ_FOREACH_REVERSE_SAFE iteration. * breaking the TAILQ_FOREACH_REVERSE_SAFE iteration.
*/ */
if (poller->state != SPDK_POLLER_STATE_RUNNING) { switch (poller->state) {
poller->state = SPDK_POLLER_STATE_PAUSING; case SPDK_POLLER_STATE_PAUSED:
} else { case SPDK_POLLER_STATE_PAUSING:
break;
case SPDK_POLLER_STATE_RUNNING:
if (poller->period_ticks > 0) { if (poller->period_ticks > 0) {
TAILQ_REMOVE(&thread->timed_pollers, poller, tailq); TAILQ_REMOVE(&thread->timed_pollers, poller, tailq);
} else { } else {
@ -1425,6 +1422,13 @@ spdk_poller_pause(struct spdk_poller *poller)
TAILQ_INSERT_TAIL(&thread->paused_pollers, poller, tailq); TAILQ_INSERT_TAIL(&thread->paused_pollers, poller, tailq);
poller->state = SPDK_POLLER_STATE_PAUSED; poller->state = SPDK_POLLER_STATE_PAUSED;
break;
case SPDK_POLLER_STATE_WAITING:
poller->state = SPDK_POLLER_STATE_PAUSING;
break;
default:
assert(false);
break;
} }
} }
@ -1433,11 +1437,6 @@ spdk_poller_resume(struct spdk_poller *poller)
{ {
struct spdk_thread *thread; struct spdk_thread *thread;
if (poller->state != SPDK_POLLER_STATE_PAUSED &&
poller->state != SPDK_POLLER_STATE_PAUSING) {
return;
}
thread = spdk_get_thread(); thread = spdk_get_thread();
if (!thread) { if (!thread) {
assert(false); assert(false);
@ -1456,12 +1455,21 @@ spdk_poller_resume(struct spdk_poller *poller)
* we just need to flip its state back to waiting, as it's already on * we just need to flip its state back to waiting, as it's already on
* the appropriate list. * the appropriate list.
*/ */
if (poller->state == SPDK_POLLER_STATE_PAUSED) { switch (poller->state) {
case SPDK_POLLER_STATE_PAUSED:
TAILQ_REMOVE(&thread->paused_pollers, poller, tailq); TAILQ_REMOVE(&thread->paused_pollers, poller, tailq);
thread_insert_poller(thread, poller); thread_insert_poller(thread, poller);
/* fallthrough */
case SPDK_POLLER_STATE_PAUSING:
poller->state = SPDK_POLLER_STATE_WAITING;
break;
case SPDK_POLLER_STATE_RUNNING:
case SPDK_POLLER_STATE_WAITING:
break;
default:
assert(false);
break;
} }
poller->state = SPDK_POLLER_STATE_WAITING;
} }
const char * const char *