Commit 9f0b07a9 authored by Vladislav Fedyaev's avatar Vladislav Fedyaev Committed by Tomasz Zawadzki
Browse files

lib/thread: Fix period_poller_set_interrupt_mode() to correctly handle startup



There is a case, when creating an interrupt-mode poller on startup,
might evaluate to next_run_tick == now_tick, resulting in poller
never firing.

Change-Id: I7a71d10622b7f2c74f819e9b618db73f62205964
Signed-off-by: default avatarVladislav Fedyaev <a37206@gmail.com>
Reviewed-on: https://review.spdk.io/c/spdk/spdk/+/26608


Community-CI: Mellanox Build Bot
Reviewed-by: default avatarAleksey Marchuk <alexeymar@nvidia.com>
Tested-by: default avatarSPDK Automated Test System <spdkbot@gmail.com>
Reviewed-by: default avatarKonrad Sztyber <ksztyber@nvidia.com>
parent 55b94957
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -1546,7 +1546,8 @@ period_poller_set_interrupt_mode(struct spdk_poller *poller, void *cb_arg, bool
		if (poller->next_run_tick == 0) {
			poller->next_run_tick = now_tick + poller->period_ticks;
		} else if (poller->next_run_tick < now_tick) {
			poller->next_run_tick = now_tick;
			/* Set next_run_tick to now + 1us to make sure new_tv.it_value is never zeroed */
			poller->next_run_tick = now_tick + ticks / SPDK_SEC_TO_USEC;
		}

		new_tv.it_value.tv_sec = (poller->next_run_tick - now_tick) / ticks;