示例#1
0
文件: vtd.c 项目: CoryXie/jailhouse
void vtd_unmap_memory_region(struct cell *cell,
			     const struct jailhouse_memory *mem)
{
	// HACK for QEMU
	if (dmar_units == 0)
		return;

	if (mem->access_flags & JAILHOUSE_MEM_DMA)
		page_map_destroy(cell->vtd.page_table, mem->virt_start,
				 mem->size, dmar_pt_levels, PAGE_MAP_COHERENT);
}
示例#2
0
int vtd_unmap_memory_region(struct cell *cell,
			    const struct jailhouse_memory *mem)
{
	// HACK for QEMU
	if (dmar_units == 0)
		return 0;

	if (!(mem->flags & JAILHOUSE_MEM_DMA))
		return 0;

	return page_map_destroy(&cell->vtd.pg_structs, mem->virt_start,
				mem->size, PAGE_MAP_COHERENT);
}
示例#3
0
文件: vtd.c 项目: CoryXie/jailhouse
void vtd_linux_cell_shrink(struct jailhouse_cell_desc *config)
{
	const struct jailhouse_memory *mem =
		jailhouse_cell_mem_regions(config);
	const struct jailhouse_pci_device *dev =
		jailhouse_cell_pci_devices(config);
	unsigned int n;

	for (n = 0; n < config->num_memory_regions; n++, mem++)
		if (mem->access_flags & JAILHOUSE_MEM_DMA)
			page_map_destroy(linux_cell.vtd.page_table,
					 mem->phys_start, mem->size,
					 dmar_pt_levels, PAGE_MAP_COHERENT);

	for (n = 0; n < config->num_pci_devices; n++)
		vtd_remove_device_from_cell(&linux_cell, &dev[n]);

	vtd_flush_domain_caches(linux_cell.id);
}