DragonFly bugs List (threaded) for 2007-07
[
Date Prev][
Date Next]
[
Thread Prev][
Thread Next]
[
Date Index][
Thread Index]
Re: Live CD problems.
:Hi,
:
:During boot of the live cd this shows up:
:
:Mounting root from cd9660:cd0c
:ata1: FAILURE - zero length DMA transfer attempted
:acd0: setting up DMA failed
:ata1: FAILURE - zero length DMA transfer attempted
:acd0: setting up DMA failed
:ata1: FAILURE - zero length DMA transfer attempted
:acd0: setting up DMA failed
:ata1: FAILURE - zero length DMA transfer attempted
:acd0: setting up DMA failed
:ata1: FAILURE - zero length DMA transfer attempted
:acd0: setting up DMA failed
That is definitely not correct. If you don't mind burning another dead
CD could you please try this patch? It will force the system to panic
when it tries to do a 0-length I/O. Then get a backtrace from the DDB
prompt so we can see the call chain that leads up to the problem.
-Matt
Index: ata-dma.c
===================================================================
RCS file: /cvs/src/sys/dev/disk/nata/ata-dma.c,v
retrieving revision 1.4
diff -u -p -r1.4 ata-dma.c
--- ata-dma.c 5 Jun 2007 18:30:40 -0000 1.4
+++ ata-dma.c 22 Jul 2007 19:32:04 -0000
@@ -227,6 +227,7 @@ return EIO;
}
if (!count) {
device_printf(dev, "FAILURE - zero length DMA transfer attempted\n");
+ panic("zero length DMA transfer");
return EIO;
}
if (((uintptr_t)data & (ch->dma->alignment - 1)) ||
Index: atapi-cd.c
===================================================================
RCS file: /cvs/src/sys/dev/disk/nata/atapi-cd.c,v
retrieving revision 1.7
diff -u -p -r1.7 atapi-cd.c
--- atapi-cd.c 3 Jun 2007 04:48:29 -0000 1.7
+++ atapi-cd.c 22 Jul 2007 19:35:03 -0000
@@ -785,6 +785,8 @@ biodone(bp);
return 0;
}
+ KASSERT(bbp->b_bcount != 0, ("acd_strategy: 0-length I/O"));
+
bp->bio_driver_info = cdev;
bbp->b_resid = bbp->b_bcount;
@@ -842,6 +844,8 @@ lba = (bp->bio_offset & 0x00FFFFFFFFFFF
}
count = bbp->b_bcount / blocksize;
+ KASSERT(count != 0, ("acd_strategy: 0-length I/O %d bytes vs %d blksize",
+ bbp->b_bcount, blocksize));
if (bbp->b_cmd == BUF_CMD_READ) {
/* if transfer goes beyond range adjust it to be within limits */
[
Date Prev][
Date Next]
[
Thread Prev][
Thread Next]
[
Date Index][
Thread Index]