/* * libqos malloc support * * Copyright IBM, Corp. 2012-2013 * * Authors: * Anthony Liguori * * This work is licensed under the terms of the GNU GPL, version 2 or later. * See the COPYING file in the top-level directory. */ #ifndef LIBQOS_MALLOC_H #define LIBQOS_MALLOC_H #include "qemu/queue.h" #include "../libqtest.h" typedef enum { ALLOC_NO_FLAGS = 0x00, ALLOC_LEAK_WARN = 0x01, ALLOC_LEAK_ASSERT = 0x02, ALLOC_PARANOID = 0x04 } QAllocOpts; typedef QTAILQ_HEAD(MemList, MemBlock) MemList; typedef struct QGuestAllocator { QAllocOpts opts; uint64_t start; uint64_t end; uint32_t page_size; MemList *used; MemList *free; } QGuestAllocator; /* Always returns page aligned values */ uint64_t guest_alloc(QGuestAllocator *allocator, size_t size); void guest_free(QGuestAllocator *allocator, uint64_t addr); void migrate_allocator(QGuestAllocator *src, QGuestAllocator *dst); void alloc_set_flags(QGuestAllocator *allocator, QAllocOpts opts); void alloc_init(QGuestAllocator *alloc, QAllocOpts flags, uint64_t start, uint64_t end, size_t page_size); void alloc_destroy(QGuestAllocator *allocator); #endif