HV: Add vm_id entry to VM description in partitioning mode

ACRN boots multiple OS in partitioning mode. This patch adds code to assign
vm_id in the vm data structure to be same as the one assigned at compile time.
This makes the vm id deterministic for each VM booted from HV directly.

Signed-off-by: Sainath Grandhi <sainath.grandhi@intel.com>
This commit is contained in:
Sainath Grandhi 2018-08-09 09:47:08 -07:00 committed by lijinxia
parent d0e9f244ed
commit a8fcc0fa4b
1 changed files with 8 additions and 0 deletions

View File

@ -22,6 +22,7 @@ spinlock_t vm_list_lock = {
.tail = 0U .tail = 0U
}; };
#ifndef CONFIG_PARTITION_MODE
/* used for vmid allocation. And this means the max vm number is 64 */ /* used for vmid allocation. And this means the max vm number is 64 */
static uint64_t vmid_bitmap; static uint64_t vmid_bitmap;
@ -43,6 +44,7 @@ static inline void free_vm_id(struct vm *vm)
{ {
bitmap_clear_lock(vm->vm_id, &vmid_bitmap); bitmap_clear_lock(vm->vm_id, &vmid_bitmap);
} }
#endif
static void init_vm(struct vm_description *vm_desc, static void init_vm(struct vm_description *vm_desc,
struct vm *vm_handle) struct vm *vm_handle)
@ -120,12 +122,16 @@ int create_vm(struct vm_description *vm_desc, struct vm **rtn_vm)
goto err; goto err;
} }
#ifdef CONFIG_PARTITION_MODE
vm->vm_id = vm_desc->vm_id;
#else
vm->vm_id = alloc_vm_id(); vm->vm_id = alloc_vm_id();
if (vm->vm_id == INVALID_VM_ID) { if (vm->vm_id == INVALID_VM_ID) {
pr_err("%s, no more VMs can be supported\n", __func__); pr_err("%s, no more VMs can be supported\n", __func__);
status = -ENODEV; status = -ENODEV;
goto err; goto err;
} }
#endif
atomic_store16(&vm->hw.created_vcpus, 0U); atomic_store16(&vm->hw.created_vcpus, 0U);
@ -291,8 +297,10 @@ int shutdown_vm(struct vm *vm)
destroy_iommu_domain(vm->iommu); destroy_iommu_domain(vm->iommu);
} }
#ifndef CONFIG_PARTITION_MODE
/* Free vm id */ /* Free vm id */
free_vm_id(vm); free_vm_id(vm);
#endif
if (vm->vpic != NULL) { if (vm->vpic != NULL) {
vpic_cleanup(vm); vpic_cleanup(vm);