--- a/src/hotspot/cpu/aarch64/vm_version_aarch64.cpp Tue Aug 20 10:46:23 2019 +0200
+++ b/src/hotspot/cpu/aarch64/vm_version_aarch64.cpp Tue Aug 20 10:11:53 2019 +0100
@@ -1,6 +1,6 @@
/*
- * Copyright (c) 1997, 2018, Oracle and/or its affiliates. All rights reserved.
- * Copyright (c) 2015, Red Hat Inc. All rights reserved.
+ * Copyright (c) 1997, 2019, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2019, Red Hat Inc. 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
@@ -28,6 +28,7 @@
#include "asm/macroAssembler.inline.hpp"
#include "memory/resourceArea.hpp"
#include "runtime/java.hpp"
+#include "runtime/os.hpp"
#include "runtime/stubCodeGenerator.hpp"
#include "utilities/macros.hpp"
#include "vm_version_aarch64.hpp"
@@ -67,6 +68,7 @@
int VM_Version::_variant;
int VM_Version::_revision;
int VM_Version::_stepping;
+bool VM_Version::_dcpop;
VM_Version::PsrInfo VM_Version::_psr_info = { 0, };
static BufferBlob* stub_blob;
@@ -167,7 +169,8 @@
int cpu_lines = 0;
if (FILE *f = fopen("/proc/cpuinfo", "r")) {
- char buf[128], *p;
+ // need a large buffer as the flags line may include lots of text
+ char buf[1024], *p;
while (fgets(buf, sizeof (buf), f) != NULL) {
if ((p = strchr(buf, ':')) != NULL) {
long v = strtol(p+1, NULL, 0);
@@ -181,12 +184,25 @@
_model = v;
} else if (strncmp(buf, "CPU revision", sizeof "CPU revision" - 1) == 0) {
_revision = v;
+ } else if (strncmp(buf, "flags", sizeof("flags") - 1) == 0) {
+ if (strstr(p+1, "dcpop")) {
+ _dcpop = true;
+ }
}
}
}
fclose(f);
}
+ if (os::supports_map_sync()) {
+ // if dcpop is available publish data cache line flush size via
+ // generic field, otherwise let if default to zero thereby
+ // disabling writeback
+ if (_dcpop) {
+ _data_cache_line_flush_size = dcache_line;
+ }
+ }
+
// Enable vendor specific features
// Ampere eMAG