libqos: Split apart pc_alloc_init

Move the list-specific initialization over into
malloc.c, to keep all of the list implementation
details within the same file.

The allocation and freeing of these structures are
now both back within the same layer.

Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>
Message-id: 1421698563-6977-2-git-send-email-jsnow@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
John Snow 2015-01-19 15:15:49 -05:00 committed by Stefan Hajnoczi
parent 21c7f3f749
commit af77f2cd7a
3 changed files with 22 additions and 16 deletions

View File

@ -32,31 +32,19 @@ void pc_alloc_uninit(QGuestAllocator *allocator)
QGuestAllocator *pc_alloc_init_flags(QAllocOpts flags) QGuestAllocator *pc_alloc_init_flags(QAllocOpts flags)
{ {
QGuestAllocator *s = g_malloc0(sizeof(*s)); QGuestAllocator *s;
uint64_t ram_size; uint64_t ram_size;
QFWCFG *fw_cfg = pc_fw_cfg_init(); QFWCFG *fw_cfg = pc_fw_cfg_init();
MemBlock *node;
ram_size = qfw_cfg_get_u64(fw_cfg, FW_CFG_RAM_SIZE);
s = alloc_init(1 << 20, MIN(ram_size, 0xE0000000));
s->opts = flags; s->opts = flags;
s->page_size = PAGE_SIZE; s->page_size = PAGE_SIZE;
ram_size = qfw_cfg_get_u64(fw_cfg, FW_CFG_RAM_SIZE);
/* Start at 1MB */
s->start = 1 << 20;
/* Respect PCI hole */
s->end = MIN(ram_size, 0xE0000000);
/* clean-up */ /* clean-up */
g_free(fw_cfg); g_free(fw_cfg);
QTAILQ_INIT(&s->used);
QTAILQ_INIT(&s->free);
node = mlist_new(s->start, s->end - s->start);
QTAILQ_INSERT_HEAD(&s->free, node, MLIST_ENTNAME);
return s; return s;
} }

View File

@ -268,3 +268,20 @@ void guest_free(QGuestAllocator *allocator, uint64_t addr)
mlist_check(allocator); mlist_check(allocator);
} }
} }
QGuestAllocator *alloc_init(uint64_t start, uint64_t end)
{
QGuestAllocator *s = g_malloc0(sizeof(*s));
MemBlock *node;
s->start = start;
s->end = end;
QTAILQ_INIT(&s->used);
QTAILQ_INIT(&s->free);
node = mlist_new(s->start, s->end - s->start);
QTAILQ_INSERT_HEAD(&s->free, node, MLIST_ENTNAME);
return s;
}

View File

@ -50,4 +50,5 @@ void alloc_uninit(QGuestAllocator *allocator);
uint64_t guest_alloc(QGuestAllocator *allocator, size_t size); uint64_t guest_alloc(QGuestAllocator *allocator, size_t size);
void guest_free(QGuestAllocator *allocator, uint64_t addr); void guest_free(QGuestAllocator *allocator, uint64_t addr);
QGuestAllocator *alloc_init(uint64_t start, uint64_t end);
#endif #endif