panic due to 'ds_len > SBP_SEG_MAX'

Pyun YongHyeon pyunyh at gmail.com
Wed Jun 20 01:12:21 UTC 2007


On Tue, Jun 19, 2007 at 04:51:20PM -0400, Garance A Drosihn wrote:
 > I have freebsd 7.x running on a PowerPC Mac-Mini.  The hard disk in
 > a mac mini is rather slow, so I have freebsd installed on an external
 > firewire drive.  The way it's setup, all the filesystems (including
 > '/') are on that external firewire drive.  This has been working okay
 > for awhile.
 > 
 > This past Sunday I updated my 7.x source tree and compiled everything.
 > When I tried to boot up with the new kernel, I hit a panic:
 > 
 >   trying to mount root from ufs:/dev/da0s9
 >   panic: ds_len > SBP_SEG_MAX, fix busdma code
 >   KDB: enter: panic
 > 
 > At the time I was already running late for something else, so I
 > just rebooted into the old kernel and went back to running that.
 > The older kernel was compiled on May 30th.  The check I ran into
 > is in sys/dev/firewire/sbp.c , and has been there for years, so
 > it isn't a new check.
 > 
 > Has anyone else seen this?
 > 

I have no experience with sbp(4) but I guess _bus_dmamap_loader_buffer
didn't honor specified DMA tag.
How about attached one?

-- 
Regards,
Pyun YongHyeon
-------------- next part --------------
Index: busdma_machdep.c
===================================================================
RCS file: /home/ncvs/src/sys/powerpc/powerpc/busdma_machdep.c,v
retrieving revision 1.26
diff -u -r1.26 busdma_machdep.c
--- busdma_machdep.c	8 Jun 2007 04:46:50 -0000	1.26
+++ busdma_machdep.c	20 Jun 2007 00:39:17 -0000
@@ -418,6 +418,8 @@
 		 * Compute the segment size, and adjust counts.
 		 */
 		sgsize = PAGE_SIZE - ((u_long)curaddr & PAGE_MASK);
+		if (sgsize > dmat->maxsegsz)
+			sgsize = dmat->maxsegsz;
 		if (buflen < sgsize)
 			sgsize = buflen;
 


More information about the freebsd-ppc mailing list