eal/windows: fix default thread priority
authorTal Shnaiderman <talshn@nvidia.com>
Thu, 18 Feb 2021 11:40:58 +0000 (13:40 +0200)
committerThomas Monjalon <thomas@monjalon.net>
Tue, 16 Mar 2021 11:40:35 +0000 (12:40 +0100)
The hard-coded thread priority for Windows threads in EAL
is REALTIME_PRIORITY_CLASS/THREAD_PRIORITY_TIME_CRITICAL.

This results in issues with DPDK threads causing OS thread starvation
and eventually a bugcheck.

The fix reduce the thread priority to
NORMAL_PRIORITY_CLASS/THREAD_PRIORITY_NORMAL.

Bugzilla ID: 600
Fixes: 53ffd9f080f ("eal/windows: add minimum viable code")
Cc: stable@dpdk.org
Reported-by: Odi Assli <odia@nvidia.com>
Signed-off-by: Tal Shnaiderman <talshn@nvidia.com>
Acked-by: Dmitry Kozlyuk <dmitry.kozliuk@gmail.com>
lib/librte_eal/windows/eal_thread.c
lib/librte_eal/windows/include/pthread.h

index 908e726..9c3f6d6 100644 (file)
@@ -134,8 +134,8 @@ eal_thread_create(pthread_t *thread)
        if (!th)
                return -1;
 
-       SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);
-       SetThreadPriority(th, THREAD_PRIORITY_TIME_CRITICAL);
+       SetPriorityClass(GetCurrentProcess(), NORMAL_PRIORITY_CLASS);
+       SetThreadPriority(th, THREAD_PRIORITY_NORMAL);
 
        return 0;
 }
index fb11a07..9aeab1f 100644 (file)
@@ -137,8 +137,8 @@ pthread_create(void *threadid, const void *threadattr, void *threadfunc,
        hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)threadfunc,
                args, 0, (LPDWORD)threadid);
        if (hThread) {
-               SetPriorityClass(GetCurrentProcess(), REALTIME_PRIORITY_CLASS);
-               SetThreadPriority(hThread, THREAD_PRIORITY_TIME_CRITICAL);
+               SetPriorityClass(GetCurrentProcess(), NORMAL_PRIORITY_CLASS);
+               SetThreadPriority(hThread, THREAD_PRIORITY_NORMAL);
        }
        return ((hThread != NULL) ? 0 : E_FAIL);
 }