Hi Maarten On Mon, 2013-02-04 at 22:59 +0100, Maarten Lankhorst wrote: > Op 04-02-13 22:30, Marcin Slusarz schreef: > > 1) Lockdep thinks all nouveau subdevs belong to the same class and can be > > locked in arbitrary order, which is not true (at least in general case). > > Tell it to distinguish subdevs by (o)class type. > Apart from this specific case, is there any other reason why we require being able to nest 2 subdev locks? > > Add a NVOBJ_FLAG_CREATE_EXCLUSIVE flag to nouveau_engctx_create and return -EBUSY if there is any existing object. Problem solved, and lockdep is still generic. > > > 2) DRM client can be locked under user client lock - tell lockdep to put DRM > > client lock in a separate class. > Can you copy paste a typical lockdep splat for this? Also this should be a separate patch. :-) PS - Deep call chain. Has anyone looked into max stack depth yet? [ 5.995881] ============================================= [ 5.995886] [ INFO: possible recursive locking detected ] [ 5.995892] 3.8.0-next-20130125+ttypatch-xeon+lockdep #20130125+ttypatch Not tainted [ 5.995898] --------------------------------------------- [ 5.995904] modprobe/275 is trying to acquire lock: [ 5.995909] (&subdev->mutex){+.+.+.}, at: [<ffffffffa00d10b8>] nouveau_instobj_create_+0x48/0x90 [nouveau] [ 5.995955] [ 5.995955] but task is already holding lock: [ 5.995961] (&subdev->mutex){+.+.+.}, at: [<ffffffffa00da3b5>] nv50_disp_data_ctor+0x65/0xd0 [nouveau] [ 5.995989] [ 5.995989] other info that might help us debug this: [ 5.995995] Possible unsafe locking scenario: [ 5.995995] [ 5.996001] CPU0 [ 5.996004] ---- [ 5.996005] lock(&subdev->mutex); [ 5.996005] lock(&subdev->mutex); [ 5.996005] [ 5.996005] *** DEADLOCK *** [ 5.996005] [ 5.996005] May be due to missing lock nesting notation [ 5.996005] [ 5.996005] 4 locks held by modprobe/275: [ 5.996005] #0: (&__lockdep_no_validate__){......}, at: [<ffffffff8146fa5b>] __driver_attach+0x5b/0xb0 [ 5.996005] #1: (&__lockdep_no_validate__){......}, at: [<ffffffff8146fa69>] __driver_attach+0x69/0xb0 [ 5.996005] #2: (drm_global_mutex){+.+.+.}, at: [<ffffffffa0028d86>] drm_get_pci_dev+0xc6/0x2d0 [drm] [ 5.996005] #3: (&subdev->mutex){+.+.+.}, at: [<ffffffffa00da3b5>] nv50_disp_data_ctor+0x65/0xd0 [nouveau] [ 5.996005] [ 5.996005] stack backtrace: [ 5.996005] Pid: 275, comm: modprobe Not tainted 3.8.0-next-20130125+ttypatch-xeon+lockdep #20130125+ttypatch [ 5.996005] Call Trace: [ 5.996005] [<ffffffff810bd437>] __lock_acquire+0x687/0x1a70 [ 5.996005] [<ffffffff810bf70b>] ? mark_held_locks+0x9b/0x100 [ 5.996005] [<ffffffff810bf87d>] ? trace_hardirqs_on_caller+0x10d/0x1a0 [ 5.996005] [<ffffffff810bf91d>] ? trace_hardirqs_on+0xd/0x10 [ 5.996005] [<ffffffff8170a87a>] ? _raw_write_unlock_irqrestore+0x4a/0x90 [ 5.996005] [<ffffffff810bedc8>] lock_acquire+0x98/0x150 [ 5.996005] [<ffffffffa00d10b8>] ? nouveau_instobj_create_+0x48/0x90 [nouveau] [ 5.996005] [<ffffffffa00d10b8>] ? nouveau_instobj_create_+0x48/0x90 [nouveau] [ 5.996005] [<ffffffff81707f60>] mutex_lock_nested+0x50/0x390 [ 5.996005] [<ffffffffa00d10b8>] ? nouveau_instobj_create_+0x48/0x90 [nouveau] [ 5.996005] [<ffffffffa00b6376>] ? nouveau_object_ref+0x46/0xd0 [nouveau] [ 5.996005] [<ffffffffa00b64b5>] ? nouveau_object_create_+0x65/0xa0 [nouveau] [ 5.996005] [<ffffffffa00d10b8>] nouveau_instobj_create_+0x48/0x90 [nouveau] [ 5.996005] [<ffffffffa00d1be1>] nv50_instobj_ctor+0x51/0xf0 [nouveau] [ 5.996005] [<ffffffffa00b62a8>] nouveau_object_ctor+0x38/0xc0 [nouveau] [ 5.996005] [<ffffffffa00d1b36>] nv50_instmem_alloc+0x26/0x30 [nouveau] [ 5.996005] [<ffffffffa00b49a7>] nouveau_gpuobj_create_+0x247/0x2f0 [nouveau] [ 5.996005] [<ffffffff8170afed>] ? _raw_spin_unlock_irqrestore+0x6d/0x90 [ 5.996005] [<ffffffff810bf87d>] ? trace_hardirqs_on_caller+0x10d/0x1a0 [ 5.996005] [<ffffffffa00b34dc>] nouveau_engctx_create_+0x26c/0x2b0 [nouveau] [ 5.996005] [<ffffffffa00da411>] nv50_disp_data_ctor+0xc1/0xd0 [nouveau] [ 5.996005] [<ffffffffa00b62a8>] nouveau_object_ctor+0x38/0xc0 [nouveau] [ 5.996005] [<ffffffffa00b6b82>] nouveau_object_new+0x112/0x240 [nouveau] [ 5.996005] [<ffffffffa0155fe5>] nv50_display_create+0x1a5/0x890 [nouveau] [ 5.996005] [<ffffffff8107837b>] ? __cancel_work_timer+0x8b/0xe0 [ 5.996005] [<ffffffffa013c80b>] nouveau_display_create+0x3cb/0x670 [nouveau] [ 5.996005] [<ffffffffa012ba0f>] nouveau_drm_load+0x26f/0x590 [nouveau] [ 5.996005] [<ffffffff8146caee>] ? device_register+0x1e/0x30 [ 5.996005] [<ffffffffa002a626>] ? drm_sysfs_device_add+0x86/0xb0 [drm] [ 5.996005] [<ffffffffa0028e46>] drm_get_pci_dev+0x186/0x2d0 [drm] [ 5.996005] [<ffffffffa012bf9a>] nouveau_drm_probe+0x26a/0x2c0 [nouveau] [ 5.996005] [<ffffffff8170afca>] ? _raw_spin_unlock_irqrestore+0x4a/0x90 [ 5.996005] [<ffffffff81393a8b>] local_pci_probe+0x4b/0x80 [ 5.996005] [<ffffffff81393da1>] pci_device_probe+0x111/0x120 [ 5.996005] [<ffffffff8146f6eb>] driver_probe_device+0x8b/0x3a0 [ 5.996005] [<ffffffff8146faab>] __driver_attach+0xab/0xb0 [ 5.996005] [<ffffffff8146fa00>] ? driver_probe_device+0x3a0/0x3a0 [ 5.996005] [<ffffffff8146d635>] bus_for_each_dev+0x55/0x90 [ 5.996005] [<ffffffff8146f12e>] driver_attach+0x1e/0x20 [ 5.996005] [<ffffffff8146ebe1>] bus_add_driver+0x121/0x2b0 [ 5.996005] [<ffffffffa01ad000>] ? 0xffffffffa01acfff [ 5.996005] [<ffffffff814701b7>] driver_register+0x77/0x170 [ 5.996005] [<ffffffffa01ad000>] ? 0xffffffffa01acfff [ 5.996005] [<ffffffff81392b14>] __pci_register_driver+0x64/0x70 [ 5.996005] [<ffffffffa00290aa>] drm_pci_init+0x11a/0x130 [drm] [ 5.996005] [<ffffffffa01ad000>] ? 0xffffffffa01acfff [ 5.996005] [<ffffffffa01ad000>] ? 0xffffffffa01acfff [ 5.996005] [<ffffffffa01ad04d>] nouveau_drm_init+0x4d/0x1000 [nouveau] [ 5.996005] [<ffffffff8100215a>] do_one_initcall+0x12a/0x180 [ 5.996005] [<ffffffff810cc6a7>] load_module+0x12f7/0x1be0 [ 5.996005] [<ffffffff8137ce20>] ? ddebug_proc_open+0xd0/0xd0 [ 5.996005] [<ffffffff8136993e>] ? trace_hardirqs_on_thunk+0x3a/0x3f [ 5.996005] [<ffffffff810cd067>] sys_init_module+0xd7/0x120 [ 5.996005] [<ffffffff81712f59>] system_call_fastpath+0x16/0x1b _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel