Re: [PATCH 10/24] iommu/amd: Pass iommu to device_flush_dte()

From: Vasant Hegde

Date: Mon Aug 10 2026 - 07:13:08 EST




On 7/27/2026 6:58 PM, Suravee Suthikulpanit wrote:
> Take struct amd_iommu explicitly so DTE invalidation is issued on the
> same IOMMU instance used to program the DTE. Also, flush each device in
> amd_iommu_change_top() immediately after updating its DTE.
>
> Reviewed-by: Jason Gunthorpe <jgg@xxxxxxxxxx>
> Signed-off-by: Suravee Suthikulpanit <suravee.suthikulpanit@xxxxxxx>
> ---
> drivers/iommu/amd/iommu.c | 13 +++++--------
> 1 file changed, 5 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/iommu/amd/iommu.c b/drivers/iommu/amd/iommu.c
> index e5d26d6d4715..1bc232553c71 100644
> --- a/drivers/iommu/amd/iommu.c
> +++ b/drivers/iommu/amd/iommu.c
> @@ -76,7 +76,7 @@ static void set_dte_entry(struct amd_iommu *iommu,
> struct iommu_dev_data *dev_data,
> phys_addr_t top_paddr, unsigned int top_level);
>
> -static int device_flush_dte(struct iommu_dev_data *dev_data);
> +static int device_flush_dte(struct amd_iommu *iommu, struct iommu_dev_data *dev_data);
>
> static void amd_iommu_change_top(struct pt_iommu *iommu_table,
> phys_addr_t top_paddr, unsigned int top_level);
> @@ -213,7 +213,7 @@ void amd_iommu_update_dte(struct amd_iommu *iommu,
> {
> update_dte256(iommu, dev_data, new);
> clone_aliases(iommu, dev_data->dev);
> - device_flush_dte(dev_data);
> + device_flush_dte(iommu, dev_data);
> amd_iommu_completion_wait(iommu);
> }
>
> @@ -1716,9 +1716,8 @@ static int device_flush_dte_alias(struct pci_dev *pdev, u16 alias, void *data)
> /*
> * Command send function for invalidating a device table entry
> */
> -static int device_flush_dte(struct iommu_dev_data *dev_data)
> +static int device_flush_dte(struct amd_iommu *iommu, struct iommu_dev_data *dev_data)
> {
> - struct amd_iommu *iommu = get_amd_iommu_from_dev_data(dev_data);
> struct pci_dev *pdev = NULL;
> struct amd_iommu_pci_seg *pci_seg;
> u16 alias;
> @@ -2685,11 +2684,9 @@ static void amd_iommu_change_top(struct pt_iommu *iommu_table,
> /* Update the HW references with the new level and top ptr */
> set_dte_entry(iommu, dev_data, top_paddr, top_level);
> clone_aliases(iommu, dev_data->dev);
> + device_flush_dte(iommu, dev_data);
> }
>
> - list_for_each_entry(dev_data, &pdom->dev_list, list)
> - device_flush_dte(dev_data);
> -
> domain_flush_complete(pdom);

May be just replace all these w/ amd_iommu_update_dte()?


-Vasant