mblock
hvmd_finalize_mblock(struct md *md, struct mblock *mblock)
md_add_prop_val(md, node, "membase", mblock->membase);
md_add_prop_val(md, node, "memsize", mblock->memsize);
md_add_prop_val(md, node, "realbase", mblock->realbase);
md_add_prop_val(md, node, "resource_id", mblock->resource_id);
mblock->hv_node = node;
TAILQ_HEAD(, mblock) free_memory = TAILQ_HEAD_INITIALIZER(free_memory);
struct mblock *mblock;
TAILQ_FOREACH(mblock, &guest->mblock_list, link)
md_link_node(md, guest->hv_node, mblock->hv_node);
struct mblock *mblock;
TAILQ_FOREACH(mblock, &frag_mblocks, link) {
md_add_prop_val(md, node, "base", mblock->membase);
md_add_prop_val(md, node, "size", mblock->memsize);
struct mblock *mblock, *mblock2;
TAILQ_FOREACH_SAFE(mblock, &guest->mblock_list, link, mblock2) {
TAILQ_REMOVE(&guest->mblock_list, mblock, link);
mblocks[mblock->resource_id] = NULL;
free(mblock);
struct mblock *mblock, *tmp;
TAILQ_FOREACH_SAFE(mblock, &guest->mblock_list, link, tmp) {
if (mblock->resource_id != -1)
mblocks[mblock->resource_id] = NULL;
TAILQ_REMOVE(&guest->mblock_list, mblock, link);
free(mblock);
struct mblock *mblock;
mblock = pri_alloc_memory(base, size);
if (mblock == NULL)
mblock->resource_id = resource_id;
mblocks[resource_id] = mblock;
mblock->realbase = mblock->membase & (max_page_size - 1);
if (mblock->realbase == 0)
mblock->realbase = max_page_size;
TAILQ_INSERT_TAIL(&guest->mblock_list, mblock, link);
mblock->guest = guest;
struct mblock *mblock;
TAILQ_FOREACH(mblock, &guest->mblock_list, link) {
md_add_prop_val(md, child, "base", mblock->realbase);
md_add_prop_val(md, child, "size", mblock->memsize);
struct mblock *mblock;
mblock = xzalloc(sizeof(*mblock));
md_get_prop_val(md, node, "base", &mblock->membase);
md_get_prop_val(md, node, "size", &mblock->memsize);
mblock->resource_id = -1;
TAILQ_INSERT_TAIL(&free_memory, mblock, link);
total_memory += mblock->memsize;
struct mblock *
struct mblock *mblock, *new_mblock;
mblock = TAILQ_FIRST(&free_memory);
base = mblock->membase;
TAILQ_FOREACH(mblock, &free_memory, link) {
if (base >= mblock->membase &&
base < mblock->membase + mblock->memsize) {
if (base > mblock->membase) {
new_mblock->membase = mblock->membase;
new_mblock->memsize = base - mblock->membase;
TAILQ_INSERT_BEFORE(mblock, new_mblock, link);
memend = mblock->membase + mblock->memsize;
mblock->membase = base + size;
mblock->memsize = memend - mblock->membase;
if (mblock->memsize == 0) {
TAILQ_REMOVE(&free_memory, mblock, link);
free(mblock);
TAILQ_HEAD(, mblock) frag_mblocks;
struct mblock *hvmd_mblock;
struct mblock *mblock;
mblock = xzalloc(sizeof(*mblock));
mblock->membase = base;
mblock->memsize = size;
TAILQ_INSERT_TAIL(&frag_mblocks, mblock, link);
struct mblock *mblock;
mblock = xzalloc(sizeof(*mblock));
md_get_prop_val(md, node, "membase", &mblock->membase);
md_get_prop_val(md, node, "memsize", &mblock->memsize);
md_get_prop_val(md, node, "realbase", &mblock->realbase);
mblock->resource_id = resource_id;
mblocks[resource_id] = mblock;
mblock->hv_node = node;
struct mblock **mblocks;
TAILQ_HEAD(, mblock) mblock_list;
TAILQ_ENTRY(mblock) link;