Michael S. Tsirkin 7197fb4058 util/mmap-alloc: fix hugetlb support on ppc64
Since commit 8561c9244ddf1122d "exec: allocate PROT_NONE pages on top of
RAM", it is no longer possible to back guest RAM with hugepages on ppc64
hosts:

mmap(NULL, 285212672, PROT_NONE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0x3fff57000000
mmap(0x3fff57000000, 268435456, PROT_READ|PROT_WRITE,
MAP_PRIVATE|MAP_FIXED, 19, 0) = -1 EBUSY (Device or resource busy)

This is because on ppc64, Linux fixes a page size for a virtual address
at mmap time, so we can't switch a range of memory from anonymous
small pages to hugetlbs with MAP_FIXED.

See commit d0f13e3c20b6fb73ccb467bdca97fa7cf5a574cd
("[POWERPC] Introduce address space "slices"") in Linux
history for the details.

Detect this and create the PROT_NONE mapping using the same fd.

Naturally, this makes the guard page bigger with hugetlbfs.

Based on patch by Greg Kurz.

Acked-by: Rik van Riel <riel@redhat.com>
Reviewed-by: Greg Kurz <gkurz@linux.vnet.ibm.com>
Tested-by: Greg Kurz <gkurz@linux.vnet.ibm.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
2015-12-02 22:38:23 +02:00
..
2015-06-05 17:10:00 +02:00
2015-06-05 17:10:00 +02:00
2015-04-30 16:05:48 +03:00
2014-10-09 15:36:15 +02:00
2015-09-15 07:45:33 -07:00
2014-05-30 13:00:28 -06:00
2015-06-23 16:05:34 +01:00
2015-11-04 15:02:30 +01:00
2015-09-07 18:14:03 +02:00
2014-02-20 13:14:18 +01:00
2015-09-25 12:04:45 +02:00
2015-10-16 15:34:30 +02:00
2014-06-19 18:44:19 +03:00
2015-02-16 17:30:19 +01:00
2014-02-01 13:46:06 +04:00
2014-03-13 14:42:21 +01:00
2013-10-17 17:30:55 +02:00
2015-02-02 16:55:10 +01:00