Date: Fri, 29 Sep 2000 22:41:54 -0700 (PDT) From: mzaki@e-mail.ne.jp To: freebsd-gnats-submit@FreeBSD.org Subject: i386/21657: nexus without initialization causes booting failed Message-ID: <20000930054154.23B7137B503@hub.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 21657
>Category: i386
>Synopsis: nexus without initialization causes booting failed
>Confidential: no
>Severity: critical
>Priority: high
>Responsible: freebsd-bugs
>State: open
>Quarter:
>Keywords:
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Fri Sep 29 22:50:01 PDT 2000
>Closed-Date:
>Last-Modified:
>Originator: Motomichi Matsuzaki
>Release: FreeBSD-current (Sep 29 2000)
>Organization:
>Environment:
FreeBSD localhost 5.0-CURRENT FreeBSD 5.0-CURRENT #7: Sat Sep 30 14:01:29 JST 2000
root@localhost:/usr/src/sys/compile/LIBRETTO i386
>Description:
I've updated my laptop (TOSHIBA Libretto) to -current (21:00 29 Sep
GMT) from of 28 Aug, then it wouldn't boot because trap 12 happened.
The boottime messages were shown that:
:
:
npx0: INT 16 interface
isa0: <ISA bus>
^
normally is succeeded "on motherboard" but isn't
And the trap 12 (page fault) occured at:
(sys/i386/i386/nexus.c)
static int
nexus_print_all_resources(device_t dev)
{
struct nexus_device *ndev = DEVTONX(dev);
struct resource_list *rl = &ndev->nx_resources;
~~~~~~~
This dereference (ndev was NULL!!)
This 'struct nexus_device *ndev' is IVAR of nexus,
and initialized in nexus_add_child(),
but never called this function in my laptop.
>How-To-Repeat:
>Fix:
In nexus_attach(), ISA bus directly binded to nexus is
connected via calling device_add_child(),
but this is probably WRONG. This causes uninitialized IVAR of nexus
because of skipping nexus_add_child().
I changed this to calling nexus_add_child() directly,
and my laptop successfully booted.
--- /usr/src/sys/i386/i386/nexus.c Fri Sep 29 06:02:31 2000
+++ nexus.c Sat Sep 30 14:41:11 2000
@@ -259,7 +259,7 @@
}
#endif
if (!devclass_get_device(devclass_find("isa"), 0)) {
- child = device_add_child(dev, "isa", 0);
+ child = nexus_add_child(dev, 0, "isa", 0);
if (child == NULL)
panic("nexus_attach isa");
device_probe_and_attach(child);
>Release-Note:
>Audit-Trail:
>Unformatted:
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-bugs" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20000930054154.23B7137B503>
