1 /* 2 * libqos malloc support 3 * 4 * Copyright IBM, Corp. 2012-2013 5 * 6 * Authors: 7 * Anthony Liguori <aliguori@us.ibm.com> 8 * 9 * This work is licensed under the terms of the GNU GPL, version 2 or later. 10 * See the COPYING file in the top-level directory. 11 */ 12 13 #ifndef LIBQOS_MALLOC_H 14 #define LIBQOS_MALLOC_H 15 16 #include "qemu/queue.h" 17 #include "../libqtest.h" 18 19 typedef enum { 20 ALLOC_NO_FLAGS = 0x00, 21 ALLOC_LEAK_WARN = 0x01, 22 ALLOC_LEAK_ASSERT = 0x02, 23 ALLOC_PARANOID = 0x04 24 } QAllocOpts; 25 26 typedef QTAILQ_HEAD(MemList, MemBlock) MemList; 27 28 typedef struct QGuestAllocator { 29 QAllocOpts opts; 30 uint64_t start; 31 uint64_t end; 32 uint32_t page_size; 33 34 MemList *used; 35 MemList *free; 36 } QGuestAllocator; 37 38 /* Always returns page aligned values */ 39 uint64_t guest_alloc(QGuestAllocator *allocator, size_t size); 40 void guest_free(QGuestAllocator *allocator, uint64_t addr); 41 void migrate_allocator(QGuestAllocator *src, QGuestAllocator *dst); 42 43 void alloc_set_flags(QGuestAllocator *allocator, QAllocOpts opts); 44 45 void alloc_init(QGuestAllocator *alloc, QAllocOpts flags, 46 uint64_t start, uint64_t end, 47 size_t page_size); 48 void alloc_destroy(QGuestAllocator *allocator); 49 50 #endif 51