[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] Re: [PATCH v3] Introduce qemu_madvise()
From: |
Alexander Graf |
Subject: |
[Qemu-devel] Re: [PATCH v3] Introduce qemu_madvise() |
Date: |
Mon, 13 Sep 2010 14:02:43 +0200 |
User-agent: |
Thunderbird 2.0.0.23 (X11/20090817) |
Blue Swirl wrote:
> On Sun, Sep 12, 2010 at 12:55 PM, Andreas Färber <address@hidden> wrote:
>
>> From: Andreas Färber <address@hidden>
>>
>> vl.c has a Sun-specific hack to supply a prototype for madvise(),
>> but the call site has apparently moved to arch_init.c.
>>
>> Haiku doesn't implement madvise() in favor of posix_madvise().
>> OpenBSD and Solaris 10 don't implement posix_madvise() but madvise().
>>
>> Check for madvise() and posix_madvise() in configure and supply
>> qemu_madvise()
>> as wrapper. Prefer madvise() over posix_madvise() due to flag availability.
>> Convert all callers to use qemu_madvise() and QEMU_MADV_*. No functional
>> change
>> except for arch_init.c:ram_load() now potentially falling back to
>> posix_madvise()
>> or no-op in lack of both.
>>
>> v2 -> v3:
>> * Reuse the *_MADV_* defines for QEMU_MADV_*. Suggested by Alexander Graf.
>> * Add configure check for madvise(), too.
>> Add defines to Makefile, not QEMU_CFLAGS.
>> Convert all callers, untested. Suggested by Blue Swirl.
>> * Keep Solaris' madvise() prototype around. Pointed out by Alexander Graf.
>>
>> v1 -> v2:
>> * Don't rely on posix_madvise() availability, add qemu_madvise().
>> Suggested by Blue Swirl.
>>
>> Signed-off-by: Andreas Färber <address@hidden>
>> Cc: Blue Swirl <address@hidden>
>> Cc: Alexander Graf <address@hidden>
>> ---
>> arch_init.c | 2 +-
>> configure | 33 +++++++++++++++++++++++++++++++++
>> exec.c | 8 ++++----
>> hw/virtio-balloon.c | 4 ++--
>> kvm-all.c | 6 +++---
>> osdep.c | 15 +++++++++++++++
>> osdep.h | 25 +++++++++++++++++++++++++
>> vl.c | 3 ---
>> 8 files changed, 83 insertions(+), 13 deletions(-)
>>
>> diff --git a/arch_init.c b/arch_init.c
>> index e468c0c..a910033 100644
>> --- a/arch_init.c
>> +++ b/arch_init.c
>> @@ -396,7 +396,7 @@ int ram_load(QEMUFile *f, void *opaque, int version_id)
>> #ifndef _WIN32
>> if (ch == 0 &&
>> (!kvm_enabled() || kvm_has_sync_mmu())) {
>> - madvise(host, TARGET_PAGE_SIZE, MADV_DONTNEED);
>> + qemu_madvise(host, TARGET_PAGE_SIZE, QEMU_MADV_DONTNEED);
>> }
>> #endif
>> } else if (flags & RAM_SAVE_FLAG_PAGE) {
>> diff --git a/configure b/configure
>> index 4061cb7..86558eb 100755
>> --- a/configure
>> +++ b/configure
>> @@ -2069,6 +2069,31 @@ if compile_prog "" "" ; then
>> fi
>>
>> ##########################################
>> +# check if we have madvise
>> +
>> +madvise=no
>> +cat > $TMPC << EOF
>> +#include <sys/types.h>
>> +#include <sys/mman.h>
>> +int main(void) { return madvise(NULL, 0, MADV_DONTNEED); }
>> +EOF
>> +if compile_prog "" "" ; then
>> + madvise=yes
>> +fi
>> +
>> +##########################################
>> +# check if we have posix_madvise
>> +
>> +posix_madvise=no
>> +cat > $TMPC << EOF
>> +#include <sys/mman.h>
>> +int main(void) { return posix_madvise(NULL, 0, POSIX_MADV_DONTNEED); }
>> +EOF
>> +if compile_prog "" "" ; then
>> + posix_madvise=yes
>> +fi
>> +
>> +##########################################
>> # check if trace backend exists
>>
>> sh "$source_path/tracetool" "--$trace_backend" --check-backend > /dev/null
>> 2> /dev/null
>> @@ -2226,6 +2251,8 @@ echo "KVM support $kvm"
>> echo "fdt support $fdt"
>> echo "preadv support $preadv"
>> echo "fdatasync $fdatasync"
>> +echo "madvise $madvise"
>> +echo "posix_madvise $posix_madvise"
>> echo "uuid support $uuid"
>> echo "vhost-net support $vhost_net"
>> echo "Trace backend $trace_backend"
>> @@ -2466,6 +2493,12 @@ fi
>> if test "$fdatasync" = "yes" ; then
>> echo "CONFIG_FDATASYNC=y" >> $config_host_mak
>> fi
>> +if test "$madvise" = "yes" ; then
>> + echo "CONFIG_MADVISE=y" >> $config_host_mak
>> +fi
>> +if test "$posix_madvise" = "yes" ; then
>> + echo "CONFIG_POSIX_MADVISE=y" >> $config_host_mak
>> +fi
>>
>> # XXX: suppress that
>> if [ "$bsd" = "yes" ] ; then
>> diff --git a/exec.c b/exec.c
>> index 380dab5..b1fe3e9 100644
>> --- a/exec.c
>> +++ b/exec.c
>> @@ -2841,8 +2841,8 @@ ram_addr_t qemu_ram_alloc_from_ptr(DeviceState *dev,
>> const char *name,
>> new_block->host = file_ram_alloc(new_block, size, mem_path);
>> if (!new_block->host) {
>> new_block->host = qemu_vmalloc(size);
>> -#ifdef MADV_MERGEABLE
>> - madvise(new_block->host, size, MADV_MERGEABLE);
>> +#ifdef QEMU_MADV_MERGEABLE
>>
>
> I'd like to avoid these #ifdefs. How about always #defining
> QEMU_MADV_MERGEABLE? QEMU_MADV_* values could be synthetic and not
> rely on MADV_*.
>
Hrm. Something like
#ifdef MADV_MEREABLE
#define QEMU_MADV_MERGEABLE MADV_MERGEABLE
#else
#define QEMU_MADV_MERGEABLE QEMU_MADV_INVALID
#endif
would work, right? Only need to find an unused bit in madv ...
Alex
- [Qemu-devel] [PATCH] Introduce qemu_madvise(), Andreas Färber, 2010/09/11
- Re: [Qemu-devel] [PATCH] Introduce qemu_madvise(), Alexander Graf, 2010/09/11
- [Qemu-devel] Re: [PATCH] Introduce qemu_madvise(), Blue Swirl, 2010/09/12
- [Qemu-devel] Re: [PATCH] Introduce qemu_madvise(), Andreas Färber, 2010/09/12
- [Qemu-devel] Re: [PATCH] Introduce qemu_madvise(), Blue Swirl, 2010/09/12
- [Qemu-devel] [PATCH v3] Introduce qemu_madvise(), Andreas Färber, 2010/09/12
- [Qemu-devel] Re: [PATCH v3] Introduce qemu_madvise(), Blue Swirl, 2010/09/12
- [Qemu-devel] Re: [PATCH v3] Introduce qemu_madvise(),
Alexander Graf <=
- [Qemu-devel] [RFC v4] Introduce qemu_madvise(), Andreas Färber, 2010/09/13
- [Qemu-devel] Re: [RFC v4] Introduce qemu_madvise(), Blue Swirl, 2010/09/14
- [Qemu-devel] Re: [RFC v4] Introduce qemu_madvise(), Alexander Graf, 2010/09/14
- [Qemu-devel] Re: [RFC v4] Introduce qemu_madvise(), Blue Swirl, 2010/09/14
- [Qemu-devel] [PATCH v5] Introduce qemu_madvise(), Andreas Färber, 2010/09/14
- [Qemu-devel] Re: [PATCH v5] Introduce qemu_madvise(), Blue Swirl, 2010/09/14
- [Qemu-devel] Re: [PATCH v5] Introduce qemu_madvise(), Andreas Färber, 2010/09/14
- [Qemu-devel] [PATCH v6] Introduce qemu_madvise(), Andreas Färber, 2010/09/15
- [Qemu-devel] Re: [PATCH v6] Introduce qemu_madvise(), Blue Swirl, 2010/09/15
- [Qemu-devel] Re: [PATCH v6] Introduce qemu_madvise(), Andreas Färber, 2010/09/15