HV: Clear DM set guest_flags when shutdown vm
Currently, the previous configurations about guest_flags set by DM will not be cleared when shutdown the vm. Then it might bring issue for the next dm-launched vm. For example, if we create one vm with LAPIC_PASSTHROUGH flag and shutdown it. Then the next dm-launched vm will has the LAPIC_PASSTHROUGH flag set no matter whether we set it in DM. This patch clears all the DM set flags when shtudown vm. Tracked-On: #2991 Signed-off-by: Kaige Fu <kaige.fu@intel.com> Acked-by: Eddie Dong <eddie.dong@intel.com>
This commit is contained in:
parent
a3207b2bc2
commit
565f3c723a
|
@ -457,6 +457,7 @@ int32_t shutdown_vm(struct acrn_vm *vm)
|
|||
{
|
||||
uint16_t i;
|
||||
struct acrn_vcpu *vcpu = NULL;
|
||||
struct acrn_vm_config *vm_config = NULL;
|
||||
int32_t ret;
|
||||
|
||||
pause_vm(vm);
|
||||
|
@ -470,6 +471,9 @@ int32_t shutdown_vm(struct acrn_vm *vm)
|
|||
offline_vcpu(vcpu);
|
||||
}
|
||||
|
||||
vm_config = get_vm_config(vm->vm_id);
|
||||
vm_config->guest_flags &= ~DM_OWNED_GUEST_FLAG_MASK;
|
||||
|
||||
ptdev_release_all_entries(vm);
|
||||
|
||||
vpci_cleanup(vm);
|
||||
|
|
|
@ -157,7 +157,9 @@ int32_t hcall_create_vm(struct acrn_vm *vm, uint64_t param)
|
|||
if ((vm_id < CONFIG_MAX_VM_NUM)
|
||||
&& (!is_valid_vm(get_vm_from_vmid(vm_id)))) {
|
||||
vm_config = get_vm_config(vm_id);
|
||||
vm_config->guest_flags |= cv.vm_flag;
|
||||
|
||||
/* Filter out the bits should not set by DM and then assign it to guest_flags */
|
||||
vm_config->guest_flags |= (cv.vm_flag & DM_OWNED_GUEST_FLAG_MASK);
|
||||
|
||||
/* GUEST_FLAG_RT must be set if we have GUEST_FLAG_LAPIC_PASSTHROUGH set in guest_flags */
|
||||
if (((vm_config->guest_flags & GUEST_FLAG_LAPIC_PASSTHROUGH) != 0U)
|
||||
|
|
|
@ -7,6 +7,9 @@
|
|||
#ifndef VM_CONFIGURATIONS_H
|
||||
#define VM_CONFIGURATIONS_H
|
||||
|
||||
/* Bits mask of guest flags that can be programmed by device model. Other bits are set by hypervisor only */
|
||||
#define DM_OWNED_GUEST_FLAG_MASK 0UL
|
||||
|
||||
#define CONFIG_MAX_VM_NUM 2U
|
||||
|
||||
/* The VM CONFIGs like:
|
||||
|
|
|
@ -9,4 +9,9 @@
|
|||
|
||||
#define CONFIG_MAX_VM_NUM 2U
|
||||
|
||||
/* Bits mask of guest flags that can be programmed by device model. Other bits are set by hypervisor only */
|
||||
#define DM_OWNED_GUEST_FLAG_MASK (GUEST_FLAG_SECURE_WORLD_ENABLED | GUEST_FLAG_LAPIC_PASSTHROUGH | \
|
||||
GUEST_FLAG_RT | GUEST_FLAG_IO_COMPLETION_POLLING)
|
||||
|
||||
|
||||
#endif /* VM_CONFIGURATIONS_H */
|
||||
|
|
Loading…
Reference in New Issue