diff options
author | tmm <tmm@FreeBSD.org> | 2003-01-21 17:08:22 +0000 |
---|---|---|
committer | tmm <tmm@FreeBSD.org> | 2003-01-21 17:08:22 +0000 |
commit | c33c23494393704bee7cde042d1876c8b847dbba (patch) | |
tree | 272578a6bb7684b758bf89a0e85cfabd4ba59c5f /sys | |
parent | 1c8eb2eca724abf31df71f0061398c68e695f503 (diff) | |
download | FreeBSD-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.
Diffstat (limited to 'sys')
-rw-r--r-- | sys/sparc64/sparc64/iommu.c | 18 |
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 |