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:

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.