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:
parent
21c7f3f749
commit
af77f2cd7a
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
|
@ -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
|
||||||
|
Loading…
Reference in New Issue
Block a user