[patch] de(4) has not worked on 8-current since Feb 13

From: WATANABE Kazuhiro <CQG00620_at_nifty.ne.jp>
Date: Wed, 10 Dec 2008 21:56:25 +0900
Hi, all.

My de(4) NICs has not worked on 8-current since Feb 13.  


I've tried to checkout the 8-current source tree from the CVS
repository with a number of "-D" options and re-compiled it.

As a result a kernel which is made from sources with "cvs checkout -D
'2008-02-12 00:00 UTC' src" works well with the de(4) NICs.  But with
'2008-02-13 00:00 UTC' and the later date, the kernel cannot send data
from the NICs.  Receiving data are fine.  For example:

$ scp other_host:/boot/kernel/kernel .
Password:
kernel                                        100% 4717KB 943.5KB/s   00:05    
$ scp /boot/kernel/kernel other_host:
Password:
kernel                                          1%  192KB   0.0KB/s - stalled -^CKilled by signal 2.
$ 

The latest 8-current has the same problem.  And these NICs works well
on 7.0-RELEASE.


To resolve the problem, I have to restore a change which was commited
to sys/i386/i386/busdma_machdep.c revision 1.91.

http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/i386/i386/busdma_machdep.c#rev1.91
Here is a patch.  But I don't know the meaning of this :-(

--- sys/i386/i386/busdma_machdep.c.orig	2008-12-08 20:33:16.000000000 +0900
+++ sys/i386/i386/busdma_machdep.c	2008-12-08 21:24:43.000000000 +0900
_at__at_ -585,7 +585,7 _at__at_
 		 * Count the number of bounce pages
 		 * needed in order to complete this transfer
 		 */
-		vaddr = (vm_offset_t)buf;
+		vaddr = trunc_page((vm_offset_t)buf);
 		vendaddr = (vm_offset_t)buf + buflen;
 
 		while (vaddr < vendaddr) {
_at__at_ -594,7 +594,7 _at__at_
 			    run_filter(dmat, paddr) != 0) {
 				map->pagesneeded++;
 			}
-			vaddr += (PAGE_SIZE - ((vm_offset_t)vaddr & PAGE_MASK));
+			vaddr += PAGE_SIZE;
 		}
 		CTR1(KTR_BUSDMA, "pagesneeded= %d\n", map->pagesneeded);
 	}


I've tested the patch on the latest 8-current with the following NICs.

 * SMC EtherPower10/100

$ uname -a
FreeBSD aries.sign.local 8.0-CURRENT FreeBSD 8.0-CURRENT #4: Tue Dec  9 15:03:24 JST 2008     nabe_at_capricorn:/FreeBSD/obj/pc98/HEAD/pc98/FreeBSD/HEAD/src/sys/LEFTEYE  pc98
$ dmesg | grep '^de[0-9]'
de0: <Digital 21140A Fast Ethernet> port 0x6000-0x607f mem 0x20410000-0x2041007f irq 3 at device 13.0 on pci0
de0: SMC 9332BDT 21140A [10-100Mb/s] pass 2.0
de0: WARNING: using obsoleted if_watchdog interface
de0: Ethernet address: 00:00:c0:xx:xx:xx
de0: [ITHREAD]

 * Corega FastEther PCI-TX

$ uname -a
FreeBSD scorpio.sign.local 8.0-CURRENT FreeBSD 8.0-CURRENT #4: Tue Dec  9 15:01:10 JST 2008     nabe_at_capricorn:/FreeBSD/obj/i386/HEAD/FreeBSD/HEAD/src/sys/GENERIC  i386
$ dmesg | grep '^de[0-9]'
de0: <Digital 21140A Fast Ethernet> port 0xe000-0xe07f mem 0xd9001000-0xd900107f irq 11 at device 15.0 on pci0
de0: 21140A [10-100Mb/s] pass 2.2
de0: WARNING: using obsoleted if_watchdog interface
de0: Ethernet address: 00:00:f4:xx:xx:xx
de0: [ITHREAD]

---
WATANABE Kazuhiro (CQG00620_at_nifty.ne.jp)
Received on Wed Dec 10 2008 - 11:56:28 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:39:38 UTC