Hi,

this call to sync the DMA mem wants to sync N - 1 number of prpl
entries, as the first segment is configured regularly, while the
addresses for the following segments (if more than 2), are in a
special DMA memory.

The code currently removes a single byte, instead of an entry.
This just means that it is syncing more than it should.

ok?

Patrick

diff --git a/sys/dev/ic/nvme.c b/sys/dev/ic/nvme.c
index 62b8e40c626..6db25260ef0 100644
--- a/sys/dev/ic/nvme.c
+++ b/sys/dev/ic/nvme.c
@@ -629,7 +629,7 @@ nvme_scsi_io(struct scsi_xfer *xs, int dir)
                bus_dmamap_sync(sc->sc_dmat,
                    NVME_DMA_MAP(sc->sc_ccb_prpls),
                    ccb->ccb_prpl_off,
-                   sizeof(*ccb->ccb_prpl) * dmap->dm_nsegs - 1,
+                   sizeof(*ccb->ccb_prpl) * (dmap->dm_nsegs - 1),
                    BUS_DMASYNC_PREWRITE);
        }
 
@@ -691,7 +691,7 @@ nvme_scsi_io_done(struct nvme_softc *sc, struct nvme_ccb 
*ccb,
                bus_dmamap_sync(sc->sc_dmat,
                    NVME_DMA_MAP(sc->sc_ccb_prpls),
                    ccb->ccb_prpl_off,
-                   sizeof(*ccb->ccb_prpl) * dmap->dm_nsegs - 1,
+                   sizeof(*ccb->ccb_prpl) * (dmap->dm_nsegs - 1),
                    BUS_DMASYNC_POSTWRITE);
        }
 

Reply via email to