From owner-freebsd-current Wed Feb 3 11:32:41 1999 Return-Path: Received: (from majordom@localhost) by hub.freebsd.org (8.8.8/8.8.8) id LAA07834 for freebsd-current-outgoing; Wed, 3 Feb 1999 11:32:41 -0800 (PST) (envelope-from owner-freebsd-current@FreeBSD.ORG) Received: from lamb.sas.com (lamb.sas.com [192.35.83.8]) by hub.freebsd.org (8.8.8/8.8.8) with ESMTP id LAA07815 for ; Wed, 3 Feb 1999 11:32:32 -0800 (PST) (envelope-from brdean@unx.sas.com) Received: from mozart (mozart.unx.sas.com [192.58.184.8]) by lamb.sas.com (8.9.1/8.9.1) with SMTP id OAA06224 for ; Wed, 3 Feb 1999 14:32:26 -0500 (EST) Received: from dean.pc.sas.com by mozart (5.65c/SAS/Domains/5-6-90) id AA13564; Wed, 3 Feb 1999 14:32:24 -0500 Received: (from brdean@localhost) by dean.pc.sas.com (8.9.1/8.9.1) id OAA01903; Wed, 3 Feb 1999 14:32:24 -0500 (EST) (envelope-from brdean) From: Brian Dean Message-Id: <199902031932.OAA01903@dean.pc.sas.com> Subject: aio_read panics SMP kernel To: freebsd-current@FreeBSD.ORG Date: Wed, 3 Feb 1999 14:32:24 -0500 (EST) X-Mailer: ELM [version 2.4ME+ PL43 (25)] Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: owner-freebsd-current@FreeBSD.ORG Precedence: bulk X-Loop: FreeBSD.ORG Hi, I'm using a dual 350MHz Dell Precision 410 with 4.0-19990130-SNAP (SMP enabled) to prototype a program that uses asynchronous read and write (aio_read() and aio_write()), and found that the following simple and not very useful program (it's for demonstration purposes only!) causes the system to do one of three things: 1) panic - "page fault in the kernel" ... I don't have any other specifics, I will follow up with the details provided by the console as soon as I can make this occur again (I should have written it down the first time). 2) reset - no panic or anything, just a system reset and subsequent reboot 3) hang - everything totally unresponsive, machine does not respond to pings or anything else, no keyboard response. Below, please find the output of 'mptable' for the SMP experts and the program that I used to cause the panic. Any help on fixing this and/or suggestions on what I might be doing wrong are much appreciated. Thanks, -Brian -- Brian Dean Process Engineering brdean@unx.sas.com Following is the output of 'mpinfo' on this machine: [root@mrose]:/brdean- mptable =============================================================================== MPTable, version 2.0.15 ------------------------------------------------------------------------------- MP Floating Pointer Structure: location: BIOS physical address: 0x000fe710 signature: '_MP_' length: 16 bytes version: 1.4 checksum: 0x91 mode: Virtual Wire ------------------------------------------------------------------------------- MP Config Table Header: physical address: 0x000f0000 signature: 'PCMP' base table length: 468 version: 1.4 checksum: 0x33 OEM ID: 'DELL ' Product ID: 'WS 410 ' OEM table pointer: 0x00000000 OEM table size: 0 entry count: 50 local APIC address: 0xfee00000 extended table length: 0 extended table checksum: 0 ------------------------------------------------------------------------------- MP Config Base Table Entries: -- Processors: APIC ID Version State Family Model Step Flags 0 0x11 BSP, usable 6 5 2 0x183fbff 1 0x11 AP, usable 6 5 2 0x183fbff -- Bus: Bus ID Type 0 PCI 1 PCI 2 PCI 3 ISA -- I/O APICs: APIC ID Version State Address 2 0x11 usable 0xfec00000 -- I/O Ints: Type Polarity Trigger Bus ID IRQ APIC ID PIN# ExtINT active-hi edge 3 0 2 0 INT conforms conforms 3 1 2 1 INT conforms conforms 3 0 2 2 INT conforms conforms 3 3 2 3 INT conforms conforms 3 4 2 4 INT conforms conforms 3 5 2 5 INT conforms conforms 3 6 2 6 INT conforms conforms 3 7 2 7 INT conforms conforms 3 8 2 8 INT conforms conforms 3 9 2 9 INT conforms conforms 3 10 2 10 INT conforms conforms 3 11 2 11 INT conforms conforms 3 12 2 12 INT conforms conforms 3 14 2 14 INT conforms conforms 3 15 2 15 INT conforms conforms 0 13:A 2 16 INT conforms conforms 0 14:D 2 16 INT conforms conforms 0 16:B 2 16 INT conforms conforms 1 0:A 2 16 INT conforms conforms 2 6:C 2 16 INT conforms conforms 2 9:D 2 16 INT conforms conforms 0 13:B 2 17 INT conforms conforms 0 14:A 2 17 INT conforms conforms 0 16:C 2 17 INT conforms conforms 1 0:B 2 17 INT conforms conforms 2 6:D 2 17 INT conforms conforms 2 9:A 2 17 INT conforms conforms 0 13:C 2 18 INT conforms conforms 0 14:B 2 18 INT conforms conforms 0 16:D 2 18 INT conforms conforms 2 6:A 2 18 INT conforms conforms 2 9:B 2 18 INT conforms conforms 2 10:A 2 18 INT conforms conforms 2 14:A 2 18 INT conforms conforms 0 7:D 2 19 INT conforms conforms 0 13:D 2 19 INT conforms conforms 0 14:C 2 19 INT conforms conforms 0 16:A 2 19 INT conforms conforms 0 17:A 2 19 INT conforms conforms 2 6:B 2 19 INT conforms conforms 2 9:C 2 19 -- Local Ints: Type Polarity Trigger Bus ID IRQ APIC ID PIN# ExtINT active-hi edge 3 0 255 0 NMI active-hi edge 3 0 255 1 ------------------------------------------------------------------------------- # SMP kernel config file options: # Required: options SMP # Symmetric MultiProcessor Kernel options APIC_IO # Symmetric (APIC) I/O # Optional (built-in defaults will work in most cases): #options NCPU=2 # number of CPUs #options NBUS=4 # number of busses #options NAPIC=1 # number of IO APICs #options NINTR=41 # number of INTs =============================================================================== And here is the simple program to demonstrate the panic: #include #include #include #include #include #include #define BUFLEN 4096 char * progname; int main ( int argc, char * argv [] ) { int rc, fd; char buf [ BUFLEN ]; char * fname; int done; aiocb_t cb = { 0 }; long long unsigned int pollcount; progname = rindex ( argv[0], '/' ); if (progname == NULL) progname = argv[0]; else progname++; if (argc != 2) { fprintf ( stderr, "Usage: %s InputFile\n", progname ); exit(1); } fname = argv[1]; fd = open ( fname, O_RDONLY ); if (fd < 0) { fprintf ( stderr, "%s: can't open %s for reading: %s\n", progname, fname, strerror(errno) ); exit(1); } cb.aio_fildes = fd; cb.aio_offset = 0; cb.aio_buf = buf; cb.aio_nbytes = BUFLEN; done = 0; while (!done) { rc = aio_read ( &cb ); if (rc) { fprintf ( stderr, "%s: aio_read(): %s\n", progname, strerror(errno) ); exit(1); } fprintf ( stderr, "%s: aio_read() OK, polling for completion ...\n", progname ); pollcount = 0; while (aio_error(&cb)==EINPROGRESS) pollcount++; fprintf ( stderr, "%s: polling completed, count = %qu\n", progname, pollcount ); rc = aio_return ( &cb ); if (rc < 0) { fprintf ( stderr, "%s: aio_return([read]): %s\n", progname, strerror(errno) ); exit(1); } else if (rc == 0) { done = 1; } else { cb.aio_offset += rc; } } return 0; } To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message