| /* |
| * libqos malloc support |
| * |
| * Copyright IBM, Corp. 2012-2013 |
| * |
| * Authors: |
| * Anthony Liguori <aliguori@us.ibm.com> |
| * |
| * 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 |