Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c4596114 authored by Joerg Roedel's avatar Joerg Roedel
Browse files

x86/amd-iommu: Add per IOMMU reference counting



This patch adds reference counting for protection domains
per IOMMU. This allows a smarter TLB flushing strategy.

Signed-off-by: default avatarJoerg Roedel <joerg.roedel@amd.com>
parent bb52777e
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -238,7 +238,9 @@ struct protection_domain {
	unsigned long flags;	/* flags to find out type of domain */
	bool updated;		/* complete domain flush required */
	unsigned dev_cnt;	/* devices assigned to this domain */
	unsigned dev_iommu[MAX_IOMMUS]; /* per-IOMMU reference count */
	void *priv;		/* private data */

};

/*
+9 −3
Original line number Diff line number Diff line
@@ -1175,6 +1175,8 @@ static void __attach_device(struct amd_iommu *iommu,
	/* update DTE entry */
	set_dte_entry(devid, domain);

	/* Do reference counting */
	domain->dev_iommu[iommu->index] += 1;
	domain->dev_cnt                 += 1;

	/* ready */
@@ -1209,6 +1211,9 @@ static void attach_device(struct amd_iommu *iommu,
 */
static void __detach_device(struct protection_domain *domain, u16 devid)
{
	struct amd_iommu *iommu = amd_iommu_rlookup_table[devid];

	BUG_ON(!iommu);

	/* lock domain */
	spin_lock(&domain->lock);
@@ -1223,7 +1228,8 @@ static void __detach_device(struct protection_domain *domain, u16 devid)

	amd_iommu_apply_erratum_63(devid);

	/* decrease reference counter */
	/* decrease reference counters */
	domain->dev_iommu[iommu->index] -= 1;
	domain->dev_cnt                 -= 1;

	/* ready */