From owner-freebsd-bugs Sun Apr 9 16:31:29 1995 Return-Path: bugs-owner Received: (from majordom@localhost) by freefall.cdrom.com (8.6.10/8.6.6) id QAA20339 for bugs-outgoing; Sun, 9 Apr 1995 16:31:29 -0700 Received: from todonix.ping.de (root@todonix.ping.de [193.100.14.43]) by freefall.cdrom.com (8.6.10/8.6.6) with SMTP id QAA20333 for ; Sun, 9 Apr 1995 16:31:15 -0700 Received: by todonix.ping.de (Smail3.1.28.1 #1) id m0ppmUx-000GnLC; Sun, 10 Apr 94 01:31 MET DST Message-Id: From: jan@todonix.ping.de (Jan Wedekind) Subject: Cyclades driver bug report To: bugs@FreeBSD.org Date: Sun, 10 Apr 1994 01:31:34 +0200 (MET DST) X-Mailer: ELM [version 2.4 PL23] Content-Type: text Content-Length: 2760 Sender: bugs-owner@FreeBSD.org Precedence: bulk Hello, we bought and installed 2 Cyclades Cyclom 8Yo cards, using FreeBSD-2.0 SNAP 950322. we found the following problems: a) the driver only works for one installed card because of global variables for the IO-Memory and the internal structure (is there anybody else working on a further version ?) b) the driver itself (or some other parts of the kernel) are buggy because of the following reason: configuration: (with options for KTRACE, DDB and DIAGNOSTIC) device cy0 at isa? tty iomem 0xd4000 iosiz 0x2000 vector cyintr (so the cyclom_base has been set to 0xf00d4000) the kernel found the card, but when trying to use it, to configure a modem with kermit, we got a kernel trap, reason 'page not found': virtaddr 0x4 reason / type supervisor read, page not present at: 0x8:f01a8dd9 base 0, limit 0xffff, type 0x1b DPL 0, ... type 12 trap at _cytimeout+0x2d movl 0x4(%ecx), (%esi) some of the 'show reg' output: cs mmclose+0x4 ds isadmarangecheck+0x50 cax cy_tty+0x78 we testet in two computer's, a PCI 486DX4-100 with an ASUS SP3G board, and a 486DX2-66 with VL-Bus architecture. Both showed the same results. Any suggestions ? Thanks, Jan PS: the error occurs at the following code (see /sys/i386/isa/cy.c) /* upper level character processing routine */ void cytimeout(void *ptr) { int unit; timeout_scheduled = 0; #ifdef CyDebug cy_timeouts++; #endif /* check each port in turn */ for (unit = 0; unit < NCY*PORTS_PER_CYCLOM; unit++) { struct cy *ip = info[unit]; #ifndef TxBuffer struct tty *tp = ip->tty; #endif **** i guess here the trap occurs (see assembler input below) this would would mean, that the info struct hasn't been initialized! *** /* ignore anything that is not open */ if (!ip->tty) continue; /* * any received chars to handle? (doesn't matter if intr routine * kicks in while we're testing this) */ if (ip->rx_buf->free != CY_RX_BUF_SIZE) service_upper_rx(unit); [continued] the assembler input: .globl _cytimeout .type _cytimeout,@function _cytimeout: pushl %ebp movl %esp,%ebp subl $24,%esp pushl %edi pushl %esi pushl %ebx movb $0,_timeout_scheduled incl _cy_timeouts movl $0,-8(%ebp) .align 2,0x90 L157: movl -8(%ebp),%ecx movl _info(,%ecx,4),%ecx movl %ecx,-12(%ebp) --> movl 4(%ecx),%esi <-- here the page not present trap occurs testl %esi,%esi je L156 movl 48(%ecx),%eax cmpl $256,4(%eax) je L159 movl %esi,-16(%ebp) movl %eax,-20(%ebp) #APP cli #NO_APP movl 8(%eax),%eax movl %eax,48(%ecx) #APP sti #NO_APP -- PING e.V. Jan Wedekind (Kassenwart) jan@ping.de Emil-Figge-Str. 85 Lindemannstr. 12 kasse@ping.de 44227 Dortmund 44137 Dortmund vorstand@ping.de Tel.: noch nicht bek. Tel.: +49 (231) 13 44 04 info@ping.de