On Tue, May 16, 2023, dengqiao.joey wrote: > Destination of irte will be cleard by IOMMU driver when updating irte. > It will only be set correctly in vcpu_load. IOMMU will deliver the > doorbell message to the wrong physical cpu before vcpu_load is executed. > That means vcpu can not recognize interrupt delivery during the time of > non-root mode. I suspect this is actually a bug in amd_iommu_activate_guest_mode(). Does the below fix the issue? If so, can you give a Tested-by and/or Reviewed-by on the posted patch[*]? diff --git a/drivers/iommu/amd/iommu.c b/drivers/iommu/amd/iommu.c index 5a505ba5467e..fbe77ee2d26c 100644 --- a/drivers/iommu/amd/iommu.c +++ b/drivers/iommu/amd/iommu.c @@ -3484,8 +3484,7 @@ int amd_iommu_activate_guest_mode(void *data) struct irte_ga *entry = (struct irte_ga *) ir_data->entry; u64 valid; - if (!AMD_IOMMU_GUEST_IR_VAPIC(amd_iommu_guest_ir) || - !entry || entry->lo.fields_vapic.guest_mode) + if (!AMD_IOMMU_GUEST_IR_VAPIC(amd_iommu_guest_ir) || !entry) return 0; valid = entry->lo.fields_vapic.valid; [*] https://lore.kernel.org/all/20230419201154.83880-2-joao.m.martins@xxxxxxxxxx