Ejemplo n.º 1
0
int mempool_destroy(struct mempool *mp)
{
	int rc = VMM_OK;

	if (!mp) {
		return VMM_EFAIL;
	}

	switch (mp->type) {
	case MEMPOOL_TYPE_RAW:
		rc = vmm_host_memunmap(mp->entity_base);
		break;
	case MEMPOOL_TYPE_RAM:
		rc = vmm_host_free_pages(mp->entity_base,
					 mp->d.ram.page_count);
		break;
	case MEMPOOL_TYPE_HEAP:
		vmm_free((void *)mp->entity_base);
		break;
	default:
		return VMM_EINVALID;
	};

	fifo_free(mp->f);
	vmm_free(mp);

	return rc;
}
Ejemplo n.º 2
0
static int heap_init(struct vmm_heap_control *heap,
		     bool is_normal, const u32 size_kb, u32 mem_flags)
{
	int rc = VMM_OK;

	memset(heap, 0, sizeof(*heap));

	heap->heap_size = size_kb * 1024;
	heap->heap_start = (void *)vmm_host_alloc_pages(
					VMM_SIZE_TO_PAGE(heap->heap_size),
					mem_flags);
	if (!heap->heap_start) {
		return VMM_ENOMEM;
	}

	rc = vmm_host_va2pa((virtual_addr_t)heap->heap_start,
			    &heap->heap_start_pa);
	if (rc) {
		goto fail_free_pages;
	}

	/* 12.5 percent for house-keeping */
	heap->hk_size = (heap->heap_size) / 8;

	/* Always have book keeping area for
	 * non-normal heaps in normal heap
	 */
	if (is_normal) {
		heap->hk_start = heap->heap_start;
		heap->mem_start = heap->heap_start + heap->hk_size;
		heap->mem_size = heap->heap_size - heap->hk_size;
	} else {
		heap->hk_start = vmm_malloc(heap->hk_size);
		if (!heap->hk_start) {
			rc = VMM_ENOMEM;
			goto fail_free_pages;
		}
		heap->mem_start = heap->heap_start;
		heap->mem_size = heap->heap_size;
	}

	rc = buddy_allocator_init(&heap->ba,
			  heap->hk_start, heap->hk_size,
			  (unsigned long)heap->mem_start, heap->mem_size,
			  HEAP_MIN_BIN, HEAP_MAX_BIN);
	if (rc) {
		goto fail_free_pages;
	}

	return VMM_OK;

fail_free_pages:
	vmm_host_free_pages((virtual_addr_t)heap->heap_start,
			    VMM_SIZE_TO_PAGE(heap->heap_size));
	return rc;
}
Ejemplo n.º 3
0
int mempool_destroy(struct mempool *mp)
{
	if (!mp) {
		return VMM_EFAIL;
	}

	vmm_host_free_pages(mp->page_base, mp->page_count);
	fifo_free(mp->f);
	vmm_free(mp);

	return VMM_OK;
}
Ejemplo n.º 4
0
int arch_guest_deinit(struct vmm_guest *guest)
{
	int rc;
	if (guest->arch_priv) {
		if (arm_guest_priv(guest)->ovect) {
			rc = vmm_host_free_pages(
			     (virtual_addr_t)arm_guest_priv(guest)->ovect, 1);
			if (rc) {
				return rc;
			}
		}
		vmm_free(guest->arch_priv);
	}
	return VMM_OK;
}
Ejemplo n.º 5
0
int cpu_free_vcpu_intercept_table(virtual_addr_t vaddr, size_t size)
{
	return vmm_host_free_pages(vaddr, VMM_SIZE_TO_PAGE(size));
}
Ejemplo n.º 6
0
void versatile_clcd_remove(struct clcd_fb *fb)
{
	vmm_host_free_pages((virtual_addr_t)fb->fb.screen_base,
				VMM_SIZE_TO_PAGE(fb->fb.fix.smem_len));
}
Ejemplo n.º 7
0
static void __arm_lpae_free_pages(void *pages, size_t size,
				  struct io_pgtable_cfg *cfg)
{
	vmm_host_free_pages((virtual_addr_t)pages, VMM_SIZE_TO_PAGE(size));
}