[Nouveau] [PATCH 1/3] drm/nouveau/therm: turn on a fan only when crossing threshold in positive direction

2013-02-03 Thread Marcin Slusarz
+ the same for shutdown threshold - seems impossible, but shutdown can fail.

Signed-off-by: Marcin Slusarz marcin.slus...@gmail.com
---
 drivers/gpu/drm/nouveau/core/subdev/therm/temp.c | 11 +++
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/nouveau/core/subdev/therm/temp.c 
b/drivers/gpu/drm/nouveau/core/subdev/therm/temp.c
index bf9b3ce..8f27b44 100644
--- a/drivers/gpu/drm/nouveau/core/subdev/therm/temp.c
+++ b/drivers/gpu/drm/nouveau/core/subdev/therm/temp.c
@@ -105,7 +105,7 @@ void nouveau_therm_sensor_event(struct nouveau_therm *therm,
return;
 
if (dir == NOUVEAU_THERM_THRS_FALLING)
-   nv_info(therm, temperature (%u C) went bellow the '%s' 
threshold\n,
+   nv_info(therm, temperature (%u C) went below the '%s' 
threshold\n,
temperature, thresolds[thrs]);
else
nv_info(therm, temperature (%u C) hit the '%s' threshold\n,
@@ -114,8 +114,10 @@ void nouveau_therm_sensor_event(struct nouveau_therm 
*therm,
active = (dir == NOUVEAU_THERM_THRS_RISING);
switch (thrs) {
case NOUVEAU_THERM_THRS_FANBOOST:
-   nouveau_therm_fan_set(therm, true, 100);
-   nouveau_therm_mode(therm, NOUVEAU_THERM_CTRL_AUTO);
+   if (active) {
+   nouveau_therm_fan_set(therm, true, 100);
+   nouveau_therm_mode(therm, NOUVEAU_THERM_CTRL_AUTO);
+   }
break;
case NOUVEAU_THERM_THRS_DOWNCLOCK:
if (priv-emergency.downclock)
@@ -126,7 +128,8 @@ void nouveau_therm_sensor_event(struct nouveau_therm *therm,
priv-emergency.pause(therm, active);
break;
case NOUVEAU_THERM_THRS_SHUTDOWN:
-   orderly_poweroff(true);
+   if (active)
+   orderly_poweroff(true);
break;
case NOUVEAU_THERM_THRS_NR:
break;
-- 
1.8.1

___
Nouveau mailing list
Nouveau@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/nouveau


[Nouveau] [PATCH 2/3] drm/nv40/therm: reset temperature sensor on init

2013-02-03 Thread Marcin Slusarz
Current uninitialized sensor detection does not work for me on nv4b and
sensor returns crazy values (190°C). It stabilises later, but it's too
late - therm code shutdowns the machine...

Let's just reset it on init.

Signed-off-by: Marcin Slusarz marcin.slus...@gmail.com
---
 drivers/gpu/drm/nouveau/core/subdev/therm/nv40.c | 12 +++-
 1 file changed, 11 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/nouveau/core/subdev/therm/nv40.c 
b/drivers/gpu/drm/nouveau/core/subdev/therm/nv40.c
index accc628..7d90844 100644
--- a/drivers/gpu/drm/nouveau/core/subdev/therm/nv40.c
+++ b/drivers/gpu/drm/nouveau/core/subdev/therm/nv40.c
@@ -173,13 +173,23 @@ nv40_therm_ctor(struct nouveau_object *parent,
return nouveau_therm_preinit(priv-base.base);
 }
 
+int
+nv40_therm_init(struct nouveau_object *object)
+{
+   struct nouveau_therm *therm = (void *)object;
+
+   nv40_sensor_setup(therm);
+
+   return _nouveau_therm_init(object);
+}
+
 struct nouveau_oclass
 nv40_therm_oclass = {
.handle = NV_SUBDEV(THERM, 0x40),
.ofuncs = (struct nouveau_ofuncs) {
.ctor = nv40_therm_ctor,
.dtor = _nouveau_therm_dtor,
-   .init = _nouveau_therm_init,
+   .init = nv40_therm_init,
.fini = _nouveau_therm_fini,
},
 };
-- 
1.8.1

___
Nouveau mailing list
Nouveau@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/nouveau


[Nouveau] [PATCH 3/3] drm/nouveau/therm: use workqueue to shutdown the machine

2013-02-03 Thread Marcin Slusarz
orderly_poweroff cannot be called from atomic context.

Signed-off-by: Marcin Slusarz marcin.slus...@gmail.com
---
 drivers/gpu/drm/nouveau/core/subdev/therm/temp.c | 18 --
 1 file changed, 16 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/nouveau/core/subdev/therm/temp.c 
b/drivers/gpu/drm/nouveau/core/subdev/therm/temp.c
index 8f27b44..b37624a 100644
--- a/drivers/gpu/drm/nouveau/core/subdev/therm/temp.c
+++ b/drivers/gpu/drm/nouveau/core/subdev/therm/temp.c
@@ -90,6 +90,13 @@ nouveau_therm_sensor_get_threshold_state(struct 
nouveau_therm *therm,
return priv-sensor.alarm_state[thrs];
 }
 
+static void
+nv_poweroff_work(struct work_struct *work)
+{
+   orderly_poweroff(true);
+   kfree(work);
+}
+
 void nouveau_therm_sensor_event(struct nouveau_therm *therm,
enum nouveau_therm_thrs thrs,
enum nouveau_therm_thrs_direction dir)
@@ -128,8 +135,15 @@ void nouveau_therm_sensor_event(struct nouveau_therm 
*therm,
priv-emergency.pause(therm, active);
break;
case NOUVEAU_THERM_THRS_SHUTDOWN:
-   if (active)
-   orderly_poweroff(true);
+   if (active) {
+   struct work_struct *work;
+
+   work = kmalloc(sizeof(*work), GFP_ATOMIC);
+   if (work) {
+   INIT_WORK(work, nv_poweroff_work);
+   schedule_work(work);
+   }
+   }
break;
case NOUVEAU_THERM_THRS_NR:
break;
-- 
1.8.1

___
Nouveau mailing list
Nouveau@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/nouveau


[Nouveau] [PATCH] nv30/exa: fix shaders on big-endian machines

2013-02-03 Thread Marcin Slusarz
Direct port of commit d1bc38b6673c54af61196056c489383fba8dced8
nv40/exa: fix shaders on big-endian machines to nv30.

Fixes https://bugs.freedesktop.org/show_bug.cgi?id=60050
---
 src/nv30_exa.c | 272 -
 1 file changed, 136 insertions(+), 136 deletions(-)

diff --git a/src/nv30_exa.c b/src/nv30_exa.c
index 95509bc..21586e9 100644
--- a/src/nv30_exa.c
+++ b/src/nv30_exa.c
@@ -820,146 +820,146 @@ NVAccelInitNV30TCL(ScrnInfoPtr pScrn)
PUSH_DATA (push, 409616);
 
PUSH_DATAu(push, pNv-scratch, PFP_PASS, 2 * 4);
-   PUSH_DATA (push, 0x18009e80); /* txph r0, a[tex0], t[0] */
-   PUSH_DATA (push, 0x1c9dc801);
-   PUSH_DATA (push, 0x0001c800);
-   PUSH_DATA (push, 0x3fe1c800);
-   PUSH_DATA (push, 0x1802be83); /* txph r1, a[tex1], t[1] */
-   PUSH_DATA (push, 0x1c9dc801); /* exit */
-   PUSH_DATA (push, 0x0001c800);
-   PUSH_DATA (push, 0x3fe1c800);
+   PUSH_DATAs(push, 0x18009e80); /* txph r0, a[tex0], t[0] */
+   PUSH_DATAs(push, 0x1c9dc801);
+   PUSH_DATAs(push, 0x0001c800);
+   PUSH_DATAs(push, 0x3fe1c800);
+   PUSH_DATAs(push, 0x1802be83); /* txph r1, a[tex1], t[1] */
+   PUSH_DATAs(push, 0x1c9dc801); /* exit */
+   PUSH_DATAs(push, 0x0001c800);
+   PUSH_DATAs(push, 0x3fe1c800);
 
PUSH_DATAu(push, pNv-scratch, PFP_NV12_BILINEAR, 8 * 4);
-   PUSH_DATA (push, 0x17028200); /* texr r0.x, a[tex0], t[1] */
-   PUSH_DATA (push, 0x1c9dc801);
-   PUSH_DATA (push, 0x0001c800);
-   PUSH_DATA (push, 0x3fe1c800);
-   PUSH_DATA (push, 0x04000e02); /* madr r1.xyz, r0.x, imm.x, imm.yzww */
-   PUSH_DATA (push, 0x1c9c);
-   PUSH_DATA (push, 0x0002);
-   PUSH_DATA (push, 0x0001f202);
-   PUSH_DATA (push, 0x3f9507c8); /* { 1.16, -0.87, 0.53, -1.08 } */
-   PUSH_DATA (push, 0xbf5ee393);
-   PUSH_DATA (push, 0x3f078fef);
-   PUSH_DATA (push, 0xbf8a6762);
-   PUSH_DATA (push, 0x1704ac80); /* texr r0.yz, a[tex1], t[2] */
-   PUSH_DATA (push, 0x1c9dc801);
-   PUSH_DATA (push, 0x0001c800);
-   PUSH_DATA (push, 0x3fe1c800);
-   PUSH_DATA (push, 0x04000e02); /* madr r1.xyz, r0.y, imm, r1 */
-   PUSH_DATA (push, 0x1c9cab00);
-   PUSH_DATA (push, 0x0001c802);
-   PUSH_DATA (push, 0x0001c804);
-   PUSH_DATA (push, 0x); /* { 0.00, -0.39, 2.02, 0.00 } */
-   PUSH_DATA (push, 0xbec890d6);
-   PUSH_DATA (push, 0x40011687);
-   PUSH_DATA (push, 0x);
-   PUSH_DATA (push, 0x04000e81); /* madr r0.xyz, r0.z, imm, r1 */
-   PUSH_DATA (push, 0x1c9d5500);
-   PUSH_DATA (push, 0x0001c802);
-   PUSH_DATA (push, 0x0001c804);
-   PUSH_DATA (push, 0x3fcc432d); /* { 1.60, -0.81, 0.00, 0.00 } */
-   PUSH_DATA (push, 0xbf501a37);
-   PUSH_DATA (push, 0x);
-   PUSH_DATA (push, 0x);
+   PUSH_DATAs(push, 0x17028200); /* texr r0.x, a[tex0], t[1] */
+   PUSH_DATAs(push, 0x1c9dc801);
+   PUSH_DATAs(push, 0x0001c800);
+   PUSH_DATAs(push, 0x3fe1c800);
+   PUSH_DATAs(push, 0x04000e02); /* madr r1.xyz, r0.x, imm.x, imm.yzww */
+   PUSH_DATAs(push, 0x1c9c);
+   PUSH_DATAs(push, 0x0002);
+   PUSH_DATAs(push, 0x0001f202);
+   PUSH_DATAs(push, 0x3f9507c8); /* { 1.16, -0.87, 0.53, -1.08 } */
+   PUSH_DATAs(push, 0xbf5ee393);
+   PUSH_DATAs(push, 0x3f078fef);
+   PUSH_DATAs(push, 0xbf8a6762);
+   PUSH_DATAs(push, 0x1704ac80); /* texr r0.yz, a[tex1], t[2] */
+   PUSH_DATAs(push, 0x1c9dc801);
+   PUSH_DATAs(push, 0x0001c800);
+   PUSH_DATAs(push, 0x3fe1c800);
+   PUSH_DATAs(push, 0x04000e02); /* madr r1.xyz, r0.y, imm, r1 */
+   PUSH_DATAs(push, 0x1c9cab00);
+   PUSH_DATAs(push, 0x0001c802);
+   PUSH_DATAs(push, 0x0001c804);
+   PUSH_DATAs(push, 0x); /* { 0.00, -0.39, 2.02, 0.00 } */
+   PUSH_DATAs(push, 0xbec890d6);
+   PUSH_DATAs(push, 0x40011687);
+   PUSH_DATAs(push, 0x);
+   PUSH_DATAs(push, 0x04000e81); /* madr r0.xyz, r0.z, imm, r1 */
+   PUSH_DATAs(push, 0x1c9d5500);
+   PUSH_DATAs(push, 0x0001c802);
+   PUSH_DATAs(push, 0x0001c804);
+   PUSH_DATAs(push, 0x3fcc432d); /* { 1.60, -0.81, 0.00, 0.00 } */
+   PUSH_DATAs(push, 0xbf501a37);
+   PUSH_DATAs(push, 0x);
+   PUSH_DATAs(push, 0x);
 
PUSH_DATAu(push, pNv-scratch, PFP_NV12_BICUBIC, 24 * 4);
-   PUSH_DATA (push, 0x01008604); /* movr r2.xy, a[tex0] */
-   PUSH_DATA (push, 0x1c9dc801);
-   PUSH_DATA (push, 0x0001c800);
-   PUSH_DATA (push, 0x0001c800);
-   PUSH_DATA (push, 0x03000600); /* addr r0.xy, r2, imm.x */
-   PUSH_DATA (push, 0x1c9dc808);
-   PUSH_DATA (push, 0x0002);
-   PUSH_DATA (push, 0x0001c800);
-   PUSH_DATA (push, 0x3f00); /* { 0.50, 0.00, 0.00, 0.00 } */
-   PUSH_DATA (push, 0x);
-   PUSH_DATA (push, 0x);
-   PUSH_DATA (push, 0x);
-   

[Nouveau] [Bug 60007] BUG: nouveau crashes in various ways in 32-bits Fedora 18

2013-02-03 Thread bugzilla-daemon
https://bugs.freedesktop.org/show_bug.cgi?id=60007

Marcin Slusarz marcin.slus...@gmail.com changed:

   What|Removed |Added

  Attachment #74114|text/plain  |image/jpeg
  mime type||

-- 
You are receiving this mail because:
You are the assignee for the bug.
___
Nouveau mailing list
Nouveau@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/nouveau


[Nouveau] [Bug 60007] BUG: nouveau crashes in various ways in 32-bits Fedora 18

2013-02-03 Thread bugzilla-daemon
https://bugs.freedesktop.org/show_bug.cgi?id=60007

--- Comment #15 from Marcin Slusarz marcin.slus...@gmail.com ---
This is totally different issue - different card generations (nv4x vs nv5x) and
different symptoms (garbage on screen vs kernel crash). 

The patch I posted pertains only to nv50/kernel crash issue.

-- 
You are receiving this mail because:
You are the assignee for the bug.
___
Nouveau mailing list
Nouveau@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/nouveau


Re: [Nouveau] [PATCH 2/3] drm/nv40/therm: reset temperature sensor on init

2013-02-03 Thread Marcin Slusarz
On Sun, Feb 03, 2013 at 09:07:56PM +0100, Marcin Slusarz wrote:
 Current uninitialized sensor detection does not work for me on nv4b and
 sensor returns crazy values (190°C). It stabilises later, but it's too
 late - therm code shutdowns the machine...
 
 Let's just reset it on init.
 
 Signed-off-by: Marcin Slusarz marcin.slus...@gmail.com
 ---
  drivers/gpu/drm/nouveau/core/subdev/therm/nv40.c | 12 +++-
  1 file changed, 11 insertions(+), 1 deletion(-)
 
 diff --git a/drivers/gpu/drm/nouveau/core/subdev/therm/nv40.c 
 b/drivers/gpu/drm/nouveau/core/subdev/therm/nv40.c
 index accc628..7d90844 100644
 --- a/drivers/gpu/drm/nouveau/core/subdev/therm/nv40.c
 +++ b/drivers/gpu/drm/nouveau/core/subdev/therm/nv40.c
 @@ -173,13 +173,23 @@ nv40_therm_ctor(struct nouveau_object *parent,
   return nouveau_therm_preinit(priv-base.base);
  }
  
 +int
 +nv40_therm_init(struct nouveau_object *object)

Tiny issue: this function should be static.

 +{
 + struct nouveau_therm *therm = (void *)object;
 +
 + nv40_sensor_setup(therm);
 +
 + return _nouveau_therm_init(object);
 +}
 +
  struct nouveau_oclass
  nv40_therm_oclass = {
   .handle = NV_SUBDEV(THERM, 0x40),
   .ofuncs = (struct nouveau_ofuncs) {
   .ctor = nv40_therm_ctor,
   .dtor = _nouveau_therm_dtor,
 - .init = _nouveau_therm_init,
 + .init = nv40_therm_init,
   .fini = _nouveau_therm_fini,
   },
  };
 -- 
 1.8.1
 
___
Nouveau mailing list
Nouveau@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/nouveau


[Nouveau] [Bug 56461] NV11 black screen kernel hang on loading nouveaufb

2013-02-03 Thread bugzilla-daemon
https://bugs.freedesktop.org/show_bug.cgi?id=56461

--- Comment #42 from Chris Paulson-Ellis ch...@edesix.com ---
I found the bug in commit cb75d97e that results in the incorrect GART aperture
and fixed it with this patch:

--- a/drivers/gpu/drm/nouveau/nouveau_compat.c
+++ b/drivers/gpu/drm/nouveau/nouveau_compat.c
@@ -17,7 +17,7 @@ nvdrm_gart_init(struct drm_device *dev, u64 *base, u64 *size)
 struct nouveau_drm *drm = nouveau_newpriv(dev);
 if (drm-agp.stat == ENABLED) {
 *base = drm-agp.base;
-*size = drm-agp.base;
+*size = drm-agp.size;
 return 0;
 }
 return -ENODEV;

However, the display still fades to black. I now get an error that I didn't get
with the parent commit:

PFIFO_DMA_PUSHER - Ch 0 Get 0x0400 Put 0x1088 State 0xc000 (err:
MEM_FAULT) Push 0x

This message appears at the end of enabling the LDVS output, so it's probably
related (I'll attach the console log).

I'm not sure how to debug further. I'm wondering in particular how to trace the
effect of various changes in commit cb75d97e, such as those made to
run_digital_op_script()? Perhaps I need to trace all register read/writes
during the devinit phase and compare to the parent commit? How would I do this?

-- 
You are receiving this mail because:
You are the assignee for the bug.
___
Nouveau mailing list
Nouveau@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/nouveau


[Nouveau] [Bug 56461] NV11 black screen kernel hang on loading nouveaufb

2013-02-03 Thread bugzilla-daemon
https://bugs.freedesktop.org/show_bug.cgi?id=56461

--- Comment #43 from Chris Paulson-Ellis ch...@edesix.com ---
Created attachment 74152
  -- https://bugs.freedesktop.org/attachment.cgi?id=74152action=edit
console output for fading to black cb75d97e + 3bb076af + 92441b22 + i2c hacks +
gart size fix

-- 
You are receiving this mail because:
You are the assignee for the bug.
___
Nouveau mailing list
Nouveau@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/nouveau


[Nouveau] [Bug 56461] NV11 black screen kernel hang on loading nouveaufb

2013-02-03 Thread bugzilla-daemon
https://bugs.freedesktop.org/show_bug.cgi?id=56461

--- Comment #44 from Marcin Slusarz marcin.slus...@gmail.com ---
You can use mmiotrace to trace all register reads and writes and then parse it 
with demmio (from envytools) to have names attached to registers.

http://nouveau.freedesktop.org/wiki/Development

-- 
You are receiving this mail because:
You are the assignee for the bug.
___
Nouveau mailing list
Nouveau@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/nouveau


[Nouveau] [Bug 60007] BUG: nouveau crashes in various ways in 32-bits Fedora 18

2013-02-03 Thread bugzilla-daemon
https://bugs.freedesktop.org/show_bug.cgi?id=60007

--- Comment #16 from Cornel Panceac cpanc...@gmail.com ---
still, there is this pattern that i've seen both on fedora 17 (at kernel crash)
and on fedora 18, while opening some big jpegs in eye of gnome. this suggests
there are some other common issues, not fixed yet. 

to keep things in sync, after applying your patch, the original fedora 18
system didn't had any video problems at all. thank you.

-- 
You are receiving this mail because:
You are the assignee for the bug.
___
Nouveau mailing list
Nouveau@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/nouveau


[Nouveau] [Bug 59242] some mesa demos start to segfault after nouveau: improve buffer transfers on nv43

2013-02-03 Thread bugzilla-daemon
https://bugs.freedesktop.org/show_bug.cgi?id=59242

Andrew Randrianasulu rand...@mail.ru changed:

   What|Removed |Added

 Status|NEW |RESOLVED
 Resolution|--- |FIXED

--- Comment #2 from Andrew Randrianasulu rand...@mail.ru ---
Probably  fixed with  mesa  update. (currently at Mesa 9.2-devel (git-8a4d952))

-- 
You are receiving this mail because:
You are the assignee for the bug.
___
Nouveau mailing list
Nouveau@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/nouveau


[Nouveau] 3.8-rc6: nouveau lockdep recursive lock acquisition

2013-02-03 Thread Daniel J Blueman
From recent additional locking in nouveau, it looks like we see
recursive lock acquisition in 3.8-rc6:

nouveau [ DEVICE][:01:00.0] BOOT0 : 0x0e7150a2
nouveau [ DEVICE][:01:00.0] Chipset: GK107 (NVE7)
nouveau [ DEVICE][:01:00.0] Family : NVE0
nouveau [  VBIOS][:01:00.0] checking PRAMIN for image...
nouveau [  VBIOS][:01:00.0] ... appears to be valid
nouveau [  VBIOS][:01:00.0] using image from PRAMIN
nouveau [  VBIOS][:01:00.0] BIT signature found
nouveau [  VBIOS][:01:00.0] version 80.07.26.04.01
nouveau [   PFB][:01:00.0] RAM type: GDDR5
nouveau [   PFB][:01:00.0] RAM size: 1024 MiB
nouveau [   PFB][:01:00.0]  ZCOMP: 0 tags
init: gdm main process (960) killed by TERM signal
vga_switcheroo: enabled
[TTM] Zone kernel: Available graphics memory: 4038258 kiB
[TTM] Zone  dma32: Available graphics memory: 2097152 kiB
[TTM] Initializing pool allocator
[TTM] Initializing DMA pool allocator
nouveau [   DRM] VRAM: 1024 MiB
nouveau [   DRM] GART: 512 MiB
nouveau [   DRM] BIT BIOS found
nouveau [   DRM] Bios version 80.07.26.04
nouveau [   DRM] TMDS table version 2.0
nouveau [   DRM] DCB version 4.0
nouveau [   DRM] DCB outp 00: 048101b6 0f230010
nouveau [   DRM] DCB outp 01: 018212d6 0f220020
nouveau [   DRM] DCB outp 02: 01021212 00020020
nouveau [   DRM] DCB outp 03: 088324c6 0f220010
nouveau [   DRM] DCB outp 04: 08032402 00020010
nouveau [   DRM] DCB outp 05: 02843862 00020010
nouveau [   DRM] DCB conn 00: 00020047
nouveau [   DRM] DCB conn 01: 02208146
nouveau [   DRM] DCB conn 02: 01104246
nouveau [   DRM] DCB conn 03: 00410361

=
[ INFO: possible recursive locking detected ]
3.8.0-rc6-ninja+ #1 Not tainted
-
modprobe/585 is trying to acquire lock:
 (subdev-mutex){+.+.+.}, at: [a016c323]
nouveau_instobj_create_+0x43/0x90 [nouveau]

but task is already holding lock:
 (subdev-mutex){+.+.+.}, at: [a017672d]
nv50_disp_data_ctor+0x5d/0xd0 [nouveau]

other info that might help us debug this:
 Possible unsafe locking scenario:

CPU0

 lock(subdev-mutex);
 lock(subdev-mutex);

 *** DEADLOCK ***

 May be due to missing lock nesting notation

4 locks held by modprobe/585:
 #0: (__lockdep_no_validate__){..}, at: [813075f3]
__driver_attach+0x53/0xb0
 #1: (__lockdep_no_validate__){..}, at: [81307601]
__driver_attach+0x61/0xb0
 #2: (drm_global_mutex){+.+.+.}, at: [812ee59c]
drm_get_pci_dev+0xbc/0x2b0
 #3: (subdev-mutex){+.+.+.}, at: [a017672d]
nv50_disp_data_ctor+0x5d/0xd0 [nouveau]

stack backtrace:
Pid: 585, comm: modprobe Not tainted 3.8.0-rc6-expert+ #1
Call Trace:
 [8108fde2] validate_chain.isra.33+0xd72/0x10d0
 [8105fa08] ? __kernel_text_address+0x58/0x80
 [8100575d] ? print_context_stack+0x5d/0xd0
 [81090bc1] __lock_acquire+0x3a1/0xb60
 [8108d504] ? __lock_is_held+0x54/0x80
 [8109184a] lock_acquire+0x5a/0x70
 [a016c323] ? nouveau_instobj_create_+0x43/0x90 [nouveau]
 [81558739] mutex_lock_nested+0x69/0x340
 [a016c323] ? nouveau_instobj_create_+0x43/0x90 [nouveau]
 [a0152370] ? nouveau_object_create_+0x60/0xa0 [nouveau]
 [a016c323] nouveau_instobj_create_+0x43/0x90 [nouveau]
 [a016cf8c] nv50_instobj_ctor+0x4c/0xf0 [nouveau]
 [a0152163] nouveau_object_ctor+0x33/0xc0 [nouveau]
 [a016cd51] nv50_instmem_alloc+0x21/0x30 [nouveau]
 [a0150917] nouveau_gpuobj_create_+0x247/0x2f0 [nouveau]
 [8155b35a] ? _raw_spin_unlock_irqrestore+0x3a/0x70
 [810921fd] ? trace_hardirqs_on_caller+0x10d/0x1a0
 [a014f4bc] nouveau_engctx_create_+0x25c/0x2a0 [nouveau]
 [a0176791] nv50_disp_data_ctor+0xc1/0xd0 [nouveau]
 [a0153722] ? nouveau_subdev_reset+0x52/0x60 [nouveau]
 [a0152163] nouveau_object_ctor+0x33/0xc0 [nouveau]
 [a0152a42] nouveau_object_new+0x112/0x240 [nouveau]
 [a01f4b1d] nv50_display_create+0x18d/0x860 [nouveau]
 [8105cb5d] ? __cancel_work_timer+0x6d/0xc0
 [a01db8eb] nouveau_display_create+0x3cb/0x670 [nouveau]
 [a01cb1bf] nouveau_drm_load+0x26f/0x590 [nouveau]
 [81304c99] ? device_register+0x19/0x20
 [812efe91] ? drm_sysfs_device_add+0x81/0xb0
 [812ee65e] drm_get_pci_dev+0x17e/0x2b0
 [81245e56] ? __pci_set_master+0x26/0x80
 [a01cab2a] nouveau_drm_probe+0x25a/0x2a0 [nouveau]
 [8124a386] local_pci_probe+0x46/0x80
 [8124ac11] pci_device_probe+0x101/0x110
 [813073d6] driver_probe_device+0x76/0x240
 [81307643] __driver_attach+0xa3/0xb0
 [813075a0] ? driver_probe_device+0x240/0x240
 [8130564d] bus_for_each_dev+0x4d/0x90
 [81306f39] driver_attach+0x19/0x20
 [81306af0] bus_add_driver+0x1a0/0x270
 [a023d000] ? 0xa023cfff
 [81307cd2] driver_register+0x72/0x170
 [a023d000] ? 0xa023cfff