mirror of
https://github.com/KytyPS5/KytyPS5.git
synced 2026-10-27 05:16:56 +01:00
Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 3f21e2ee0f |
+40
-41
@@ -365,6 +365,7 @@ struct PthreadAttrPrivate {
|
|||||||
uint64_t stack_map_addr;
|
uint64_t stack_map_addr;
|
||||||
size_t stack_map_size;
|
size_t stack_map_size;
|
||||||
int policy;
|
int policy;
|
||||||
|
int guest_priority;
|
||||||
int inherit_sched;
|
int inherit_sched;
|
||||||
int solosched;
|
int solosched;
|
||||||
bool detached;
|
bool detached;
|
||||||
@@ -2128,13 +2129,8 @@ int KYTY_SYSV_ABI PthreadAttrGetschedparam(const PthreadAttr* attr, KernelSchedP
|
|||||||
|
|
||||||
int result = pthread_attr_getschedparam(&(*attr)->p, param);
|
int result = pthread_attr_getschedparam(&(*attr)->p, param);
|
||||||
|
|
||||||
if (param->sched_priority <= -2) {
|
// Host priority mapping is lossy; return the exact guest value.
|
||||||
param->sched_priority = 767;
|
param->sched_priority = (*attr)->guest_priority;
|
||||||
} else if (param->sched_priority >= +2) {
|
|
||||||
param->sched_priority = 256;
|
|
||||||
} else {
|
|
||||||
param->sched_priority = 700;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (result == 0) {
|
if (result == 0) {
|
||||||
return OK;
|
return OK;
|
||||||
@@ -2309,10 +2305,17 @@ int KYTY_SYSV_ABI PthreadAttrSetschedparam(PthreadAttr* attr, const KernelSchedP
|
|||||||
|
|
||||||
int result = pthread_attr_setschedparam(&attr_value->p, &pparam);
|
int result = pthread_attr_setschedparam(&attr_value->p, &pparam);
|
||||||
|
|
||||||
|
#if KYTY_PLATFORM == KYTY_PLATFORM_WINDOWS
|
||||||
if (result == 0) {
|
if (result == 0) {
|
||||||
|
attr_value->guest_priority = param->sched_priority;
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
return KERNEL_ERROR_EINVAL;
|
return KERNEL_ERROR_EINVAL;
|
||||||
|
#else
|
||||||
|
attr_value->guest_priority = param->sched_priority;
|
||||||
|
(void)result;
|
||||||
|
return OK;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
int KYTY_SYSV_ABI PthreadAttrSetschedpolicy(PthreadAttr* attr, int policy) {
|
int KYTY_SYSV_ABI PthreadAttrSetschedpolicy(PthreadAttr* attr, int policy) {
|
||||||
@@ -3639,26 +3642,15 @@ int KYTY_SYSV_ABI PthreadGetprio(Pthread thread, int* prio) {
|
|||||||
|
|
||||||
EXIT_NOT_IMPLEMENTED(prio == nullptr);
|
EXIT_NOT_IMPLEMENTED(prio == nullptr);
|
||||||
|
|
||||||
sched_param param {};
|
sched_param native_param {};
|
||||||
int pol = 0;
|
int native_policy = 0;
|
||||||
|
if (pthread_getschedparam(thread->p, &native_policy, &native_param) != 0) {
|
||||||
int result = pthread_getschedparam(thread->p, &pol, ¶m);
|
return KERNEL_ERROR_EINVAL;
|
||||||
|
|
||||||
if (result == 0) {
|
|
||||||
if (param.sched_priority <= -2) {
|
|
||||||
*prio = 767;
|
|
||||||
} else if (param.sched_priority >= +2) {
|
|
||||||
*prio = 256;
|
|
||||||
} else {
|
|
||||||
*prio = 700;
|
|
||||||
}
|
|
||||||
|
|
||||||
LOGF("\t PthreadGetprio: %d, %d\n", thread->unique_id, *prio);
|
|
||||||
|
|
||||||
return OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return KERNEL_ERROR_EINVAL;
|
*prio = thread->attr->guest_priority;
|
||||||
|
LOGF("\t PthreadGetprio: %d, %d\n", thread->unique_id, *prio);
|
||||||
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
int KYTY_SYSV_ABI PthreadSetprio(Pthread thread, int prio) {
|
int KYTY_SYSV_ABI PthreadSetprio(Pthread thread, int prio) {
|
||||||
@@ -3673,25 +3665,32 @@ int KYTY_SYSV_ABI PthreadSetprio(Pthread thread, int prio) {
|
|||||||
|
|
||||||
int result = pthread_getschedparam(thread->p, &pol, ¶m);
|
int result = pthread_getschedparam(thread->p, &pol, ¶m);
|
||||||
|
|
||||||
if (result == 0) {
|
if (result != 0) {
|
||||||
if (prio <= 478) {
|
return KERNEL_ERROR_EINVAL;
|
||||||
param.sched_priority = +2;
|
|
||||||
} else if (prio >= 733) {
|
|
||||||
param.sched_priority = -2;
|
|
||||||
} else {
|
|
||||||
param.sched_priority = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
result = pthread_setschedparam(thread->p, pol, ¶m);
|
|
||||||
|
|
||||||
if (result == 0) {
|
|
||||||
LOGF("\t PthreadSetprio: %d, %d\n", thread->unique_id, prio);
|
|
||||||
|
|
||||||
return OK;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (prio <= 478) {
|
||||||
|
param.sched_priority = +2;
|
||||||
|
} else if (prio >= 733) {
|
||||||
|
param.sched_priority = -2;
|
||||||
|
} else {
|
||||||
|
param.sched_priority = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
result = pthread_setschedparam(thread->p, pol, ¶m);
|
||||||
|
|
||||||
|
if (result == 0) {
|
||||||
|
thread->attr->guest_priority = prio;
|
||||||
|
LOGF("\t PthreadSetprio: %d, %d\n", thread->unique_id, prio);
|
||||||
|
return OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if KYTY_PLATFORM == KYTY_PLATFORM_WINDOWS
|
||||||
return KERNEL_ERROR_EINVAL;
|
return KERNEL_ERROR_EINVAL;
|
||||||
|
#else
|
||||||
|
thread->attr->guest_priority = prio;
|
||||||
|
return OK;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void KYTY_SYSV_ABI PthreadTestcancel() {
|
void KYTY_SYSV_ABI PthreadTestcancel() {
|
||||||
|
|||||||
Reference in New Issue
Block a user