DragonFly bugs List (threaded) for 2007-07
[
Date Prev][
Date Next]
[
Thread Prev][
Thread Next]
[
Date Index][
Thread Index]
Re: ccd on NATA problem - ata0: FAILURE - oversized DMA transfer attempt 73728 > 65536
On Tue, Jul 17, 2007 at 11:45:08PM -0700, Matthew Dillon wrote:
>
> :On Tue, Jul 17, 2007 at 10:52:05PM -0700, Matthew Dillon wrote:
> :>
> :> :On Tue, Jul 10, 2007 at 12:58:16PM +0900, YONETANI Tomokazu wrote:
> :> :> It worked fine as I tested lightly(-j2 buildworld). I'll try to test later
> :> :> with different max iosize of component devices.
> :> :
> :> :Hi, I tried to reduce the default max_iosize in ata_dmainit()
> :> :to 64 * DEV_BSIZE(=32768), expecting that it reduces si_iosize_max
> :> :as it's assigned ch->dma->max_iosize in ata_attach(), but now NATA
> :> :fails setting up DMA. Is there any other way to achive the reduced
> :> :iosize?
> :> :
> :> :Cheers.
> :>
> :> Are you running the patch for CCD? Which I did commit.
> :
> :Yes, I saw that it was committed. I have the latest source,
> :and in this case CCD is irrelavant (because it happens on non-ccd
> :system, too). The system using CCD is working just fine as my
> :build machine.
> :
> :Cheers.
>
> Can you get a ddb backtrace?
Sure, are function names enough?
ata0: FAILURE - oversized DMA transfer attempt 37888 > 32768
Trace beginning at frame 0xc86155a4
ata_dmaload
ata_dmaload
ata_begin_transaction
ata_start
ata_queue_request
ad_strategy
dev_dstrategy
diskstrategy
dev_dstrategy_chain
spec_strategy
vop_strategy
vn_strategy
spec_getpages
vop_getpages
ffs_getpages
vop_getpages
vnode_pager_getpages
vm_fault_object
vm_fault_object_page
elf_load_section
exec_elf_imgact
kern_execve
sys_execve
start_init
fork_trampoline
Index: ata-dma.c
===================================================================
RCS file: /home/source/dragonfly/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 18 Jul 2007 06:53:51 -0000
@@ -75,7 +75,7 @@ ata_dmainit(device_t dev)
ch->dma->alignment = 2;
ch->dma->boundary = 128 * DEV_BSIZE;
ch->dma->segsize = 128 * DEV_BSIZE;
- ch->dma->max_iosize = 128 * DEV_BSIZE;
+ ch->dma->max_iosize = 64 * DEV_BSIZE;
ch->dma->max_address = BUS_SPACE_MAXADDR_32BIT;
}
@@ -213,6 +213,7 @@ ata_dmasetprd(void *xsc, bus_dma_segment
args->nsegs = nsegs;
}
+void db_print_backtrace(void);
static int
ata_dmaload(device_t dev, caddr_t data, int32_t count, int dir,
void *addr, int *entries)
@@ -237,6 +238,7 @@ ata_dmaload(device_t dev, caddr_t data,
if (count > ch->dma->max_iosize) {
device_printf(dev, "FAILURE - oversized DMA transfer attempt %d > %d\n",
count, ch->dma->max_iosize);
+ db_print_backtrace();
return EIO;
}
[
Date Prev][
Date Next]
[
Thread Prev][
Thread Next]
[
Date Index][
Thread Index]