Re: [PATCH v4 3/7] iommu/amd: KVM: SVM: Add explicit vCPU running state to IOMMU interface
From: Vasant Hegde
Date: Fri Aug 21 2026 - 11:58:01 EST
On 8/21/2026 11:26 AM, Sairaj Kodilkar wrote:
> Guest APIC Physical Processor Interrupt (GAPPI) is an AMD IOMMU mechanism
> for notifying the host when a device interrupt targets a non-running vCPU
> (IRTE[IsRun] = 0). Unlike the GA log path, GAPPI delivers a physical APIC
> interrupt directly to the host CPU described by IRTE[Destination], with
> the vector carried in IRTE[GATag], while still posting the interrupt into
> the guest virtual APIC backing page as usual.
>
> In GAPPI mode, the IOMMU delivers the notification to the host CPU using
> the physical APIC ID in IRTE[Destination] and the vector in IRTE[GATag].
> KVM must therefore supply a valid apicid even when the vCPU is not running.
> The prior interface inferred running state from apicid: apicid >= 0 meant
> running and apicid == -1 meant not running. That encoding breaks once
> apicid carries the GAPPI destination while the vCPU is not running; the
> IOMMU driver can no longer derive vCPU running state from apicid alone
> and needs an explicit indication from KVM.
>
> Add an explicit is_running indication to the IOMMU interface so that
> SVM can pass vCPU running state to the IOMMU.
>
> SVM calls amd_iommu_activate_guest_mode() only when the vCPU is running,
> so keep is_running out of the exported prototype and make it a thin
> wrapper that hardcodes is_running = true. The IOMMU internal caller,
> amd_ir_set_vcpu_affinity(), calls __amd_iommu_activate_guest_mode()
> directly and passes the running state supplied by KVM, i.e. it handles
> both a running and a non-running vCPU.
>
> No functional change is intended.
>
> Signed-off-by: Sairaj Kodilkar <sarunkod@xxxxxxx>
Reviewed-by: Vasant Hegde <vasant.hegde@xxxxxxx>
-Vasant