summaryrefslogtreecommitdiffstats
path: root/target-ppc/kvm.c
diff options
context:
space:
mode:
authorPeter Maydell2016-07-26 12:53:47 +0200
committerPeter Maydell2016-07-26 12:53:47 +0200
commitf49ee630d73729ecaeecf4b38a8df11bc613914d (patch)
treefc6eaed389e9bc5a214a206a247d88eac2904431 /target-ppc/kvm.c
parentMerge remote-tracking branch 'remotes/mdroth/tags/qga-pull-2016-07-25-tag' in... (diff)
parentspapr: disintricate core-id from DT semantics (diff)
downloadqemu-f49ee630d73729ecaeecf4b38a8df11bc613914d.tar.gz
qemu-f49ee630d73729ecaeecf4b38a8df11bc613914d.tar.xz
qemu-f49ee630d73729ecaeecf4b38a8df11bc613914d.zip
Merge remote-tracking branch 'remotes/dgibson/tags/ppc-for-2.7-20160726' into staging
ppc patch queue 2016-07-26 Here's the current batch of ppc and spapr related patches intended for qemu-2.7. Given the late stage in 2.7 development, these are all bugfixes with one exception: The "spapr: disintricate core-id from DT semantics" changes the way ids are assigned in the new core-based hotplug infrastructure. This isn't strictly a bugfix, but we've determined that the current way of assigning core-ids will cause considerable grief with future plans for cpu hotplug. Therefore it's better to fix this now, late in 2.7, before we have a released version with the problematic numbering. # gpg: Signature made Tue 26 Jul 2016 04:04:57 BST # gpg: using RSA key 0x6C38CACA20D9B392 # gpg: Good signature from "David Gibson <david@gibson.dropbear.id.au>" # gpg: aka "David Gibson (Red Hat) <dgibson@redhat.com>" # gpg: aka "David Gibson (ozlabs.org) <dgibson@ozlabs.org>" # gpg: WARNING: This key is not certified with sufficiently trusted signatures! # gpg: It is not certain that the signature belongs to the owner. # Primary key fingerprint: 75F4 6586 AE61 A66C C44E 87DC 6C38 CACA 20D9 B392 * remotes/dgibson/tags/ppc-for-2.7-20160726: spapr: disintricate core-id from DT semantics target-ppc: add PPC_MFTB flag to e500mc and e5500 spapr: fix spapr-nvram migration hw/ppc/spapr: Make sure to close the htab_fd when migration is canceled ppc: Huge page detection mechanism fixes - Episode III Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'target-ppc/kvm.c')
-rw-r--r--target-ppc/kvm.c27
1 files changed, 14 insertions, 13 deletions
diff --git a/target-ppc/kvm.c b/target-ppc/kvm.c
index 91e6daf4fd..84764edeae 100644
--- a/target-ppc/kvm.c
+++ b/target-ppc/kvm.c
@@ -366,10 +366,13 @@ static int find_max_supported_pagesize(Object *obj, void *opaque)
static long getrampagesize(void)
{
long hpsize = LONG_MAX;
+ long mainrampagesize;
Object *memdev_root;
if (mem_path) {
- return gethugepagesize(mem_path);
+ mainrampagesize = gethugepagesize(mem_path);
+ } else {
+ mainrampagesize = getpagesize();
}
/* it's possible we have memory-backend objects with
@@ -383,28 +386,26 @@ static long getrampagesize(void)
* backend isn't backed by hugepages.
*/
memdev_root = object_resolve_path("/objects", NULL);
- if (!memdev_root) {
- return getpagesize();
+ if (memdev_root) {
+ object_child_foreach(memdev_root, find_max_supported_pagesize, &hpsize);
}
-
- object_child_foreach(memdev_root, find_max_supported_pagesize, &hpsize);
-
- if (hpsize == LONG_MAX || hpsize == getpagesize()) {
- return getpagesize();
+ if (hpsize == LONG_MAX) {
+ /* No additional memory regions found ==> Report main RAM page size */
+ return mainrampagesize;
}
/* If NUMA is disabled or the NUMA nodes are not backed with a
- * memory-backend, then there is at least one node using "normal"
- * RAM. And since normal RAM has not been configured with "-mem-path"
- * (what we've checked earlier here already), we can not use huge pages!
+ * memory-backend, then there is at least one node using "normal" RAM,
+ * so if its page size is smaller we have got to report that size instead.
*/
- if (nb_numa_nodes == 0 || numa_info[0].node_memdev == NULL) {
+ if (hpsize > mainrampagesize &&
+ (nb_numa_nodes == 0 || numa_info[0].node_memdev == NULL)) {
static bool warned;
if (!warned) {
error_report("Huge page support disabled (n/a for main memory).");
warned = true;
}
- return getpagesize();
+ return mainrampagesize;
}
return hpsize;