Commit 2d0aa1ad authored by Ben Walker's avatar Ben Walker
Browse files

event: Always process events on each reactor loop



Events are the mechanism by which threads are scheduled,
so events need to be processed even if there are no
threads.

Change-Id: I2e908e6a948709f2122b1c7385b6fd771827b9aa
Signed-off-by: default avatarBen Walker <benjamin.walker@intel.com>
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/447111


Tested-by: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarShuhei Matsumoto <shuhei.matsumoto.xt@hitachi.com>
Reviewed-by: default avatarDarek Stojaczyk <dariusz.stojaczyk@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
parent deb8ee5c
Loading
Loading
Loading
Loading
+15 −3
Original line number Diff line number Diff line
@@ -134,10 +134,12 @@ spdk_event_call(struct spdk_event *event)
}

static inline uint32_t
_spdk_event_queue_run_batch(struct spdk_reactor *reactor, struct spdk_thread *thread)
_spdk_event_queue_run_batch(struct spdk_reactor *reactor)
{
	unsigned count, i;
	void *events[SPDK_EVENT_BATCH_SIZE];
	struct spdk_thread *thread;
	struct spdk_lw_thread *lw_thread;

#ifdef DEBUG
	/*
@@ -153,6 +155,16 @@ _spdk_event_queue_run_batch(struct spdk_reactor *reactor, struct spdk_thread *th
		return 0;
	}

	/* Execute the events. There are still some remaining events
	 * that must occur on an SPDK thread. To accomodate those, try to
	 * run them on the first thread in the list, if it exists. */
	lw_thread = TAILQ_FIRST(&reactor->threads);
	if (lw_thread) {
		thread = spdk_thread_get_from_ctx(lw_thread);
	} else {
		thread = NULL;
	}

	spdk_set_thread(thread);

	for (i = 0; i < count; i++) {
@@ -239,11 +251,11 @@ _spdk_reactor_run(void *arg)
		 * is used for all threads. */
		now = spdk_get_ticks();

		_spdk_event_queue_run_batch(reactor);

		TAILQ_FOREACH_SAFE(lw_thread, &reactor->threads, link, tmp) {
			thread = spdk_thread_get_from_ctx(lw_thread);

			_spdk_event_queue_run_batch(reactor, thread);

			spdk_thread_poll(thread, 0, now);
		}