NetBSD Problem Report #40029
From www@NetBSD.org Tue Nov 25 22:15:07 2008
Return-Path: <www@NetBSD.org>
Received: from mail.netbsd.org (mail.netbsd.org [204.152.190.11])
by narn.NetBSD.org (Postfix) with ESMTP id 4AAD063BE63
for <gnats-bugs@gnats.netbsd.org>; Tue, 25 Nov 2008 22:15:07 +0000 (UTC)
Message-Id: <20081125215608.6387A63BD2D@narn.NetBSD.org>
Date: Tue, 25 Nov 2008 21:56:08 +0000 (UTC)
From: svs@ropnet.ru
Reply-To: svs@ropnet.ru
To: gnats-bugs@NetBSD.org
Subject: PCI Matrox G450 vs. mgadrm(4) -> panic
X-Send-Pr-Version: www-1.0
>Number: 40029
>Category: kern
>Synopsis: PCI Matrox G450 vs. mgadrm(4) -> panic
>Confidential: no
>Severity: non-critical
>Priority: low
>Responsible: kern-bug-people
>State: closed
>Class: sw-bug
>Submitter-Id: net
>Arrival-Date: Tue Nov 25 22:20:00 +0000 2008
>Closed-Date: Fri Nov 12 02:19:26 +0000 2010
>Last-Modified: Fri Nov 12 02:19:26 +0000 2010
>Originator: Sergey Svishchev
>Release: amd64 5.99.02
>Organization:
>Environment:
>Description:
As stated in sys/dev/pci/drm/mga_drv.c, PCI G450's are not supported by the driver:
mgadrm0 at vga0: Matrox G400/G450 (AGP) (unit 0)
error: [drm:pid0:drm_load] *ERROR* Card isn't AGP, or couldn't initialize AGP.
Still, running 'sysctl hw.dri' on such machine should not lead to panic:
uvm_fault(0xffff80004740a2e8, 0x0, 1) -> e
fatal page fault in supervisor mode
trap type 6 ...
kernel: page fault trap, code=0
trace:
turnstile_block()
mutex_vector_enter()
drm_name_info() at netbsd:drm_name_info+0xe3
sysctl_dispatch()
sys___sysctl()
syscall()
drm_name_info+0xe3 is line 145 in sys/dev/drm/drm_sysctl.c rev 1.3:
if (dev->unique) {
snprintf(buf, sizeof(buf), " %s", dev->unique);
hasunique = 1;
}
>How-To-Repeat:
>Fix:
>Release-Note:
>Audit-Trail:
State-Changed-From-To: open->feedback
State-Changed-By: mrg@NetBSD.org
State-Changed-When: Fri, 19 Jun 2009 21:26:56 +0000
State-Changed-Why:
can you confirm if this is fixed in -current?
thanks.
State-Changed-From-To: feedback->closed
State-Changed-By: mrg@NetBSD.org
State-Changed-When: Thu, 24 Sep 2009 19:55:05 +0000
State-Changed-Why:
feedback time out, mgadrm confirmed working elsewhere.
From: Sergey Svishchev <svs@ropnet.ru>
To: gnats-bugs@NetBSD.org
Cc:
Subject: Re: kern/40029 (PCI Matrox G450 vs. mgadrm(4) -> panic)
Date: Tue, 19 Oct 2010 01:56:05 +0400
On Fri, Jun 19, 2009 at 09:27:02PM +0000, mrg@NetBSD.org wrote:
>Synopsis: PCI Matrox G450 vs. mgadrm(4) -> panic
>
>State-Changed-From-To: open->feedback
>State-Changed-By: mrg@NetBSD.org
>State-Changed-When: Fri, 19 Jun 2009 21:26:56 +0000
>State-Changed-Why:
>can you confirm if this is fixed in -current?
No, it's not fixed (tried 5.99.39).
--
Sergey Svishchev
State-Changed-From-To: closed->open
State-Changed-By: mrg@NetBSD.org
State-Changed-When: Tue, 19 Oct 2010 00:12:13 +0000
State-Changed-Why:
OK, i'll look deeper. i guess it has to do with partially attaching.
From: matthew green <mrg@eterna.com.au>
To: gnats-bugs@NetBSD.org
Cc: kern-bug-people@netbsd.org, netbsd-bugs@netbsd.org,
gnats-admin@netbsd.org, svs@ropnet.ru
Subject: re: kern/40029 (PCI Matrox G450 vs. mgadrm(4) -> panic)
Date: Tue, 19 Oct 2010 12:23:05 +1100
we don't call the function to remove sysctl on error. i'll
see about replicating the failure mode and testing the obvious
fix..
.mrg.
Index: drm_drv.c
===================================================================
RCS file: /cvsroot/src/sys/external/bsd/drm/dist/bsd-core/drm_drv.c,v
retrieving revision 1.18
diff -p -r1.18 drm_drv.c
*** drm_drv.c 6 Dec 2009 22:51:25 -0000 1.18
--- drm_drv.c 19 Oct 2010 01:22:44 -0000
*************** static int drm_load(struct drm_device *d
*** 659,667 ****
return 0;
error:
- #if defined(__FreeBSD__)
drm_sysctl_cleanup(dev);
- #endif
DRM_LOCK();
drm_lastclose(dev);
DRM_UNLOCK();
--- 659,665 ----
*************** static void drm_unload(struct drm_device
*** 685,692 ****
DRM_DEBUG("\n");
- #if defined(__FreeBSD__)
drm_sysctl_cleanup(dev);
destroy_dev(dev->devnode);
#endif
--- 683,690 ----
DRM_DEBUG("\n");
drm_sysctl_cleanup(dev);
+ #if defined(__FreeBSD__)
destroy_dev(dev->devnode);
#endif
State-Changed-From-To: open->feedback
State-Changed-By: mrg@NetBSD.org
State-Changed-When: Sat, 06 Nov 2010 22:07:20 +0000
State-Changed-Why:
can you see if sys/external/bsd/drm/dist/bsd-core/drm_drv.c 1.19 fixes
this problem for you? thanks.
From: "matthew green" <mrg@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc:
Subject: PR/40029 CVS commit: src/sys/external/bsd/drm/dist
Date: Sat, 6 Nov 2010 22:06:11 +0000
Module Name: src
Committed By: mrg
Date: Sat Nov 6 22:06:10 UTC 2010
Modified Files:
src/sys/external/bsd/drm/dist/bsd-core: drm_drv.c
src/sys/external/bsd/drm/dist/shared-core: radeon_cp.c radeon_state.c
Log Message:
call the sysctl destroy functions upon failure and unload, which
should fix PR#40029. while there, fix the radeon unload, which
was improperly matching mutex init/destroy operations and leading
to trying to destroy lock that was never initialised.
To generate a diff of this commit:
cvs rdiff -u -r1.18 -r1.19 src/sys/external/bsd/drm/dist/bsd-core/drm_drv.c
cvs rdiff -u -r1.8 -r1.9 \
src/sys/external/bsd/drm/dist/shared-core/radeon_cp.c
cvs rdiff -u -r1.5 -r1.6 \
src/sys/external/bsd/drm/dist/shared-core/radeon_state.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
From: Sergey Svishchev <svs@ropnet.ru>
To: gnats-bugs@NetBSD.org
Cc:
Subject: Re: kern/40029 (PCI Matrox G450 vs. mgadrm(4) -> panic)
Date: Wed, 10 Nov 2010 04:02:32 +0300
On Sat, Nov 06, 2010 at 10:07:21PM +0000, mrg@NetBSD.org wrote:
>Synopsis: PCI Matrox G450 vs. mgadrm(4) -> panic
>
>State-Changed-From-To: open->feedback
>State-Changed-By: mrg@NetBSD.org
>State-Changed-When: Sat, 06 Nov 2010 22:07:20 +0000
>State-Changed-Why:
>can you see if sys/external/bsd/drm/dist/bsd-core/drm_drv.c 1.19 fixes
>this problem for you? thanks.
No, still panics:
#6 0xffffffff806e9247 in trap (frame=0xffff800046967870) at /vol/2/s/src/sys/arch/amd64/amd64/trap.c:287
#7 0xffffffff80101081 in calltrap ()
#8 0xffffffff80498450 in turnstile_block (ts=0xffffffff, q=<value optimized out>, obj=<value optimized out>, sobj=0xffffffff80cf9a80)
at /vol/2/s/src/sys/kern/kern_turnstile.c:298
#9 0xffffffff8047afa0 in mutex_vector_enter (mtx=0xffff800045d43450) at /vol/2/s/src/sys/kern/kern_mutex.c:687
#10 0xffffffff802603d9 in drm_name_info (name=<value optimized out>, namelen=<value optimized out>, oldp=0x7f7fffffbfe0,
oldlenp=0xffff800046967be8, newp=<value optimized out>, newlen=<value optimized out>, oname=0xffff800046967bb0, l=0xffff80004698d9c0,
rnode=0xffff800002117800) at /vol/2/s/src/sys/external/bsd/drm/dist/bsd-core/drm_sysctl.c:212
#11 0xffffffff8048f78b in sysctl_dispatch (name=0xffff800046967bb0, namelen=0, oldp=0x7f7fffffbfe0, oldlenp=0xffff800046967be8, newp=0x0,
newlen=0, oname=0xffff800046967bb0, l=0xffff80004698d9c0, rnode=0xffff800002117800) at /vol/2/s/src/sys/kern/kern_sysctl.c:451
#12 0xffffffff8048fa57 in sys___sysctl (l=0xffff80004698d9c0, uap=0xffff800046967c80, retval=<value optimized out>)
at /vol/2/s/src/sys/kern/kern_sysctl.c:307
#13 0xffffffff806c18c5 in syscall (frame=0xffff800046967c80) at /vol/2/s/src/sys/sys/syscallvar.h:61
dmesg:
mgadrm0 at vga0: Matrox G400/G450 (AGP)
error: [drm:pid0:drm_load] *ERROR* Card isn't AGP, or couldn't initialize AGP.
--
Sergey Svishchev
State-Changed-From-To: feedback->open
State-Changed-By: mrg@NetBSD.org
State-Changed-When: Wed, 10 Nov 2010 02:08:22 +0000
State-Changed-Why:
still a problem. maybe drm_sysctl_cleanup() isn't complete.
State-Changed-From-To: open->feedback
State-Changed-By: mrg@NetBSD.org
State-Changed-When: Wed, 10 Nov 2010 05:24:10 +0000
State-Changed-Why:
OK, please try with drm_sysctl.c rev 1.6.
i was able to reproduce the problem by faking the same AGP failure,
and the change in 1.6 should deal with properly deleting the sysctl
tree in this case.
From: "matthew green" <mrg@netbsd.org>
To: gnats-bugs@gnats.NetBSD.org
Cc:
Subject: PR/40029 CVS commit: src/sys/external/bsd/drm/dist/bsd-core
Date: Wed, 10 Nov 2010 05:22:56 +0000
Module Name: src
Committed By: mrg
Date: Wed Nov 10 05:22:56 UTC 2010
Modified Files:
src/sys/external/bsd/drm/dist/bsd-core: drm_sysctl.c
Log Message:
use a sysctllog structure, and sysctl_teardown(), to destroy the drm data.
this should actually now fix PR#40029.
To generate a diff of this commit:
cvs rdiff -u -r1.5 -r1.6 src/sys/external/bsd/drm/dist/bsd-core/drm_sysctl.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
From: Sergey Svishchev <svs@ropnet.ru>
To: gnats-bugs@NetBSD.org
Cc:
Subject: Re: kern/40029 (PCI Matrox G450 vs. mgadrm(4) -> panic)
Date: Fri, 12 Nov 2010 00:54:40 +0300
On Wed, Nov 10, 2010 at 05:24:11AM +0000, mrg@NetBSD.org wrote:
>Synopsis: PCI Matrox G450 vs. mgadrm(4) -> panic
>
>State-Changed-From-To: open->feedback
>State-Changed-By: mrg@NetBSD.org
>State-Changed-When: Wed, 10 Nov 2010 05:24:10 +0000
>State-Changed-Why:
>OK, please try with drm_sysctl.c rev 1.6.
>
>i was able to reproduce the problem by faking the same AGP failure,
>and the change in 1.6 should deal with properly deleting the sysctl
>tree in this case.
Panic went away. Thanks for the fix.
--
Sergey Svishchev
State-Changed-From-To: feedback->closed
State-Changed-By: dholland@NetBSD.org
State-Changed-When: Fri, 12 Nov 2010 02:19:26 +0000
State-Changed-Why:
confirmed fixed, thanks :-)
>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.