3DS: Schedule threads on the default core
authorJustin Weiss <justin@justinweiss.com>
Thu, 3 Oct 2019 00:49:12 +0000 (17:49 -0700)
committerJustin Weiss <justin@justinweiss.com>
Thu, 3 Oct 2019 00:54:06 +0000 (17:54 -0700)
When creating a thread, pcsx was scheduling threads on core 1, which
is the system core. This is usually prevented by the system. Instead,
it should schedule threads on the default core, as suggested by
3dbrew: https://www.3dbrew.org/wiki/Multi-threading

> Games usually create threads using -2.

In the future, we may be able to schedule threads on core 2 on New 3DS
only, if we find it gives better performance.

This was preventing the CDDA thread from starting, which was
preventing CD Audio from playing.

frontend/3ds/pthread.h

index 2c2bf6b..42de161 100644 (file)
@@ -25,7 +25,7 @@ static inline int pthread_create(pthread_t *thread,
 
    svcCreateThread(&thread->handle, start_routine, arg,
                    (uint32_t*)((uint32_t)thread->stack + CTR_PTHREAD_STACK_SIZE),
-                   0x25, 1);
+                   0x25, -2);
 
    return 1;
 }