summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortmm <tmm@FreeBSD.org>2003-01-21 17:08:22 +0000
committertmm <tmm@FreeBSD.org>2003-01-21 17:08:22 +0000
commitc33c23494393704bee7cde042d1876c8b847dbba (patch)
tree272578a6bb7684b758bf89a0e85cfabd4ba59c5f
parent1c8eb2eca724abf31df71f0061398c68e695f503 (diff)
downloadFreeBSD-src-c33c23494393704bee7cde042d1876c8b847dbba.zip
FreeBSD-src-c33c23494393704bee7cde042d1876c8b847dbba.tar.gz
Fix iommu_dvmamap_sync(): it was still operating as if the BUS_DMASYNC_*
constants where flag bits (as in NetBSD), although they are consecutively numbered in FreeBSD. This would cause unnecessary flushing in the BUS_DMASYNC_POSTWRITE case, but was otherwise mostly harmless.
-rw-r--r--sys/sparc64/sparc64/iommu.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/sys/sparc64/sparc64/iommu.c b/sys/sparc64/sparc64/iommu.c
index 2fc7865..c72415e 100644
--- a/sys/sparc64/sparc64/iommu.c
+++ b/sys/sparc64/sparc64/iommu.c
@@ -996,9 +996,12 @@ iommu_dvmamap_sync(bus_dma_tag_t pt, bus_dma_tag_t dt, struct iommu_state *is,
vm_offset_t va;
vm_size_t len;
- if ((op & BUS_DMASYNC_PREREAD) != 0)
+ switch (op) {
+ case BUS_DMASYNC_PREREAD:
membar(Sync);
- if ((op & (BUS_DMASYNC_POSTREAD | BUS_DMASYNC_PREWRITE)) != 0) {
+ break;
+ case BUS_DMASYNC_POSTREAD:
+ case BUS_DMASYNC_PREWRITE:
SLIST_FOREACH(r, &map->dm_reslist, dr_link) {
va = (vm_offset_t)BDR_START(r);
len = r->dr_used;
@@ -1010,10 +1013,15 @@ iommu_dvmamap_sync(bus_dma_tag_t pt, bus_dma_tag_t dt, struct iommu_state *is,
va += IO_PAGE_SIZE;
}
}
+ if (op == BUS_DMASYNC_PREWRITE)
+ membar(Sync);
+ break;
+ case BUS_DMASYNC_POSTWRITE:
+ /* Nothing to do. */
+ break;
+ default:
+ panic("iommu_dvmamap_sync: bogus op %d", op);
}
- if ((op & BUS_DMASYNC_PREWRITE) != 0)
- membar(Sync);
- /* BUS_DMASYNC_POSTWRITE does not require any handling. */
}
#ifdef IOMMU_DIAG
OpenPOWER on IntegriCloud