[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 05/15] util: add a helper to mmap private anonym
From: |
Alex Bennée |
Subject: |
Re: [Qemu-devel] [PATCH 05/15] util: add a helper to mmap private anonymous memory |
Date: |
Tue, 18 Oct 2016 14:50:57 +0100 |
User-agent: |
mu4e 0.9.17; emacs 25.1.50.9 |
Michael S. Tsirkin <address@hidden> writes:
> On Tue, Jun 28, 2016 at 11:01:29AM +0200, Peter Lieven wrote:
>> Signed-off-by: Peter Lieven <address@hidden>
>> ---
>> include/qemu/mmap-alloc.h | 6 ++++++
>> util/mmap-alloc.c | 17 +++++++++++++++++
>> 2 files changed, 23 insertions(+)
>>
>> diff --git a/include/qemu/mmap-alloc.h b/include/qemu/mmap-alloc.h
>> index 0899b2f..a457721 100644
>> --- a/include/qemu/mmap-alloc.h
>> +++ b/include/qemu/mmap-alloc.h
>> @@ -9,4 +9,10 @@ void *qemu_ram_mmap(int fd, size_t size, size_t align, bool
>> shared);
>>
>> void qemu_ram_munmap(void *ptr, size_t size);
>>
>> +/* qemu_anon_ram_mmap maps private anonymous memory using mmap and
>> + * aborts if the allocation fails. its meant to act as an replacement
>> + * for g_malloc0 and friends. */
>
> This needs better docs. When should one use g_malloc0 and when
> qemu_anon_ram_munmap?
My concern is does this break memory sanitizers when we could just tweak
libc's allocation strategy to use mmap (which it should do for blocks
over a certain threshold).
>
>
>
>> +void *qemu_anon_ram_mmap(size_t size);
>> +void qemu_anon_ram_munmap(void *ptr, size_t size);
>> +
>
> The names are confusing - this isn't guest RAM, this is
> just internal QEMU memory, isn't it?
>
> Just rename it qemu_malloc0 then ...
>
>> #endif
>> diff --git a/util/mmap-alloc.c b/util/mmap-alloc.c
>> index 629d97a..c099858 100644
>> --- a/util/mmap-alloc.c
>> +++ b/util/mmap-alloc.c
>> @@ -107,3 +107,20 @@ void qemu_ram_munmap(void *ptr, size_t size)
>> munmap(ptr, size + getpagesize());
>> }
>> }
>> +
>> +void *qemu_anon_ram_mmap(size_t size)
>> +{
>> + void *ptr = mmap(NULL, size, PROT_READ | PROT_WRITE,
>> + MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
>> + if (ptr == MAP_FAILED) {
>> + abort();
>> + }
>> + return ptr;
>> +}
>> +
>> +void qemu_anon_ram_munmap(void *ptr, size_t size)
>> +{
>> + if (ptr) {
>> + munmap(ptr, size);
>> + }
>> +}
>> --
>> 1.9.1
--
Alex Bennée