8237758: ZGC: Move get_mempolicy() syscall wrapper to ZSyscall

Reviewed-by: eosterlund
This commit is contained in:
Per Lidén 2020-01-30 12:41:47 +01:00
parent 91d58b8f96
commit 24691f248c
4 changed files with 22 additions and 23 deletions

@ -1,5 +1,5 @@
/*
* Copyright (c) 2016, 2019, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -21,28 +21,14 @@
* questions.
*/
#include "gc/z/zErrno.hpp"
#include "gc/z/zCPU.inline.hpp"
#include "gc/z/zErrno.hpp"
#include "gc/z/zNUMA.hpp"
#include "gc/z/zSyscall_linux.hpp"
#include "runtime/globals.hpp"
#include "runtime/os.hpp"
#include "utilities/debug.hpp"
#include <unistd.h>
#include <sys/syscall.h>
#ifndef MPOL_F_NODE
#define MPOL_F_NODE (1<<0) // Return next IL mode instead of node mask
#endif
#ifndef MPOL_F_ADDR
#define MPOL_F_ADDR (1<<1) // Look up VMA using address
#endif
static int z_get_mempolicy(uint32_t* mode, const unsigned long *nmask, unsigned long maxnode, uintptr_t addr, int flags) {
return syscall(SYS_get_mempolicy, mode, nmask, maxnode, addr, flags);
}
void ZNUMA::initialize_platform() {
_enabled = UseNUMA;
}
@ -73,7 +59,7 @@ uint32_t ZNUMA::memory_id(uintptr_t addr) {
uint32_t id = (uint32_t)-1;
if (z_get_mempolicy(&id, NULL, 0, addr, MPOL_F_NODE | MPOL_F_ADDR) == -1) {
if (ZSyscall::get_mempolicy((int*)&id, NULL, 0, (void*)addr, MPOL_F_NODE | MPOL_F_ADDR) == -1) {
ZErrno err;
fatal("Failed to get NUMA id for memory at " PTR_FORMAT " (%s)", addr, err.to_string());
}

@ -1,5 +1,5 @@
/*
* Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2019, 2020, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -34,3 +34,7 @@ int ZSyscall::memfd_create(const char *name, unsigned int flags) {
int ZSyscall::fallocate(int fd, int mode, size_t offset, size_t length) {
return syscall(SYS_fallocate, fd, mode, offset, length);
}
long ZSyscall::get_mempolicy(int* mode, unsigned long* nodemask, unsigned long maxnode, void* addr, unsigned long flags) {
return syscall(SYS_get_mempolicy, mode, nodemask, maxnode, addr, flags);
}

@ -1,5 +1,5 @@
/*
* Copyright (c) 2019, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2019, 2020, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -26,10 +26,19 @@
#include "memory/allocation.hpp"
// Flags for get_mempolicy()
#ifndef MPOL_F_NODE
#define MPOL_F_NODE (1<<0)
#endif
#ifndef MPOL_F_ADDR
#define MPOL_F_ADDR (1<<1)
#endif
class ZSyscall : public AllStatic {
public:
static int memfd_create(const char *name, unsigned int flags);
static int memfd_create(const char* name, unsigned int flags);
static int fallocate(int fd, int mode, size_t offset, size_t length);
static long get_mempolicy(int* mode, unsigned long* nodemask, unsigned long maxnode, void* addr, unsigned long flags);
};
#endif // OS_LINUX_GC_Z_ZSYSCALL_LINUX_HPP

@ -1,5 +1,5 @@
/*
* Copyright (c) 2015, 2019, Oracle and/or its affiliates. All rights reserved.
* Copyright (c) 2015, 2020, Oracle and/or its affiliates. All rights reserved.
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* This code is free software; you can redistribute it and/or modify it
@ -136,7 +136,7 @@ inline const ZVirtualMemory& ZPage::virtual_memory() const {
inline uint8_t ZPage::numa_id() {
if (_numa_id == (uint8_t)-1) {
_numa_id = (uint8_t)ZNUMA::memory_id(ZAddress::good(start()));
_numa_id = ZNUMA::memory_id(ZAddress::good(start()));
}
return _numa_id;