svn commit: r246690 - projects/physbio/sys/dev/siis
Konstantin Belousov
kib at FreeBSD.org
Mon Feb 11 22:32:50 UTC 2013
Author: kib
Date: Mon Feb 11 22:32:49 2013
New Revision: 246690
URL: http://svnweb.freebsd.org/changeset/base/246690
Log:
The siis dma load callback siis_dmasetprd() does not handle the case
nsegs == 0. Restore the direct call to siis_execute_transaction() for
the ccbs which do not specify I/O.
Discussed with: jeff
Modified:
projects/physbio/sys/dev/siis/siis.c
Modified: projects/physbio/sys/dev/siis/siis.c
==============================================================================
--- projects/physbio/sys/dev/siis/siis.c Mon Feb 11 21:50:00 2013 (r246689)
+++ projects/physbio/sys/dev/siis/siis.c Mon Feb 11 22:32:49 2013 (r246690)
@@ -994,9 +994,13 @@ siis_begin_transaction(device_t dev, uni
(ccb->ataio.cmd.flags & (CAM_ATAIO_CONTROL | CAM_ATAIO_NEEDRESULT)))
ch->aslots |= (1 << slot->slot);
slot->dma.nsegs = 0;
- slot->state = SIIS_SLOT_LOADING;
- bus_dmamap_load_ccb(ch->dma.data_tag, slot->dma.data_map,
- ccb, siis_dmasetprd, slot, 0);
+ /* If request moves data, setup and load SG list */
+ if ((ccb->ccb_h.flags & CAM_DIR_MASK) != CAM_DIR_NONE) {
+ slot->state = SIIS_SLOT_LOADING;
+ bus_dmamap_load_ccb(ch->dma.data_tag, slot->dma.data_map,
+ ccb, siis_dmasetprd, slot, 0);
+ } else
+ siis_execute_transaction(slot);
}
/* Locked by busdma engine. */
More information about the svn-src-projects
mailing list