diff options
author | David S. Miller <davem@davemloft.net> | 2005-05-31 19:13:52 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2005-05-31 19:13:52 -0700 |
commit | 88314ee73fd75eb32abdcb3119cd303c116d4500 (patch) | |
tree | 913c23ad89ec778d62eb517487dc6ab545d869c5 | |
parent | 7c963ad1d113790a8c723a178988b675868f3abe (diff) | |
download | op-kernel-dev-88314ee73fd75eb32abdcb3119cd303c116d4500.zip op-kernel-dev-88314ee73fd75eb32abdcb3119cd303c116d4500.tar.gz |
[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>
-rw-r--r-- | arch/sparc64/kernel/pci_iommu.c | 8 |
1 files changed, 3 insertions, 5 deletions
diff --git a/arch/sparc64/kernel/pci_iommu.c b/arch/sparc64/kernel/pci_iommu.c index 1807876..2803bc7 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); |