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:

NetBSD Home
NetBSD PR Database Search

(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.