Skip to content

Commit 61713b4

Browse files
authored
Merge pull request llvm#98 from pcc/filc6
Implement get_mempolicy and set_mempolicy
2 parents b8b947a + 5d5b24e commit 61713b4

File tree

4 files changed

+50
-0
lines changed

4 files changed

+50
-0
lines changed

filc/include/pizlonated_syscalls.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -401,6 +401,10 @@ long zsys_keyctl_pkey_sign(int key_id, const char* info, const void* data, __SIZ
401401
void* sig, __SIZE_TYPE__ sig_len);
402402
long zsys_keyctl_pkey_verify(int key_id, const char* info, const void* data, __SIZE_TYPE__ data_len,
403403
const void* sig, __SIZE_TYPE__ sig_len);
404+
long zsys_get_mempolicy(int *mode, unsigned long *nodemask,
405+
unsigned long maxnode, void *addr, unsigned long flags);
406+
long zsys_set_mempolicy(int mode, const unsigned long *nodemask,
407+
unsigned long maxnode);
404408

405409
#ifdef __cplusplus
406410
}

filc/src/runtime.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -511,6 +511,14 @@ long zsys_syscall(long n, ...)
511511
callee = zsys_getdents;
512512
break;
513513

514+
case 238 /* SYS_set_mempolicy */:
515+
callee = zsys_set_mempolicy;
516+
break;
517+
518+
case 239 /* SYS_get_mempolicy */:
519+
callee = zsys_get_mempolicy;
520+
break;
521+
514522
case 444 /* SYS_landlock_create_ruleset */:
515523
callee = zsys_landlock_create_ruleset;
516524
break;

libpas/src/libpas/filc_runtime.c

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10522,6 +10522,42 @@ int filc_native_zsys_sched_getaffinity(filc_thread* my_thread, int tid, size_t s
1052210522
return FILC_SYSCALL(my_thread, sched_getaffinity(tid, size, (cpu_set_t*)filc_ptr_ptr(set_ptr)));
1052310523
}
1052410524

10525+
long filc_native_zsys_get_mempolicy(filc_thread* my_thread, filc_ptr mode, filc_ptr nodemask,
10526+
unsigned long maxnode, filc_ptr addr, unsigned long flags)
10527+
{
10528+
if (filc_ptr_ptr(mode))
10529+
filc_check_write(mode, sizeof(int));
10530+
if (filc_ptr_ptr(nodemask)) {
10531+
filc_check_write(
10532+
nodemask,
10533+
filc_mul_size(sizeof(unsigned long),
10534+
filc_add_size(maxnode, 8 * sizeof(unsigned long) - 1) /
10535+
(8 * sizeof(unsigned long))));
10536+
}
10537+
if (filc_ptr_ptr(addr))
10538+
filc_check_read(addr, 1);
10539+
return FILC_SYSCALL(my_thread,
10540+
syscall(SYS_get_mempolicy, (int *)filc_ptr_ptr(mode),
10541+
(unsigned long *)filc_ptr_ptr(nodemask),
10542+
maxnode, filc_ptr_ptr(addr), flags));
10543+
}
10544+
10545+
long filc_native_zsys_set_mempolicy(filc_thread* my_thread, int mode, filc_ptr nodemask,
10546+
unsigned long maxnode)
10547+
{
10548+
if (filc_ptr_ptr(nodemask)) {
10549+
filc_check_read(
10550+
nodemask,
10551+
filc_mul_size(sizeof(unsigned long),
10552+
filc_add_size(maxnode, 8 * sizeof(unsigned long) - 1) /
10553+
(8 * sizeof(unsigned long))));
10554+
}
10555+
return FILC_SYSCALL(my_thread,
10556+
syscall(SYS_set_mempolicy, mode,
10557+
(const unsigned long *)filc_ptr_ptr(nodemask),
10558+
maxnode));
10559+
}
10560+
1052510561
int filc_native_zsys_posix_fadvise(filc_thread* my_thread, int fd, long base, long len, int advice)
1052610562
{
1052710563
check_fd(fd);

libpas/src/libpas/generate_pizlonated_forwarders.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -519,6 +519,8 @@ def addOutSig(name, rets, *args)
519519
addSig "long", "zsys_keyctl_pkey_sign", "int", "filc_ptr", "filc_ptr", "size_t", "filc_ptr", "size_t"
520520
addSig "long", "zsys_keyctl_pkey_verify", "int", "filc_ptr", "filc_ptr", "size_t", "filc_ptr",
521521
"size_t"
522+
addSig "long", "zsys_get_mempolicy", "filc_ptr", "filc_ptr", "unsigned long", "filc_ptr", "unsigned long"
523+
addSig "long", "zsys_set_mempolicy", "int", "filc_ptr", "unsigned long"
522524

523525
addSig "filc_ptr", "zthread_self"
524526
addSig "unsigned", "zthread_get_id", "filc_ptr"

0 commit comments

Comments
 (0)