[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-stable] [PATCH 18/38] exec: always use MADV_DONTFORK
From: |
Michael Roth |
Subject: |
[Qemu-stable] [PATCH 18/38] exec: always use MADV_DONTFORK |
Date: |
Wed, 25 Sep 2013 07:57:46 -0500 |
From: Andrea Arcangeli <address@hidden>
MADV_DONTFORK prevents fork to fail with -ENOMEM if the default
overcommit heuristics decides there's too much anonymous virtual
memory allocated. If the KVM secondary MMU is synchronized with MMU
notifiers or not, doesn't make a difference in that regard.
Secondly it's always more efficient to avoid copying the guest
physical address space in the fork child (so we avoid to mark all the
guest memory readonly in the parent and so we skip the establishment
and teardown of lots of pagetables in the child).
In the common case we can ignore the error if MADV_DONTFORK is not
available. Leave a second invocation that errors out in the KVM path
if MMU notifiers are missing and KVM is enabled, to abort in such
case.
Signed-off-by: Andrea Arcangeli <address@hidden>
Tested-By: Benoit Canet <address@hidden>
Acked-by: Paolo Bonzini <address@hidden>
Signed-off-by: Gleb Natapov <address@hidden>
(cherry picked from commit 3e469dbfe413c25d48321c3a19ddfae0727dc6e5)
Signed-off-by: Michael Roth <address@hidden>
---
exec.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/exec.c b/exec.c
index 394f7e2..2ea8f04 100644
--- a/exec.c
+++ b/exec.c
@@ -1172,6 +1172,7 @@ ram_addr_t qemu_ram_alloc_from_ptr(ram_addr_t size, void
*host,
qemu_ram_setup_dump(new_block->host, size);
qemu_madvise(new_block->host, size, QEMU_MADV_HUGEPAGE);
+ qemu_madvise(new_block->host, size, QEMU_MADV_DONTFORK);
if (kvm_enabled())
kvm_setup_guest_memory(new_block->host, size);
--
1.7.9.5
- [Qemu-stable] [PATCH 08/38] pc: fix regression for 64 bit PCI memory, (continued)
- [Qemu-stable] [PATCH 08/38] pc: fix regression for 64 bit PCI memory, Michael Roth, 2013/09/25
- [Qemu-stable] [PATCH 11/38] xhci: fix endpoint interval calculation, Michael Roth, 2013/09/25
- [Qemu-stable] [PATCH 15/38] adlib: sort offsets in portio registration, Michael Roth, 2013/09/25
- [Qemu-stable] [PATCH 14/38] target-i386: fix disassembly with PAE=1, PG=0, Michael Roth, 2013/09/25
- [Qemu-stable] [PATCH 13/38] block: expect errors from bdrv_co_is_allocated, Michael Roth, 2013/09/25
- [Qemu-stable] [PATCH 12/38] Revert "usb-hub: report status changes only once", Michael Roth, 2013/09/25
- [Qemu-stable] [PATCH 16/38] exec: fix writing to MMIO area with non-power-of-two length, Michael Roth, 2013/09/25
- [Qemu-stable] [PATCH 18/38] exec: always use MADV_DONTFORK,
Michael Roth <=
- [Qemu-stable] [PATCH 21/38] w32: Fix access to host devices (regression), Michael Roth, 2013/09/25
- [Qemu-stable] [PATCH 17/38] virtio_pci: fix level interrupts with irqfd, Michael Roth, 2013/09/25
- [Qemu-stable] [PATCH 19/38] xhci: reset port when disabling slot, Michael Roth, 2013/09/25
- [Qemu-stable] [PATCH 20/38] usb: parallelize usb3 streams, Michael Roth, 2013/09/25
- [Qemu-stable] [PATCH 23/38] Revert "memory: Return -1 again on reads from unsigned regions", Michael Roth, 2013/09/25
- [Qemu-stable] [PATCH 24/38] exec: check offset_within_address_space for register subpage, Michael Roth, 2013/09/25
- [Qemu-stable] [PATCH 22/38] memory: Provide separate handling of unassigned io ports accesses, Michael Roth, 2013/09/25
- [Qemu-stable] [PATCH 28/38] pc: Initializing ram_memory under Xen., Michael Roth, 2013/09/25
- [Qemu-stable] [PATCH 25/38] ne2000: mark I/O as LITTLE_ENDIAN, Michael Roth, 2013/09/25
- [Qemu-stable] [PATCH 31/38] pcnet-pci: mark I/O and MMIO as LITTLE_ENDIAN, Michael Roth, 2013/09/25