Files
AnyPS5/core/libs/tests/GuestSchedPriority.cpp
T
hugodearaujoandClaude Opus 5.5 3ba4751f98 fix(libkernel): report the console's scheduling priority range
On a PS5 (firmware 13.60) sched_get_priority_max returns 767 and
sched_get_priority_min 256 for SCHED_FIFO and SCHED_RR; the two were
swapped. Every other policy, SCHED_OTHER included, returns -1 with
EINVAL instead of a range or a host exception.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-11 19:47:18 -03:00

24 lines
926 B
C++

#include "prx/libc/include/general/VabiMacros.hpp"
#include <cstdlib>
#include <stdexcept>
extern "C" int* APS5_VABI __error_nid_postfix();
extern "C" {
int APS5_VABI sched_get_priority_max_nid_postfix(int policy);
int APS5_VABI sched_get_priority_min_nid_postfix(int policy);
}
static void Require(bool value) { if (!value) std::abort(); }
static bool Rejects(int policy) {
*__error_nid_postfix() = 0;
const bool max = sched_get_priority_max_nid_postfix(policy) == -1 && *__error_nid_postfix() == 22;
*__error_nid_postfix() = 0;
return max && sched_get_priority_min_nid_postfix(policy) == -1 && *__error_nid_postfix() == 22;
}
int main() {
Require(Rejects(-1) && Rejects(2) && Rejects(5));
for (int policy : {1, 3}) {
Require(sched_get_priority_max_nid_postfix(policy) == 767);
Require(sched_get_priority_min_nid_postfix(policy) == 256);
}
Require(Rejects(0) && Rejects(4));
}