prctl: Add support for PR_SET_THP_DISABLE and PR_GET_THP_DISABLE
Change-Id: I04c5568a9eb78bcac632b734f34bba49cf602c4d Refs: #1181
This commit is contained in:
committed by
Masamichi Takagi
parent
eb184419ea
commit
dfd23c3ebe
@ -2,6 +2,9 @@
|
||||
#ifndef __HEADER_ARM64_COMMON_PRCTL_H
|
||||
#define __HEADER_ARM64_COMMON_PRCTL_H
|
||||
|
||||
#define PR_SET_THP_DISABLE 41
|
||||
#define PR_GET_THP_DISABLE 42
|
||||
|
||||
/* arm64 Scalable Vector Extension controls */
|
||||
#define PR_SVE_SET_VL 48 /* set task vector length */
|
||||
#define PR_SVE_SET_VL_THREAD (1 << 1) /* set just this thread */
|
||||
|
||||
@ -161,7 +161,12 @@ fault:
|
||||
|
||||
SYSCALL_DECLARE(prctl)
|
||||
{
|
||||
struct process *proc = cpu_local_var(current)->proc;
|
||||
int option = (int)ihk_mc_syscall_arg0(ctx);
|
||||
unsigned long arg2 = (unsigned long)ihk_mc_syscall_arg1(ctx);
|
||||
unsigned long arg3 = (unsigned long)ihk_mc_syscall_arg2(ctx);
|
||||
unsigned long arg4 = (unsigned long)ihk_mc_syscall_arg3(ctx);
|
||||
unsigned long arg5 = (unsigned long)ihk_mc_syscall_arg4(ctx);
|
||||
long error;
|
||||
|
||||
switch (option) {
|
||||
@ -172,6 +177,19 @@ SYSCALL_DECLARE(prctl)
|
||||
case PR_SVE_GET_VL:
|
||||
error = SVE_GET_VL(cpu_local_var(current));
|
||||
break;
|
||||
case PR_SET_THP_DISABLE:
|
||||
if (arg3 || arg4 || arg5) {
|
||||
return -EINVAL;
|
||||
}
|
||||
proc->thp_disable = arg2;
|
||||
error = 0;
|
||||
break;
|
||||
case PR_GET_THP_DISABLE:
|
||||
if (arg2 || arg3 || arg4 || arg5) {
|
||||
return -EINVAL;
|
||||
}
|
||||
error = proc->thp_disable;
|
||||
break;
|
||||
default:
|
||||
error = syscall_generic_forwarding(__NR_prctl, ctx);
|
||||
break;
|
||||
|
||||
@ -9,6 +9,9 @@
|
||||
#ifndef __ARCH_PRCTL_H
|
||||
#define __ARCH_PRCTL_H
|
||||
|
||||
#define PR_SET_THP_DISABLE 41
|
||||
#define PR_GET_THP_DISABLE 42
|
||||
|
||||
#define ARCH_SET_GS 0x1001
|
||||
#define ARCH_SET_FS 0x1002
|
||||
#define ARCH_GET_FS 0x1003
|
||||
|
||||
@ -109,6 +109,7 @@ SYSCALL_HANDLED(149, mlock)
|
||||
SYSCALL_HANDLED(150, munlock)
|
||||
SYSCALL_HANDLED(151, mlockall)
|
||||
SYSCALL_HANDLED(152, munlockall)
|
||||
SYSCALL_HANDLED(157, prctl)
|
||||
SYSCALL_HANDLED(158, arch_prctl)
|
||||
SYSCALL_HANDLED(160, setrlimit)
|
||||
SYSCALL_HANDLED(164, settimeofday)
|
||||
|
||||
@ -169,6 +169,38 @@ fault:
|
||||
return -EFAULT;
|
||||
}
|
||||
|
||||
SYSCALL_DECLARE(prctl)
|
||||
{
|
||||
struct process *proc = cpu_local_var(current)->proc;
|
||||
int option = (int)ihk_mc_syscall_arg0(ctx);
|
||||
unsigned long arg2 = (unsigned long)ihk_mc_syscall_arg1(ctx);
|
||||
unsigned long arg3 = (unsigned long)ihk_mc_syscall_arg2(ctx);
|
||||
unsigned long arg4 = (unsigned long)ihk_mc_syscall_arg3(ctx);
|
||||
unsigned long arg5 = (unsigned long)ihk_mc_syscall_arg4(ctx);
|
||||
int ret = 0;
|
||||
|
||||
switch (option) {
|
||||
case PR_SET_THP_DISABLE:
|
||||
if (arg3 || arg4 || arg5) {
|
||||
return -EINVAL;
|
||||
}
|
||||
proc->thp_disable = arg2;
|
||||
ret = 0;
|
||||
break;
|
||||
case PR_GET_THP_DISABLE:
|
||||
if (arg2 || arg3 || arg4 || arg5) {
|
||||
return -EINVAL;
|
||||
}
|
||||
ret = proc->thp_disable;
|
||||
break;
|
||||
default:
|
||||
ret = syscall_generic_forwarding(__NR_prctl, ctx);
|
||||
break;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
struct sigsp {
|
||||
unsigned long flags;
|
||||
void *link;
|
||||
|
||||
Reference in New Issue
Block a user