Updated rh1448880 patch, enabled commented out system nss
This commit is contained in:
parent
562d2b38dd
commit
93b65a6825
282
8175813-pr3394-rh1448880.patch
Normal file
282
8175813-pr3394-rh1448880.patch
Normal file
@ -0,0 +1,282 @@
|
|||||||
|
# HG changeset patch
|
||||||
|
# User gromero
|
||||||
|
# Date 1495057954 14400
|
||||||
|
# Wed May 17 17:52:34 2017 -0400
|
||||||
|
# Node ID 74c81011375b5f432df155dcd7b3c9a668b45740
|
||||||
|
# Parent 4d9931ebf8617b1b06adbc1beee6ed1b58661a8b
|
||||||
|
8175813: PPC64: "mbind: Invalid argument" when -XX:+UseNUMA is used
|
||||||
|
|
||||||
|
diff --git a/src/os/linux/vm/os_linux.cpp b/src/os/linux/vm/os_linux.cpp
|
||||||
|
--- openjdk/hotspot/src/os/linux/vm/os_linux.cpp
|
||||||
|
+++ openjdk/hotspot/src/os/linux/vm/os_linux.cpp
|
||||||
|
@@ -2736,8 +2736,9 @@
|
||||||
|
bool os::numa_topology_changed() { return false; }
|
||||||
|
|
||||||
|
size_t os::numa_get_groups_num() {
|
||||||
|
- int max_node = Linux::numa_max_node();
|
||||||
|
- return max_node > 0 ? max_node + 1 : 1;
|
||||||
|
+ // Return just the number of nodes in which it's possible to allocate memory
|
||||||
|
+ // (in numa terminology, configured nodes).
|
||||||
|
+ return Linux::numa_num_configured_nodes();
|
||||||
|
}
|
||||||
|
|
||||||
|
int os::numa_get_group_id() {
|
||||||
|
@@ -2751,11 +2752,33 @@
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
+int os::Linux::get_existing_num_nodes() {
|
||||||
|
+ size_t node;
|
||||||
|
+ size_t highest_node_number = Linux::numa_max_node();
|
||||||
|
+ int num_nodes = 0;
|
||||||
|
+
|
||||||
|
+ // Get the total number of nodes in the system including nodes without memory.
|
||||||
|
+ for (node = 0; node <= highest_node_number; node++) {
|
||||||
|
+ if (isnode_in_existing_nodes(node)) {
|
||||||
|
+ num_nodes++;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ return num_nodes;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
size_t os::numa_get_leaf_groups(int *ids, size_t size) {
|
||||||
|
- for (size_t i = 0; i < size; i++) {
|
||||||
|
- ids[i] = i;
|
||||||
|
- }
|
||||||
|
- return size;
|
||||||
|
+ size_t highest_node_number = Linux::numa_max_node();
|
||||||
|
+ size_t i = 0;
|
||||||
|
+
|
||||||
|
+ // Map all node ids in which is possible to allocate memory. Also nodes are
|
||||||
|
+ // not always consecutively available, i.e. available from 0 to the highest
|
||||||
|
+ // node number.
|
||||||
|
+ for (size_t node = 0; node <= highest_node_number; node++) {
|
||||||
|
+ if (Linux::isnode_in_configured_nodes(node)) {
|
||||||
|
+ ids[i++] = node;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ return i;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool os::get_page_info(char *start, page_info* info) {
|
||||||
|
@@ -2825,18 +2848,28 @@
|
||||||
|
libnuma_dlsym(handle, "numa_node_to_cpus")));
|
||||||
|
set_numa_max_node(CAST_TO_FN_PTR(numa_max_node_func_t,
|
||||||
|
libnuma_dlsym(handle, "numa_max_node")));
|
||||||
|
+ set_numa_num_configured_nodes(CAST_TO_FN_PTR(numa_num_configured_nodes_func_t,
|
||||||
|
+ libnuma_dlsym(handle, "numa_num_configured_nodes")));
|
||||||
|
set_numa_available(CAST_TO_FN_PTR(numa_available_func_t,
|
||||||
|
libnuma_dlsym(handle, "numa_available")));
|
||||||
|
set_numa_tonode_memory(CAST_TO_FN_PTR(numa_tonode_memory_func_t,
|
||||||
|
libnuma_dlsym(handle, "numa_tonode_memory")));
|
||||||
|
set_numa_interleave_memory(CAST_TO_FN_PTR(numa_interleave_memory_func_t,
|
||||||
|
- libnuma_dlsym(handle, "numa_interleave_memory")));
|
||||||
|
+ libnuma_dlsym(handle, "numa_interleave_memory")));
|
||||||
|
set_numa_set_bind_policy(CAST_TO_FN_PTR(numa_set_bind_policy_func_t,
|
||||||
|
- libnuma_dlsym(handle, "numa_set_bind_policy")));
|
||||||
|
-
|
||||||
|
+ libnuma_dlsym(handle, "numa_set_bind_policy")));
|
||||||
|
+ set_numa_bitmask_isbitset(CAST_TO_FN_PTR(numa_bitmask_isbitset_func_t,
|
||||||
|
+ libnuma_dlsym(handle, "numa_bitmask_isbitset")));
|
||||||
|
+ set_numa_distance(CAST_TO_FN_PTR(numa_distance_func_t,
|
||||||
|
+ libnuma_dlsym(handle, "numa_distance")));
|
||||||
|
|
||||||
|
if (numa_available() != -1) {
|
||||||
|
set_numa_all_nodes((unsigned long*)libnuma_dlsym(handle, "numa_all_nodes"));
|
||||||
|
+ set_numa_all_nodes_ptr((struct bitmask **)libnuma_dlsym(handle, "numa_all_nodes_ptr"));
|
||||||
|
+ set_numa_nodes_ptr((struct bitmask **)libnuma_dlsym(handle, "numa_nodes_ptr"));
|
||||||
|
+ // Create an index -> node mapping, since nodes are not always consecutive
|
||||||
|
+ _nindex_to_node = new (ResourceObj::C_HEAP, mtInternal) GrowableArray<int>(0, true);
|
||||||
|
+ rebuild_nindex_to_node_map();
|
||||||
|
// Create a cpu -> node mapping
|
||||||
|
_cpu_to_node = new (ResourceObj::C_HEAP, mtInternal) GrowableArray<int>(0, true);
|
||||||
|
rebuild_cpu_to_node_map();
|
||||||
|
@@ -2847,6 +2880,17 @@
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
+void os::Linux::rebuild_nindex_to_node_map() {
|
||||||
|
+ int highest_node_number = Linux::numa_max_node();
|
||||||
|
+
|
||||||
|
+ nindex_to_node()->clear();
|
||||||
|
+ for (int node = 0; node <= highest_node_number; node++) {
|
||||||
|
+ if (Linux::isnode_in_existing_nodes(node)) {
|
||||||
|
+ nindex_to_node()->append(node);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
// rebuild_cpu_to_node_map() constructs a table mapping cpud id to node id.
|
||||||
|
// The table is later used in get_node_by_cpu().
|
||||||
|
void os::Linux::rebuild_cpu_to_node_map() {
|
||||||
|
@@ -2866,16 +2910,46 @@
|
||||||
|
|
||||||
|
cpu_to_node()->clear();
|
||||||
|
cpu_to_node()->at_grow(cpu_num - 1);
|
||||||
|
- size_t node_num = numa_get_groups_num();
|
||||||
|
-
|
||||||
|
+
|
||||||
|
+ size_t node_num = get_existing_num_nodes();
|
||||||
|
+
|
||||||
|
+ int distance = 0;
|
||||||
|
+ int closest_distance = INT_MAX;
|
||||||
|
+ int closest_node = 0;
|
||||||
|
unsigned long *cpu_map = NEW_C_HEAP_ARRAY(unsigned long, cpu_map_size, mtInternal);
|
||||||
|
for (size_t i = 0; i < node_num; i++) {
|
||||||
|
- if (numa_node_to_cpus(i, cpu_map, cpu_map_size * sizeof(unsigned long)) != -1) {
|
||||||
|
+ // Check if node is configured (not a memory-less node). If it is not, find
|
||||||
|
+ // the closest configured node.
|
||||||
|
+ if (!isnode_in_configured_nodes(nindex_to_node()->at(i))) {
|
||||||
|
+ closest_distance = INT_MAX;
|
||||||
|
+ // Check distance from all remaining nodes in the system. Ignore distance
|
||||||
|
+ // from itself and from another non-configured node.
|
||||||
|
+ for (size_t m = 0; m < node_num; m++) {
|
||||||
|
+ if (m != i && isnode_in_configured_nodes(nindex_to_node()->at(m))) {
|
||||||
|
+ distance = numa_distance(nindex_to_node()->at(i), nindex_to_node()->at(m));
|
||||||
|
+ // If a closest node is found, update. There is always at least one
|
||||||
|
+ // configured node in the system so there is always at least one node
|
||||||
|
+ // close.
|
||||||
|
+ if (distance != 0 && distance < closest_distance) {
|
||||||
|
+ closest_distance = distance;
|
||||||
|
+ closest_node = nindex_to_node()->at(m);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ } else {
|
||||||
|
+ // Current node is already a configured node.
|
||||||
|
+ closest_node = nindex_to_node()->at(i);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ // Get cpus from the original node and map them to the closest node. If node
|
||||||
|
+ // is a configured node (not a memory-less node), then original node and
|
||||||
|
+ // closest node are the same.
|
||||||
|
+ if (numa_node_to_cpus(nindex_to_node()->at(i), cpu_map, cpu_map_size * sizeof(unsigned long)) != -1) {
|
||||||
|
for (size_t j = 0; j < cpu_map_valid_size; j++) {
|
||||||
|
if (cpu_map[j] != 0) {
|
||||||
|
for (size_t k = 0; k < BitsPerCLong; k++) {
|
||||||
|
if (cpu_map[j] & (1UL << k)) {
|
||||||
|
- cpu_to_node()->at_put(j * BitsPerCLong + k, i);
|
||||||
|
+ cpu_to_node()->at_put(j * BitsPerCLong + k, closest_node);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -2893,14 +2967,20 @@
|
||||||
|
}
|
||||||
|
|
||||||
|
GrowableArray<int>* os::Linux::_cpu_to_node;
|
||||||
|
+GrowableArray<int>* os::Linux::_nindex_to_node;
|
||||||
|
os::Linux::sched_getcpu_func_t os::Linux::_sched_getcpu;
|
||||||
|
os::Linux::numa_node_to_cpus_func_t os::Linux::_numa_node_to_cpus;
|
||||||
|
os::Linux::numa_max_node_func_t os::Linux::_numa_max_node;
|
||||||
|
+os::Linux::numa_num_configured_nodes_func_t os::Linux::_numa_num_configured_nodes;
|
||||||
|
os::Linux::numa_available_func_t os::Linux::_numa_available;
|
||||||
|
os::Linux::numa_tonode_memory_func_t os::Linux::_numa_tonode_memory;
|
||||||
|
os::Linux::numa_interleave_memory_func_t os::Linux::_numa_interleave_memory;
|
||||||
|
os::Linux::numa_set_bind_policy_func_t os::Linux::_numa_set_bind_policy;
|
||||||
|
+os::Linux::numa_bitmask_isbitset_func_t os::Linux::_numa_bitmask_isbitset;
|
||||||
|
+os::Linux::numa_distance_func_t os::Linux::_numa_distance;
|
||||||
|
unsigned long* os::Linux::_numa_all_nodes;
|
||||||
|
+struct bitmask* os::Linux::_numa_all_nodes_ptr;
|
||||||
|
+struct bitmask* os::Linux::_numa_nodes_ptr;
|
||||||
|
|
||||||
|
bool os::pd_uncommit_memory(char* addr, size_t size) {
|
||||||
|
uintptr_t res = (uintptr_t) ::mmap(addr, size, PROT_NONE,
|
||||||
|
diff --git a/src/os/linux/vm/os_linux.hpp b/src/os/linux/vm/os_linux.hpp
|
||||||
|
--- openjdk/hotspot/src/os/linux/vm/os_linux.hpp
|
||||||
|
+++ openjdk/hotspot/src/os/linux/vm/os_linux.hpp
|
||||||
|
@@ -67,6 +67,7 @@
|
||||||
|
static bool _supports_fast_thread_cpu_time;
|
||||||
|
|
||||||
|
static GrowableArray<int>* _cpu_to_node;
|
||||||
|
+ static GrowableArray<int>* _nindex_to_node;
|
||||||
|
|
||||||
|
protected:
|
||||||
|
|
||||||
|
@@ -94,7 +95,9 @@
|
||||||
|
static void set_is_floating_stack() { _is_floating_stack = true; }
|
||||||
|
|
||||||
|
static void rebuild_cpu_to_node_map();
|
||||||
|
+ static void rebuild_nindex_to_node_map();
|
||||||
|
static GrowableArray<int>* cpu_to_node() { return _cpu_to_node; }
|
||||||
|
+ static GrowableArray<int>* nindex_to_node() { return _nindex_to_node; }
|
||||||
|
|
||||||
|
static size_t find_large_page_size();
|
||||||
|
static size_t setup_large_page_size();
|
||||||
|
@@ -243,28 +246,41 @@
|
||||||
|
typedef int (*sched_getcpu_func_t)(void);
|
||||||
|
typedef int (*numa_node_to_cpus_func_t)(int node, unsigned long *buffer, int bufferlen);
|
||||||
|
typedef int (*numa_max_node_func_t)(void);
|
||||||
|
+ typedef int (*numa_num_configured_nodes_func_t)(void);
|
||||||
|
typedef int (*numa_available_func_t)(void);
|
||||||
|
typedef int (*numa_tonode_memory_func_t)(void *start, size_t size, int node);
|
||||||
|
typedef void (*numa_interleave_memory_func_t)(void *start, size_t size, unsigned long *nodemask);
|
||||||
|
typedef void (*numa_set_bind_policy_func_t)(int policy);
|
||||||
|
+ typedef int (*numa_bitmask_isbitset_func_t)(struct bitmask *bmp, unsigned int n);
|
||||||
|
+ typedef int (*numa_distance_func_t)(int node1, int node2);
|
||||||
|
|
||||||
|
static sched_getcpu_func_t _sched_getcpu;
|
||||||
|
static numa_node_to_cpus_func_t _numa_node_to_cpus;
|
||||||
|
static numa_max_node_func_t _numa_max_node;
|
||||||
|
+ static numa_num_configured_nodes_func_t _numa_num_configured_nodes;
|
||||||
|
static numa_available_func_t _numa_available;
|
||||||
|
static numa_tonode_memory_func_t _numa_tonode_memory;
|
||||||
|
static numa_interleave_memory_func_t _numa_interleave_memory;
|
||||||
|
static numa_set_bind_policy_func_t _numa_set_bind_policy;
|
||||||
|
+ static numa_bitmask_isbitset_func_t _numa_bitmask_isbitset;
|
||||||
|
+ static numa_distance_func_t _numa_distance;
|
||||||
|
static unsigned long* _numa_all_nodes;
|
||||||
|
+ static struct bitmask* _numa_all_nodes_ptr;
|
||||||
|
+ static struct bitmask* _numa_nodes_ptr;
|
||||||
|
|
||||||
|
static void set_sched_getcpu(sched_getcpu_func_t func) { _sched_getcpu = func; }
|
||||||
|
static void set_numa_node_to_cpus(numa_node_to_cpus_func_t func) { _numa_node_to_cpus = func; }
|
||||||
|
static void set_numa_max_node(numa_max_node_func_t func) { _numa_max_node = func; }
|
||||||
|
+ static void set_numa_num_configured_nodes(numa_num_configured_nodes_func_t func) { _numa_num_configured_nodes = func; }
|
||||||
|
static void set_numa_available(numa_available_func_t func) { _numa_available = func; }
|
||||||
|
static void set_numa_tonode_memory(numa_tonode_memory_func_t func) { _numa_tonode_memory = func; }
|
||||||
|
static void set_numa_interleave_memory(numa_interleave_memory_func_t func) { _numa_interleave_memory = func; }
|
||||||
|
static void set_numa_set_bind_policy(numa_set_bind_policy_func_t func) { _numa_set_bind_policy = func; }
|
||||||
|
+ static void set_numa_bitmask_isbitset(numa_bitmask_isbitset_func_t func) { _numa_bitmask_isbitset = func; }
|
||||||
|
+ static void set_numa_distance(numa_distance_func_t func) { _numa_distance = func; }
|
||||||
|
static void set_numa_all_nodes(unsigned long* ptr) { _numa_all_nodes = ptr; }
|
||||||
|
+ static void set_numa_all_nodes_ptr(struct bitmask **ptr) { _numa_all_nodes_ptr = *ptr; }
|
||||||
|
+ static void set_numa_nodes_ptr(struct bitmask **ptr) { _numa_nodes_ptr = *ptr; }
|
||||||
|
static int sched_getcpu_syscall(void);
|
||||||
|
public:
|
||||||
|
static int sched_getcpu() { return _sched_getcpu != NULL ? _sched_getcpu() : -1; }
|
||||||
|
@@ -272,6 +288,9 @@
|
||||||
|
return _numa_node_to_cpus != NULL ? _numa_node_to_cpus(node, buffer, bufferlen) : -1;
|
||||||
|
}
|
||||||
|
static int numa_max_node() { return _numa_max_node != NULL ? _numa_max_node() : -1; }
|
||||||
|
+ static int numa_num_configured_nodes() {
|
||||||
|
+ return _numa_num_configured_nodes != NULL ? _numa_num_configured_nodes() : -1;
|
||||||
|
+ }
|
||||||
|
static int numa_available() { return _numa_available != NULL ? _numa_available() : -1; }
|
||||||
|
static int numa_tonode_memory(void *start, size_t size, int node) {
|
||||||
|
return _numa_tonode_memory != NULL ? _numa_tonode_memory(start, size, node) : -1;
|
||||||
|
@@ -286,7 +305,25 @@
|
||||||
|
_numa_set_bind_policy(policy);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+ static int numa_distance(int node1, int node2) {
|
||||||
|
+ return _numa_distance != NULL ? _numa_distance(node1, node2) : -1;
|
||||||
|
+ }
|
||||||
|
static int get_node_by_cpu(int cpu_id);
|
||||||
|
+ static int get_existing_num_nodes();
|
||||||
|
+ // Check if numa node is configured (non-zero memory node).
|
||||||
|
+ static bool isnode_in_configured_nodes(unsigned int n) {
|
||||||
|
+ if (_numa_bitmask_isbitset != NULL && _numa_all_nodes_ptr != NULL) {
|
||||||
|
+ return _numa_bitmask_isbitset(_numa_all_nodes_ptr, n);
|
||||||
|
+ } else
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
|
+ // Check if numa node exists in the system (including zero memory nodes).
|
||||||
|
+ static bool isnode_in_existing_nodes(unsigned int n) {
|
||||||
|
+ if (_numa_bitmask_isbitset != NULL && _numa_nodes_ptr != NULL) {
|
||||||
|
+ return _numa_bitmask_isbitset(_numa_nodes_ptr, n);
|
||||||
|
+ } else
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
|
};
|
||||||
|
|
||||||
|
|
115
8181055-pr3394-rh1448880.patch
Normal file
115
8181055-pr3394-rh1448880.patch
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
# HG changeset patch
|
||||||
|
# User zgu
|
||||||
|
# Date 1496236768 14400
|
||||||
|
# Wed May 31 09:19:28 2017 -0400
|
||||||
|
# Node ID 8330ff7914ec54c46fd19300221f72d774423405
|
||||||
|
# Parent 55a34e4962e10c822affe8f89273a87e84cade92
|
||||||
|
8181055: PPC64: "mbind: Invalid argument" still seen after 8175813
|
||||||
|
Summary: Use numa_interleave_memory v2 api when available
|
||||||
|
Reviewed-by: dholmes, shade
|
||||||
|
|
||||||
|
diff -r 74c81011375b src/os/linux/vm/os_linux.cpp
|
||||||
|
--- openjdk/hotspot/src/os/linux/vm/os_linux.cpp Wed May 17 17:52:34 2017 -0400
|
||||||
|
+++ openjdk/hotspot/src/os/linux/vm/os_linux.cpp Wed May 31 12:27:00 2017 -0400
|
||||||
|
@@ -2819,11 +2819,8 @@
|
||||||
|
extern "C" JNIEXPORT void numa_error(char *where) { }
|
||||||
|
extern "C" JNIEXPORT int fork1() { return fork(); }
|
||||||
|
|
||||||
|
-
|
||||||
|
-// If we are running with libnuma version > 2, then we should
|
||||||
|
-// be trying to use symbols with versions 1.1
|
||||||
|
-// If we are running with earlier version, which did not have symbol versions,
|
||||||
|
-// we should use the base version.
|
||||||
|
+// Handle request to load libnuma symbol version 1.1 (API v1). If it fails
|
||||||
|
+// load symbol from base version instead.
|
||||||
|
void* os::Linux::libnuma_dlsym(void* handle, const char *name) {
|
||||||
|
void *f = dlvsym(handle, name, "libnuma_1.1");
|
||||||
|
if (f == NULL) {
|
||||||
|
@@ -2832,6 +2829,12 @@
|
||||||
|
return f;
|
||||||
|
}
|
||||||
|
|
||||||
|
+// Handle request to load libnuma symbol version 1.2 (API v2) only.
|
||||||
|
+// Return NULL if the symbol is not defined in this particular version.
|
||||||
|
+void* os::Linux::libnuma_v2_dlsym(void* handle, const char* name) {
|
||||||
|
+ return dlvsym(handle, name, "libnuma_1.2");
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
bool os::Linux::libnuma_init() {
|
||||||
|
// sched_getcpu() should be in libc.
|
||||||
|
set_sched_getcpu(CAST_TO_FN_PTR(sched_getcpu_func_t,
|
||||||
|
@@ -2856,6 +2859,8 @@
|
||||||
|
libnuma_dlsym(handle, "numa_tonode_memory")));
|
||||||
|
set_numa_interleave_memory(CAST_TO_FN_PTR(numa_interleave_memory_func_t,
|
||||||
|
libnuma_dlsym(handle, "numa_interleave_memory")));
|
||||||
|
+ set_numa_interleave_memory_v2(CAST_TO_FN_PTR(numa_interleave_memory_v2_func_t,
|
||||||
|
+ libnuma_v2_dlsym(handle, "numa_interleave_memory")));
|
||||||
|
set_numa_set_bind_policy(CAST_TO_FN_PTR(numa_set_bind_policy_func_t,
|
||||||
|
libnuma_dlsym(handle, "numa_set_bind_policy")));
|
||||||
|
set_numa_bitmask_isbitset(CAST_TO_FN_PTR(numa_bitmask_isbitset_func_t,
|
||||||
|
@@ -2975,6 +2980,7 @@
|
||||||
|
os::Linux::numa_available_func_t os::Linux::_numa_available;
|
||||||
|
os::Linux::numa_tonode_memory_func_t os::Linux::_numa_tonode_memory;
|
||||||
|
os::Linux::numa_interleave_memory_func_t os::Linux::_numa_interleave_memory;
|
||||||
|
+os::Linux::numa_interleave_memory_v2_func_t os::Linux::_numa_interleave_memory_v2;
|
||||||
|
os::Linux::numa_set_bind_policy_func_t os::Linux::_numa_set_bind_policy;
|
||||||
|
os::Linux::numa_bitmask_isbitset_func_t os::Linux::_numa_bitmask_isbitset;
|
||||||
|
os::Linux::numa_distance_func_t os::Linux::_numa_distance;
|
||||||
|
diff -r 74c81011375b src/os/linux/vm/os_linux.hpp
|
||||||
|
--- openjdk/hotspot/src/os/linux/vm/os_linux.hpp Wed May 17 17:52:34 2017 -0400
|
||||||
|
+++ openjdk/hotspot/src/os/linux/vm/os_linux.hpp Wed May 31 12:27:00 2017 -0400
|
||||||
|
@@ -1,5 +1,5 @@
|
||||||
|
/*
|
||||||
|
- * Copyright (c) 1999, 2013, Oracle and/or its affiliates. All rights reserved.
|
||||||
|
+ * Copyright (c) 1999, 2017, 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
|
||||||
|
@@ -190,6 +190,9 @@
|
||||||
|
static void libpthread_init();
|
||||||
|
static bool libnuma_init();
|
||||||
|
static void* libnuma_dlsym(void* handle, const char* name);
|
||||||
|
+ // libnuma v2 (libnuma_1.2) symbols
|
||||||
|
+ static void* libnuma_v2_dlsym(void* handle, const char* name);
|
||||||
|
+
|
||||||
|
// Minimum stack size a thread can be created with (allowing
|
||||||
|
// the VM to completely create the thread and enter user code)
|
||||||
|
static size_t min_stack_allowed;
|
||||||
|
@@ -250,6 +253,8 @@
|
||||||
|
typedef int (*numa_available_func_t)(void);
|
||||||
|
typedef int (*numa_tonode_memory_func_t)(void *start, size_t size, int node);
|
||||||
|
typedef void (*numa_interleave_memory_func_t)(void *start, size_t size, unsigned long *nodemask);
|
||||||
|
+ typedef void (*numa_interleave_memory_v2_func_t)(void *start, size_t size, struct bitmask* mask);
|
||||||
|
+
|
||||||
|
typedef void (*numa_set_bind_policy_func_t)(int policy);
|
||||||
|
typedef int (*numa_bitmask_isbitset_func_t)(struct bitmask *bmp, unsigned int n);
|
||||||
|
typedef int (*numa_distance_func_t)(int node1, int node2);
|
||||||
|
@@ -261,6 +266,7 @@
|
||||||
|
static numa_available_func_t _numa_available;
|
||||||
|
static numa_tonode_memory_func_t _numa_tonode_memory;
|
||||||
|
static numa_interleave_memory_func_t _numa_interleave_memory;
|
||||||
|
+ static numa_interleave_memory_v2_func_t _numa_interleave_memory_v2;
|
||||||
|
static numa_set_bind_policy_func_t _numa_set_bind_policy;
|
||||||
|
static numa_bitmask_isbitset_func_t _numa_bitmask_isbitset;
|
||||||
|
static numa_distance_func_t _numa_distance;
|
||||||
|
@@ -275,6 +281,7 @@
|
||||||
|
static void set_numa_available(numa_available_func_t func) { _numa_available = func; }
|
||||||
|
static void set_numa_tonode_memory(numa_tonode_memory_func_t func) { _numa_tonode_memory = func; }
|
||||||
|
static void set_numa_interleave_memory(numa_interleave_memory_func_t func) { _numa_interleave_memory = func; }
|
||||||
|
+ static void set_numa_interleave_memory_v2(numa_interleave_memory_v2_func_t func) { _numa_interleave_memory_v2 = func; }
|
||||||
|
static void set_numa_set_bind_policy(numa_set_bind_policy_func_t func) { _numa_set_bind_policy = func; }
|
||||||
|
static void set_numa_bitmask_isbitset(numa_bitmask_isbitset_func_t func) { _numa_bitmask_isbitset = func; }
|
||||||
|
static void set_numa_distance(numa_distance_func_t func) { _numa_distance = func; }
|
||||||
|
@@ -296,7 +303,10 @@
|
||||||
|
return _numa_tonode_memory != NULL ? _numa_tonode_memory(start, size, node) : -1;
|
||||||
|
}
|
||||||
|
static void numa_interleave_memory(void *start, size_t size) {
|
||||||
|
- if (_numa_interleave_memory != NULL && _numa_all_nodes != NULL) {
|
||||||
|
+ // Use v2 api if available
|
||||||
|
+ if (_numa_interleave_memory_v2 != NULL && _numa_all_nodes_ptr != NULL) {
|
||||||
|
+ _numa_interleave_memory_v2(start, size, _numa_all_nodes_ptr);
|
||||||
|
+ } else if (_numa_interleave_memory != NULL && _numa_all_nodes != NULL) {
|
||||||
|
_numa_interleave_memory(start, size, _numa_all_nodes);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
11
enableCommentedOutSystemNss.patch
Normal file
11
enableCommentedOutSystemNss.patch
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
diff -r 5b86f66575b7 src/share/lib/security/java.security-linux
|
||||||
|
--- openjdk/jdk/src/share/lib/security/java.security-linux Tue May 16 13:29:05 2017 -0700
|
||||||
|
+++ openjdk/jdk/src/share/lib/security/java.security-linux Tue Jun 06 14:05:12 2017 +0200
|
||||||
|
@@ -74,6 +74,7 @@
|
||||||
|
security.provider.7=com.sun.security.sasl.Provider
|
||||||
|
security.provider.8=org.jcp.xml.dsig.internal.dom.XMLDSigRI
|
||||||
|
security.provider.9=sun.security.smartcardio.SunPCSC
|
||||||
|
+#security.provider.10=sun.security.pkcs11.SunPKCS11 ${java.home}/lib/security/nss.cfg
|
||||||
|
|
||||||
|
#
|
||||||
|
# Sun Provider SecureRandom seed source.
|
@ -548,6 +548,7 @@ exit 0
|
|||||||
%{_jvmprivdir}/*
|
%{_jvmprivdir}/*
|
||||||
%{jvmjardir %%1}
|
%{jvmjardir %%1}
|
||||||
%dir %{_jvmdir}/%{jredir %%1}/lib/security
|
%dir %{_jvmdir}/%{jredir %%1}/lib/security
|
||||||
|
%{_jvmdir}/%{jredir %%1}/lib/security/cacerts
|
||||||
%config(noreplace) %{_jvmdir}/%{jredir %%1}/lib/security/US_export_policy.jar
|
%config(noreplace) %{_jvmdir}/%{jredir %%1}/lib/security/US_export_policy.jar
|
||||||
%config(noreplace) %{_jvmdir}/%{jredir %%1}/lib/security/local_policy.jar
|
%config(noreplace) %{_jvmdir}/%{jredir %%1}/lib/security/local_policy.jar
|
||||||
%config(noreplace) %{_jvmdir}/%{jredir %%1}/lib/security/java.policy
|
%config(noreplace) %{_jvmdir}/%{jredir %%1}/lib/security/java.policy
|
||||||
@ -813,7 +814,7 @@ Obsoletes: java-1.7.0-openjdk-accessibility%1
|
|||||||
|
|
||||||
Name: java-%{javaver}-%{origin}
|
Name: java-%{javaver}-%{origin}
|
||||||
Version: %{javaver}.%{updatever}
|
Version: %{javaver}.%{updatever}
|
||||||
Release: 2.%{buildver}%{?dist}
|
Release: 3.%{buildver}%{?dist}
|
||||||
# java-1.5.0-ibm from jpackage.org set Epoch to 1 for unknown reasons,
|
# java-1.5.0-ibm from jpackage.org set Epoch to 1 for unknown reasons,
|
||||||
# and this change was brought into RHEL-4. java-1.5.0-ibm packages
|
# and this change was brought into RHEL-4. java-1.5.0-ibm packages
|
||||||
# also included the epoch in their virtual provides. This created a
|
# also included the epoch in their virtual provides. This created a
|
||||||
@ -838,6 +839,9 @@ URL: http://openjdk.java.net/
|
|||||||
# where the source is obtained from http://hg.openjdk.java.net/%%{project}/%%{repo}
|
# where the source is obtained from http://hg.openjdk.java.net/%%{project}/%%{repo}
|
||||||
Source0: %{project}-%{repo}-%{revision}.tar.xz
|
Source0: %{project}-%{repo}-%{revision}.tar.xz
|
||||||
|
|
||||||
|
# Shenandoah HotSpot
|
||||||
|
Source1: aarch64-port-jdk8u-shenandoah-aarch64-shenandoah-jdk8u131-b12-shenandoah-merge-2017-04-20.tar.xz
|
||||||
|
|
||||||
# Custom README for -src subpackage
|
# Custom README for -src subpackage
|
||||||
Source2: README.src
|
Source2: README.src
|
||||||
|
|
||||||
@ -869,9 +873,6 @@ Source20: repackReproduciblePolycies.sh
|
|||||||
Source100: config.guess
|
Source100: config.guess
|
||||||
Source101: config.sub
|
Source101: config.sub
|
||||||
|
|
||||||
# Shenandoah HotSpot
|
|
||||||
Source999: aarch64-port-jdk8u-shenandoah-aarch64-shenandoah-jdk8u131-b12-shenandoah-merge-2017-04-20.tar.xz
|
|
||||||
|
|
||||||
# RPM/distribution specific patches
|
# RPM/distribution specific patches
|
||||||
|
|
||||||
# Accessibility patches
|
# Accessibility patches
|
||||||
@ -946,6 +947,10 @@ Patch400: 8154313.patch
|
|||||||
Patch526: 6260348-pr3066.patch
|
Patch526: 6260348-pr3066.patch
|
||||||
# 8061305, PR3335, RH1423421: Javadoc crashes when method name ends with "Property"
|
# 8061305, PR3335, RH1423421: Javadoc crashes when method name ends with "Property"
|
||||||
Patch538: 8061305-pr3335-rh1423421.patch
|
Patch538: 8061305-pr3335-rh1423421.patch
|
||||||
|
# 8175813, PR3394, RH1448880: PPC64: "mbind: Invalid argument" when -XX:+UseNUMA is used
|
||||||
|
Patch550: 8175813-pr3394-rh1448880.patch
|
||||||
|
# 8181055, PR3394, RH1448880: PPC64: "mbind: Invalid argument" still seen after 8175813
|
||||||
|
Patch551: 8181055-pr3394-rh1448880.patch
|
||||||
|
|
||||||
# Patches upstream and appearing in 8u131
|
# Patches upstream and appearing in 8u131
|
||||||
# 6515172, PR3346: Runtime.availableProcessors() ignores Linux taskset command
|
# 6515172, PR3346: Runtime.availableProcessors() ignores Linux taskset command
|
||||||
@ -988,6 +993,7 @@ Patch534: always_assumemp.patch
|
|||||||
Patch539: pr2888.patch
|
Patch539: pr2888.patch
|
||||||
|
|
||||||
# Non-OpenJDK fixes
|
# Non-OpenJDK fixes
|
||||||
|
Patch1000: enableCommentedOutSystemNss.patch
|
||||||
|
|
||||||
BuildRequires: autoconf
|
BuildRequires: autoconf
|
||||||
BuildRequires: automake
|
BuildRequires: automake
|
||||||
@ -1289,7 +1295,7 @@ ln -s openjdk jdk8
|
|||||||
# On Shenandoah-supported architectures, replace HotSpot with
|
# On Shenandoah-supported architectures, replace HotSpot with
|
||||||
# the Shenandoah version
|
# the Shenandoah version
|
||||||
pushd openjdk
|
pushd openjdk
|
||||||
tar -xf %{SOURCE999}
|
tar -xf %{SOURCE1}
|
||||||
rm -rf hotspot
|
rm -rf hotspot
|
||||||
mv openjdk/hotspot .
|
mv openjdk/hotspot .
|
||||||
rm -rf openjdk
|
rm -rf openjdk
|
||||||
@ -1369,6 +1375,8 @@ sh %{SOURCE12}
|
|||||||
%patch547
|
%patch547
|
||||||
%patch548
|
%patch548
|
||||||
%patch549
|
%patch549
|
||||||
|
%patch550
|
||||||
|
%patch551
|
||||||
|
|
||||||
# RPM-only fixes
|
# RPM-only fixes
|
||||||
%patch525
|
%patch525
|
||||||
@ -1380,6 +1388,8 @@ sh %{SOURCE12}
|
|||||||
%patch534
|
%patch534
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
|
%patch1000
|
||||||
|
|
||||||
# Extract systemtap tapsets
|
# Extract systemtap tapsets
|
||||||
%if %{with_systemtap}
|
%if %{with_systemtap}
|
||||||
tar -x -I xz -f %{SOURCE8}
|
tar -x -I xz -f %{SOURCE8}
|
||||||
@ -1660,6 +1670,12 @@ mkdir -p $RPM_BUILD_ROOT%{_jvmdir}/%{jredir $suffix}/lib/%{archinstall}/client/
|
|||||||
|
|
||||||
# Remove empty cacerts database.
|
# Remove empty cacerts database.
|
||||||
rm -f $RPM_BUILD_ROOT%{_jvmdir}/%{jredir $suffix}/lib/security/cacerts
|
rm -f $RPM_BUILD_ROOT%{_jvmdir}/%{jredir $suffix}/lib/security/cacerts
|
||||||
|
# Install cacerts symlink needed by some apps which hardcode the path.
|
||||||
|
pushd $RPM_BUILD_ROOT%{_jvmdir}/%{jredir $suffix}/lib/security
|
||||||
|
RELATIVE=$(%{abs2rel} %{_sysconfdir}/pki/java \
|
||||||
|
%{_jvmdir}/%{jredir $suffix}/lib/security)
|
||||||
|
ln -sf $RELATIVE/cacerts .
|
||||||
|
popd
|
||||||
|
|
||||||
# Install extension symlinks.
|
# Install extension symlinks.
|
||||||
install -d -m 755 $RPM_BUILD_ROOT%{jvmjardir $suffix}
|
install -d -m 755 $RPM_BUILD_ROOT%{jvmjardir $suffix}
|
||||||
@ -2061,6 +2077,11 @@ require "copy_jdk_configs.lua"
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Tue Jun 06 2017 Jiri Vanek <jvanek@redhat.com> - 1:1.8.0.131-3.b12
|
||||||
|
- source999 moved to source1
|
||||||
|
- added two pathces 8181055-pr3394-rh1448880.patch and 8175813/PR3394/RH1448880
|
||||||
|
- enabled (commented out) system NSS via patch1000, enableCommentedOutSystemNss.patch
|
||||||
|
|
||||||
* Tue May 09 2017 Jiri Vanek <jvanek@redhat.com> - 1:1.8.0.131-1.b12
|
* Tue May 09 2017 Jiri Vanek <jvanek@redhat.com> - 1:1.8.0.131-1.b12
|
||||||
- added javafx binding subpackages
|
- added javafx binding subpackages
|
||||||
|
|
||||||
|
@ -125,7 +125,7 @@ else
|
|||||||
echo "${FILENAME_SH} already exists, using"
|
echo "${FILENAME_SH} already exists, using"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
sed -i "s/^Source999:.*/Source999: ${FILENAME_SH}/" $SPEC
|
sed -i "s/^Source1:.*/Source1: ${FILENAME_SH}/" $SPEC
|
||||||
git --no-pager diff $SPEC
|
git --no-pager diff $SPEC
|
||||||
|
|
||||||
# find the most similar sources name and replace it by newly generated one.
|
# find the most similar sources name and replace it by newly generated one.
|
||||||
|
Loading…
Reference in New Issue
Block a user