Index: amd64/amd64/busdma_machdep.c =================================================================== RCS file: /home/ncvs/src/sys/amd64/amd64/busdma_machdep.c,v retrieving revision 1.86 diff -u -u -r1.86 busdma_machdep.c --- amd64/amd64/busdma_machdep.c 15 Jul 2008 03:34:49 -0000 1.86 +++ amd64/amd64/busdma_machdep.c 12 Oct 2008 15:09:53 -0000 @@ -616,6 +616,7 @@ if (flags & BUS_DMA_NOWAIT) { if (reserve_bounce_pages(dmat, map, 0) != 0) { mtx_unlock(&bounce_lock); + CTR0(KTR_BUSDMA, "*** NO BOUNCE ***\n"); return (ENOMEM); } } else { @@ -727,11 +728,24 @@ __func__, dmat, dmat->flags, error, nsegs + 1); if (error == EINPROGRESS) { + CTR0(KTR_BUSDMA, "*** IN PROGRESS"); return (error); } + + if (error == EFBIG) { + CTR0(KTR_BUSDMA, "*** 2 BIG"); + } + + if (error == ENOMEM) { + CTR0(KTR_BUSDMA, "*** NOMEM"); + } + - if (error) + if (error) { + CTR3(KTR_BUSDMA, "%s: *** CALLBACK called with error %x (%d)", + __func__, error, error); (*callback)(callback_arg, dmat->segments, 0, error); + } else (*callback)(callback_arg, dmat->segments, nsegs + 1, 0); @@ -739,8 +753,10 @@ * Return ENOMEM to the caller so that it can pass it up the stack. * This error only happens when NOWAIT is set, so deferal is disabled. */ - if (error == ENOMEM) + if (error == ENOMEM) { + CTR0(KTR_BUSDMA, "*** NOMEM"); return (error); + } return (0); } Index: dev/ata/ata-dma.c =================================================================== RCS file: /home/ncvs/src/sys/dev/ata/ata-dma.c,v retrieving revision 1.157 diff -u -u -r1157 ata-dma.c --- dev/ata/ata-dma.c 9 Oct 2008 12:56:57 -0000 1.157 +++ dev/ata/ata-dma.c 13 Oct 2008 15:28:23 -0000 @@ -263,6 +263,9 @@ struct ata_dmasetprd_args dspa; int error; + error = 0; + bzero(&dspa, sizeof(struct ata_dmasetprd_args)); + ATA_DEBUG_RQ(request, "dmaload"); if (request->dma) { @@ -291,16 +294,31 @@ /* set our slot, unit for simplicity XXX SOS NCQ will change that */ request->dma = &ch->dma.slot[atadev->unit]; - if (addr) - dspa.dmatab = addr; - else - dspa.dmatab = request->dma->sg; + if (addr) + dspa.dmatab = addr; + else + dspa.dmatab = request->dma->sg; + + if (dspaerror) + device_printf(request->dev, "ATA DMA dspa error set \n"); if ((error = bus_dmamap_load(request->dma->data_tag, request->dma->data_map, request->data, request->bytecount, ch->dma.setprd, &dspa, BUS_DMA_NOWAIT)) || (error = dspa.error)) { - device_printf(request->dev, "FAILURE - load data\n"); + device_printf(request->dev, "FAILURE - load data\n"); + device_printf(request->dev, "ATA error %x\n", error); + device_printf(request->dev, "ATA dspa error %x\n", dspa.error); + + device_printf(request->dev, "ATA request dma %p dspa %p\n", + request->dma, dspa.dmatab); + + + if (addr) + device_printf(request->dev, "ATA DMA addr set\n"); + else + device_printf(request->dev, "ATA DMA addr not set\n"); + panic("SHOULD NOT HAPPEN"); goto error; }