From: David S. Miller <davem@davemloft.net>
Date: Wed, 1 Jun 2005 02:13:52 +0000 (-0700)
Subject: [SPARC64]: Refine PCI strbuf ctx-based flush.
X-Git-Tag: firefly_0821_release~42717^2~178^2
X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=88314ee73fd75eb32abdcb3119cd303c116d4500;p=firefly-linux-kernel-4.4.55.git

[SPARC64]: Refine PCI strbuf ctx-based flush.

The initial peek read PIO of the match register is just a waste.
Just do the flush writes first, as that is more efficient.

Signed-off-by: David S. Miller <davem@davemloft.net>
---

diff --git a/arch/sparc64/kernel/pci_iommu.c b/arch/sparc64/kernel/pci_iommu.c
index 1807876f8c36..2803bc7c2c79 100644
--- a/arch/sparc64/kernel/pci_iommu.c
+++ b/arch/sparc64/kernel/pci_iommu.c
@@ -422,14 +422,12 @@ static void pci_strbuf_flush(struct pci_strbuf *strbuf, struct pci_iommu *iommu,
 		flushreg = strbuf->strbuf_ctxflush;
 		matchreg = PCI_STC_CTXMATCH_ADDR(strbuf, ctx);
 
-		if (pci_iommu_read(matchreg) == 0)
-			goto do_flush_sync;
-
 		pci_iommu_write(flushreg, ctx);
-		if ((val = pci_iommu_read(matchreg)) == 0)
+		val = pci_iommu_read(matchreg);
+		val &= 0xffff;
+		if (!val)
 			goto do_flush_sync;
 
-		val &= 0xffff;
 		while (val) {
 			if (val & 0x1)
 				pci_iommu_write(flushreg, ctx);