diff mbox

run pollers in cpu_process_local_jobs() if running job synchonously

Message ID 1479861509-21746-1-git-send-email-stewart@linux.vnet.ibm.com
State Accepted
Headers show

Commit Message

Stewart Smith Nov. 23, 2016, 12:38 a.m. UTC
In the event we only have 1 CPU thread, we run asynchronous jobs
synchronously, and while we wait for them to finish, we run pollers.

However, if the jobs themselves don't call pollers (e.g. by time_wait())
then we'll end up in long periods of not running pollers at all.

To work around this, explicitly run pollers when we're the only
CPU thread (i.e. when we run the job synchronously).

Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>
---
 core/cpu.c | 1 +
 1 file changed, 1 insertion(+)

Comments

Stewart Smith Nov. 24, 2016, 6:10 a.m. UTC | #1
Stewart Smith <stewart@linux.vnet.ibm.com> writes:
> In the event we only have 1 CPU thread, we run asynchronous jobs
> synchronously, and while we wait for them to finish, we run pollers.
>
> However, if the jobs themselves don't call pollers (e.g. by time_wait())
> then we'll end up in long periods of not running pollers at all.
>
> To work around this, explicitly run pollers when we're the only
> CPU thread (i.e. when we run the job synchronously).
>
> Signed-off-by: Stewart Smith <stewart@linux.vnet.ibm.com>

Merged to master as of ecac29429861a912bd061df799dbc54493966f98
diff mbox

Patch

diff --git a/core/cpu.c b/core/cpu.c
index 62140eb..f83d910 100644
--- a/core/cpu.c
+++ b/core/cpu.c
@@ -403,6 +403,7 @@  void cpu_process_local_jobs(void)
 	if (cpu == this_cpu()) {
 		prlog_once(PR_DEBUG, "Processing jobs synchronously\n");
 		cpu_process_jobs();
+		opal_run_pollers();
 	}
 }