NetBSD Problem Report #42545
From mrg@eterna.com.au Wed Dec 30 08:17:10 2009
Return-Path: <mrg@eterna.com.au>
Received: from mail.netbsd.org (mail.netbsd.org [204.152.190.11])
by www.NetBSD.org (Postfix) with ESMTP id 0A1EE63B844
for <gnats-bugs@gnats.NetBSD.org>; Wed, 30 Dec 2009 08:17:10 +0000 (UTC)
Message-Id: <20091230081706.AC5C737533@splode.eterna.com.au>
Date: Wed, 30 Dec 2009 19:17:06 +1100 (EST)
From: mrg@eterna.com.au
Reply-To: mrg@eterna.com.au
To: gnats-bugs@gnats.NetBSD.org
Subject: pcictl(8) can cause sb2500 to reset
X-Send-Pr-Version: 3.95
>Number: 42545
>Category: port-sparc64
>Synopsis: pcictl(8) can cause sb2500 to reset
>Confidential: no
>Severity: serious
>Priority: high
>Responsible: port-sparc64-maintainer
>State: closed
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Wed Dec 30 08:20:00 +0000 2009
>Closed-Date: Wed Dec 30 20:27:48 +0000 2009
>Last-Modified: Wed Dec 30 20:27:48 +0000 2009
>Originator: matthew green
>Release: NetBSD 5.99.22
>Organization:
people's front against (bozotic) www (softwar foundation)
>Environment:
System: NetBSD phoenix.eterna23.net 5.99.22 NetBSD 5.99.22 (SCHIZO) #138: Sun Dec 20 09:08:33 PST 2009 mrg@space-bird.eterna23.net:/var/obj/sparc64/usr/src/sys/arch/sparc64/compile/SCHIZO sparc64
Architecture: sparc64
Machine: sparc64
>Description:
running "pcictl" on my SB2500 causes it to reset. i don't know why yet.
someone should find out..
trace back looks like:
data error type 32 sfsr=118018 sfva=ffffffffffffaf70 afsr=10080004000000 afva=7ce00000800 tf=0xdb3f6a0
ata fault: pc=13aa5a0 addr=ffffffffffffaf70 sfsr=0x118018<ASI=0x11,PRIV,W>
kernel trap 32: data access error
Stopped in pid 1097.1 (pcictl) at netbsd:schizo_conf_read+0x20: jmpl [%o7 + 0x8], %g0
db{1}> bt
cdev_ioctl(6, c0145002, db3fc80, 1, dc4db40, ffffffffffffb43e) at netbsd:cdev_ioctl+0x70
VOP_IOCTL(d9b9e20, c0145002, db3fc80, 1, dc70f00, ffffffffffffb444) at netbsd:VOP_IOCTL+0x44
vn_ioctl(dbd8140, c0145002, db3fc80, db3c000, ffffffffffffff8e, 62726964676529) at netbsd:vn_ioctl+0x44
sys_ioctl(0, db3fdc0, db3fe00, 1ec4bf, a, 1842d98) at netbsd:sys_ioctl+0xbc
syscall_plain(db3fed0, db3ff58, 40943288, 4094328c, 0, db3fdc0) at netbsd:syscall_plain+0x138
?(3, c0145002, ffffffffffffb50c, ffffffffffffb437, 600, ffffffffffffb518) at 0x1008c28
>How-To-Repeat:
>Fix:
>Release-Note:
>Audit-Trail:
From: Takeshi Nakayama <tn@catvmics.ne.jp>
To: gnats-bugs@NetBSD.org, mrg@eterna.com.au
Cc: port-sparc64-maintainer@netbsd.org, gnats-admin@netbsd.org,
netbsd-bugs@netbsd.org
Subject: Re: port-sparc64/42545: pcictl(8) can cause sb2500 to reset
Date: Thu, 31 Dec 2009 01:41:43 +0900 (JST)
Hello,
Could the attached patch fix the problem?
It seems that accessing to a PCI configration space where devices
are unavailable causes data_access_error trap. We need to check a
validity of OF node embeded in pcitag to avoid the trap (see
pci_make_tag() in pci_machdep.c, psycho_pci_conf_read() and
psycho_pci_conf_write() in psycho.c).
-- Takeshi Nakayama
Index: schizo.c
===================================================================
RCS file: /cvsroot/src/sys/arch/sparc64/dev/schizo.c,v
retrieving revision 1.10
diff -u -d -r1.10 schizo.c
--- schizo.c 30 Nov 2009 05:00:58 -0000 1.10
+++ schizo.c 30 Dec 2009 16:16:16 -0000
@@ -448,11 +448,12 @@
schizo_conf_read(pci_chipset_tag_t pc, pcitag_t tag, int reg)
{
struct schizo_pbm *sp = pc->cookie;
- pcireg_t val;
+ pcireg_t val = (pcireg_t)~0;
DPRINTF(SDB_CONF, ("%s: tag %lx reg %x ", __func__, (long)tag, reg));
- val = bus_space_read_4(sp->sp_cfgt, sp->sp_cfgh,
- PCITAG_OFFSET(tag) + reg);
+ if (PCITAG_NODE(tag) != -1)
+ val = bus_space_read_4(sp->sp_cfgt, sp->sp_cfgh,
+ PCITAG_OFFSET(tag) + reg);
DPRINTF(SDB_CONF, (" returning %08x\n", (u_int)val));
return (val);
}
@@ -464,6 +465,13 @@
DPRINTF(SDB_CONF, ("%s: tag %lx; reg %x; data %x", __func__,
(long)tag, reg, (int)data));
+
+ /* If we don't know it, just punt it. */
+ if (PCITAG_NODE(tag) == -1) {
+ DPRINTF(SDB_CONF, (" .. bad addr\n"));
+ return;
+ }
+
bus_space_write_4(sp->sp_cfgt, sp->sp_cfgh,
PCITAG_OFFSET(tag) + reg, data);
DPRINTF(SDB_CONF, (" .. done\n"));
From: matthew green <mrg@eterna.com.au>
To: Takeshi Nakayama <tn@catvmics.ne.jp>
Cc: port-sparc64-maintainer@netbsd.org, gnats-admin@netbsd.org,
netbsd-bugs@netbsd.org, gnats-bugs@NetBSD.org
Subject: re: port-sparc64/42545: pcictl(8) can cause sb2500 to reset
Date: Thu, 31 Dec 2009 06:48:27 +1100
thanks! that patch works just fine. thanks for looking, i'd mostly
meant this PR to be my own reminder :)
i'll let you commit the change.
thanks again.
.mrg.
From: Takeshi Nakayama <nakayama@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc:
Subject: PR/42545 CVS commit: src/sys/arch/sparc64/dev
Date: Wed, 30 Dec 2009 20:20:56 +0000
Module Name: src
Committed By: nakayama
Date: Wed Dec 30 20:20:56 UTC 2009
Modified Files:
src/sys/arch/sparc64/dev: schizo.c
Log Message:
It seems that accessing to a PCI configration space where devices
are unavailable causes data_access_error trap. We need to check a
validity of OF node embeded in pcitag to avoid the trap.
Fixes PR port-sparc64/42545.
To generate a diff of this commit:
cvs rdiff -u -r1.10 -r1.11 src/sys/arch/sparc64/dev/schizo.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
State-Changed-From-To: open->closed
State-Changed-By: nakayama@NetBSD.org
State-Changed-When: Wed, 30 Dec 2009 20:27:48 +0000
State-Changed-Why:
Fixed in rev 1.11 of schizo.c.
>Unformatted:
(Contact us)
$NetBSD: query-full-pr,v 1.39 2013/11/01 18:47:49 spz Exp $
$NetBSD: gnats_config.sh,v 1.8 2006/05/07 09:23:38 tsutsui Exp $
Copyright © 1994-2007
The NetBSD Foundation, Inc. ALL RIGHTS RESERVED.