From mboxrd@z Thu Jan 1 00:00:00 1970 From: Johannes Berg Subject: nouveau lockdep warning Date: Wed, 01 Sep 2010 09:26:14 +0200 Message-ID: <1283325974.4131.4.camel@jlt3.sipsolutions.net> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Return-path: Received: from sipsolutions.net (he.sipsolutions.net [78.46.109.217]) by gabe.freedesktop.org (Postfix) with ESMTP id 4ACEE9E98F for ; Wed, 1 Sep 2010 00:26:21 -0700 (PDT) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org Errors-To: dri-devel-bounces+sf-dri-devel=m.gmane.org@lists.freedesktop.org To: Francisco Jerez Cc: Ben Skeggs , dri-devel List-Id: dri-devel@lists.freedesktop.org Francisco, The patch you pointed me works, but now, although it's probably not due to that patch, I get a lockdep warning: [ 75.428119] [drm] nouveau 0000:02:00.0: nouveau_channel_free: freeing fifo 2 [ 75.430015] [ 75.430015] ====================================================== [ 75.430015] [ INFO: HARDIRQ-safe -> HARDIRQ-unsafe lock order detected ] [ 75.430015] 2.6.36-rc3-wl-47417-g8164729-dirty #183 [ 75.430015] ------------------------------------------------------ [ 75.430015] Xorg/3109 [HC0[0]:SC0[0]:HE0:SE1] is trying to acquire: [ 75.430015] (&(&mm->unused_lock)->rlock){+.+...}, at: [] drm_mm_put_block+0x93/0x190 [drm] [ 75.430015] [ 75.430015] and this task is already holding: [ 75.430015] (&(&dev_priv->context_switch_lock)->rlock){-.....}, at: [] nouveau_channel_free+0xf9/0x2b0 [nouveau] [ 75.430015] which would create a new lock dependency: [ 75.430015] (&(&dev_priv->context_switch_lock)->rlock){-.....} -> (&(&mm->unused_lock)->rlock){+.+...} [ 75.430015] [ 75.430015] but this new dependency connects a HARDIRQ-irq-safe lock: [ 75.430015] [drm] nouveau 0000:02:00.0: GPU lockup - switching to software fbcon [ 75.430015] (&(&dev_priv->context_switch_lock)->rlock){-.....} [ 75.430015] ... which became HARDIRQ-irq-safe at: [ 75.430015] [] mark_irqflags+0x17d/0x190 [ 75.430015] [] __lock_acquire+0x57c/0x9d0 [ 75.430015] [] lock_acquire+0xa2/0x1d0 [ 75.430015] [] _raw_spin_lock_irqsave+0x52/0x90 [ 75.430015] [] nouveau_irq_handler+0x6f/0x1b0 [nouveau] [ 75.430015] [] handle_IRQ_event+0x81/0x2e0 [ 75.430015] [] handle_fasteoi_irq+0x7c/0x100 [ 75.430015] [] handle_irq+0x22/0x30 [ 75.430015] [] do_IRQ+0x73/0xf0 [ 75.430015] [] ret_from_intr+0x0/0xf [ 75.430015] [] dev_set_name+0x41/0x50 [ 75.430015] [] backlight_device_register+0xcc/0x2d0 [ 75.430015] [] nouveau_nv50_backlight_init+0x87/0xf0 [nouveau] [ 75.430015] [] nouveau_backlight_init+0x2d/0x50 [nouveau] [ 75.430015] [] nouveau_card_init+0x263/0x300 [nouveau] [ 75.430015] [] nouveau_load+0x351/0x660 [nouveau] [ 75.430015] [] drm_get_pci_dev+0x183/0x3a0 [drm] [ 75.430015] [] nouveau_pci_probe+0x15/0x17 [nouveau] [ 75.430015] [] local_pci_probe+0x5f/0xd0 [ 75.430015] [] pci_device_probe+0x88/0xb0 [ 75.430015] [] really_probe+0x68/0x190 [ 75.430015] [] driver_probe_device+0x45/0x70 [ 75.430015] [] __driver_attach+0x9b/0xa0 [ 75.430015] [] bus_for_each_dev+0x6c/0xa0 [ 75.430015] [] driver_attach+0x1e/0x20 [ 75.430015] [] bus_add_driver+0xd5/0x370 [ 75.430015] [] driver_register+0x78/0x140 [ 75.430015] [] __pci_register_driver+0x66/0xe0 [ 75.430015] [] drm_pci_init+0xdf/0xf0 [drm] [ 75.430015] [] drm_init+0x58/0x70 [drm] [ 75.430015] [] 0xffffffffa085b048 [ 75.430015] [] do_one_initcall+0x43/0x180 [ 75.430015] [] sys_init_module+0xba/0x200 [ 75.430015] [] system_call_fastpath+0x16/0x1b [ 75.430015] [ 75.430015] to a HARDIRQ-irq-unsafe lock: [ 75.430015] (&(&mm->unused_lock)->rlock){+.+...} [ 75.430015] ... which became HARDIRQ-irq-unsafe at: [ 75.430015] ... [] mark_irqflags+0x120/0x190 [ 75.430015] [] __lock_acquire+0x57c/0x9d0 [ 75.430015] [] lock_acquire+0xa2/0x1d0 [ 75.430015] [] _raw_spin_lock+0x40/0x80 [ 75.430015] [] drm_mm_pre_get+0x25/0x1e0 [drm] [ 75.430015] [] ttm_bo_setup_vm+0x2b/0x140 [ttm] [ 75.430015] [] ttm_bo_init+0x24d/0x290 [ttm] [ 75.430015] [] nouveau_bo_new+0x161/0x2d0 [nouveau] [ 75.430015] [] nouveau_mem_init+0x200/0x580 [nouveau] [ 75.430015] [] nouveau_card_init+0xf6/0x300 [nouveau] [ 75.430015] [] nouveau_load+0x351/0x660 [nouveau] [ 75.430015] [] drm_get_pci_dev+0x183/0x3a0 [drm] [ 75.430015] [] nouveau_pci_probe+0x15/0x17 [nouveau] [ 75.430015] [] local_pci_probe+0x5f/0xd0 [ 75.430015] [] pci_device_probe+0x88/0xb0 [ 75.430015] [] really_probe+0x68/0x190 [ 75.430015] [] driver_probe_device+0x45/0x70 [ 75.430015] [] __driver_attach+0x9b/0xa0 [ 75.430015] [] bus_for_each_dev+0x6c/0xa0 [ 75.430015] [] driver_attach+0x1e/0x20 [ 75.430015] [] bus_add_driver+0xd5/0x370 [ 75.430015] [] driver_register+0x78/0x140 [ 75.430015] [] __pci_register_driver+0x66/0xe0 [ 75.430015] [] drm_pci_init+0xdf/0xf0 [drm] [ 75.430015] [] drm_init+0x58/0x70 [drm] [ 75.430015] [] 0xffffffffa085b048 [ 75.430015] [] do_one_initcall+0x43/0x180 [ 75.430015] [] sys_init_module+0xba/0x200 [ 75.430015] [] system_call_fastpath+0x16/0x1b [ 75.430015] [ 75.430015] other info that might help us debug this: [ 75.430015] [ 75.430015] 2 locks held by Xorg/3109: [ 75.430015] #0: (drm_global_mutex){+.+.+.}, at: [] drm_ioctl+0x361/0x4d0 [drm] [ 75.430015] #1: (&(&dev_priv->context_switch_lock)->rlock){-.....}, at: [] nouveau_channel_free+0xf9/0x2b0 [nouveau] [ 75.430015] [ 75.430015] the dependencies between HARDIRQ-irq-safe lock and the holding lock: [ 75.430015] -> (&(&dev_priv->context_switch_lock)->rlock){-.....} ops: 21 { [ 75.430015] IN-HARDIRQ-W at: [ 75.430015] [] mark_irqflags+0x17d/0x190 [ 75.430015] [] __lock_acquire+0x57c/0x9d0 [ 75.430015] [] lock_acquire+0xa2/0x1d0 [ 75.430015] [] _raw_spin_lock_irqsave+0x52/0x90 [ 75.430015] [] nouveau_irq_handler+0x6f/0x1b0 [nouveau] [ 75.430015] [] handle_IRQ_event+0x81/0x2e0 [ 75.430015] [] handle_fasteoi_irq+0x7c/0x100 [ 75.430015] [] handle_irq+0x22/0x30 [ 75.430015] [] do_IRQ+0x73/0xf0 [ 75.430015] [] ret_from_intr+0x0/0xf [ 75.430015] [] dev_set_name+0x41/0x50 [ 75.430015] [] backlight_device_register+0xcc/0x2d0 [ 75.430015] [] nouveau_nv50_backlight_init+0x87/0xf0 [nouveau] [ 75.430015] [] nouveau_backlight_init+0x2d/0x50 [nouveau] [ 75.430015] [] nouveau_card_init+0x263/0x300 [nouveau] [ 75.430015] [] nouveau_load+0x351/0x660 [nouveau] [ 75.430015] [] drm_get_pci_dev+0x183/0x3a0 [drm] [ 75.430015] [] nouveau_pci_probe+0x15/0x17 [nouveau] [ 75.430015] [] local_pci_probe+0x5f/0xd0 [ 75.430015] [] pci_device_probe+0x88/0xb0 [ 75.430015] [] really_probe+0x68/0x190 [ 75.430015] [] driver_probe_device+0x45/0x70 [ 75.430015] [] __driver_attach+0x9b/0xa0 [ 75.430015] [] bus_for_each_dev+0x6c/0xa0 [ 75.430015] [] driver_attach+0x1e/0x20 [ 75.430015] [] bus_add_driver+0xd5/0x370 [ 75.430015] [] driver_register+0x78/0x140 [ 75.430015] [] __pci_register_driver+0x66/0xe0 [ 75.430015] [] drm_pci_init+0xdf/0xf0 [drm] [ 75.430015] [] drm_init+0x58/0x70 [drm] [ 75.430015] [] 0xffffffffa085b048 [ 75.430015] [] do_one_initcall+0x43/0x180 [ 75.430015] [] sys_init_module+0xba/0x200 [ 75.430015] [] system_call_fastpath+0x16/0x1b [ 75.430015] INITIAL USE at: [ 75.430015] [] __lock_acquire+0x342/0x9d0 [ 75.430015] [] lock_acquire+0xa2/0x1d0 [ 75.430015] [] _raw_spin_lock_irqsave+0x52/0x90 [ 75.430015] [] nv50_fifo_create_context+0xf2/0x460 [nouveau] [ 75.430015] [] nouveau_channel_alloc+0x352/0x5e0 [nouveau] [ 75.430015] [] nouveau_card_init_channel+0x45/0x150 [nouveau] [ 75.430015] [] nouveau_card_init+0x257/0x300 [nouveau] [ 75.430015] [] nouveau_load+0x351/0x660 [nouveau] [ 75.430015] [] drm_get_pci_dev+0x183/0x3a0 [drm] [ 75.430015] [] nouveau_pci_probe+0x15/0x17 [nouveau] [ 75.430015] [] local_pci_probe+0x5f/0xd0 [ 75.430015] [] pci_device_probe+0x88/0xb0 [ 75.430015] [] really_probe+0x68/0x190 [ 75.430015] [] driver_probe_device+0x45/0x70 [ 75.430015] [] __driver_attach+0x9b/0xa0 [ 75.430015] [] bus_for_each_dev+0x6c/0xa0 [ 75.430015] [] driver_attach+0x1e/0x20 [ 75.430015] [] bus_add_driver+0xd5/0x370 [ 75.430015] [] driver_register+0x78/0x140 [ 75.430015] [] __pci_register_driver+0x66/0xe0 [ 75.430015] [] drm_pci_init+0xdf/0xf0 [drm] [ 75.430015] [] drm_init+0x58/0x70 [drm] [ 75.430015] [] 0xffffffffa085b048 [ 75.430015] [] do_one_initcall+0x43/0x180 [ 75.430015] [] sys_init_module+0xba/0x200 [ 75.430015] [] system_call_fastpath+0x16/0x1b [ 75.430015] } [ 75.430015] ... key at: [] __key.41268+0x0/0xfffffffffffece63 [nouveau] [ 75.430015] ... acquired at: [ 75.430015] [] check_usage+0x138/0x1e0 [ 75.430015] [] check_irq_usage+0x60/0xf0 [ 75.430015] [] check_prev_add+0xc4/0x710 [ 75.430015] [] validate_chain+0x5a4/0x700 [ 75.430015] [] __lock_acquire+0x4b6/0x9d0 [ 75.430015] [] lock_acquire+0xa2/0x1d0 [ 75.430015] [] _raw_spin_lock+0x40/0x80 [ 75.430015] [] drm_mm_put_block+0x93/0x190 [drm] [ 75.430015] [] nouveau_gpuobj_del+0x135/0x1c0 [nouveau] [ 75.430015] [] nouveau_gpuobj_ref_del+0x9d/0xf0 [nouveau] [ 75.430015] [] nv50_graph_destroy_context+0xb6/0x110 [nouveau] [ 75.430015] [] nouveau_channel_free+0x128/0x2b0 [nouveau] [ 75.430015] [] nouveau_ioctl_fifo_free+0x6e/0x80 [nouveau] [ 75.430015] [] drm_ioctl+0x37b/0x4d0 [drm] [ 75.430015] [] do_vfs_ioctl+0x9f/0x330 [ 75.430015] [] sys_ioctl+0x4f/0x80 [ 75.430015] [] system_call_fastpath+0x16/0x1b [ 75.430015] [ 75.430015] [ 75.430015] the dependencies between the lock to be acquired and HARDIRQ-irq-unsafe lock: [ 75.430015] -> (&(&mm->unused_lock)->rlock){+.+...} ops: 9351 { [ 75.430015] HARDIRQ-ON-W at: [ 75.430015] [] mark_irqflags+0x120/0x190 [ 75.430015] [] __lock_acquire+0x57c/0x9d0 [ 75.430015] [] lock_acquire+0xa2/0x1d0 [ 75.430015] [] _raw_spin_lock+0x40/0x80 [ 75.430015] [] drm_mm_pre_get+0x25/0x1e0 [drm] [ 75.430015] [] ttm_bo_setup_vm+0x2b/0x140 [ttm] [ 75.430015] [] ttm_bo_init+0x24d/0x290 [ttm] [ 75.430015] [] nouveau_bo_new+0x161/0x2d0 [nouveau] [ 75.430015] [] nouveau_mem_init+0x200/0x580 [nouveau] [ 75.430015] [] nouveau_card_init+0xf6/0x300 [nouveau] [ 75.430015] [] nouveau_load+0x351/0x660 [nouveau] [ 75.430015] [] drm_get_pci_dev+0x183/0x3a0 [drm] [ 75.430015] [] nouveau_pci_probe+0x15/0x17 [nouveau] [ 75.430015] [] local_pci_probe+0x5f/0xd0 [ 75.430015] [] pci_device_probe+0x88/0xb0 [ 75.430015] [] really_probe+0x68/0x190 [ 75.430015] [] driver_probe_device+0x45/0x70 [ 75.430015] [] __driver_attach+0x9b/0xa0 [ 75.430015] [] bus_for_each_dev+0x6c/0xa0 [ 75.430015] [] driver_attach+0x1e/0x20 [ 75.430015] [] bus_add_driver+0xd5/0x370 [ 75.430015] [] driver_register+0x78/0x140 [ 75.430015] [] __pci_register_driver+0x66/0xe0 [ 75.430015] [] drm_pci_init+0xdf/0xf0 [drm] [ 75.430015] [] drm_init+0x58/0x70 [drm] [ 75.430015] [] 0xffffffffa085b048 [ 75.430015] [] do_one_initcall+0x43/0x180 [ 75.430015] [] sys_init_module+0xba/0x200 [ 75.430015] [] system_call_fastpath+0x16/0x1b [ 75.430015] SOFTIRQ-ON-W at: [ 75.430015] [] mark_irqflags+0x145/0x190 [ 75.430015] [] __lock_acquire+0x57c/0x9d0 [ 75.430015] [] lock_acquire+0xa2/0x1d0 [ 75.430015] [] _raw_spin_lock+0x40/0x80 [ 75.430015] [] drm_mm_pre_get+0x25/0x1e0 [drm] [ 75.430015] [] ttm_bo_setup_vm+0x2b/0x140 [ttm] [ 75.430015] [] ttm_bo_init+0x24d/0x290 [ttm] [ 75.430015] [] nouveau_bo_new+0x161/0x2d0 [nouveau] [ 75.430015] [] nouveau_mem_init+0x200/0x580 [nouveau] [ 75.430015] [] nouveau_card_init+0xf6/0x300 [nouveau] [ 75.430015] [] nouveau_load+0x351/0x660 [nouveau] [ 75.430015] [] drm_get_pci_dev+0x183/0x3a0 [drm] [ 75.430015] [] nouveau_pci_probe+0x15/0x17 [nouveau] [ 75.430015] [] local_pci_probe+0x5f/0xd0 [ 75.430015] [] pci_device_probe+0x88/0xb0 [ 75.430015] [] really_probe+0x68/0x190 [ 75.430015] [] driver_probe_device+0x45/0x70 [ 75.430015] [] __driver_attach+0x9b/0xa0 [ 75.430015] [] bus_for_each_dev+0x6c/0xa0 [ 75.430015] [] driver_attach+0x1e/0x20 [ 75.430015] [] bus_add_driver+0xd5/0x370 [ 75.430015] [] driver_register+0x78/0x140 [ 75.430015] [] __pci_register_driver+0x66/0xe0 [ 75.430015] [] drm_pci_init+0xdf/0xf0 [drm] [ 75.430015] [] drm_init+0x58/0x70 [drm] [ 75.430015] [] 0xffffffffa085b048 [ 75.430015] [] do_one_initcall+0x43/0x180 [ 75.430015] [] sys_init_module+0xba/0x200 [ 75.430015] [] system_call_fastpath+0x16/0x1b [ 75.430015] INITIAL USE at: [ 75.430015] [] __lock_acquire+0x342/0x9d0 [ 75.430015] [] lock_acquire+0xa2/0x1d0 [ 75.430015] [] _raw_spin_lock+0x40/0x80 [ 75.430015] [] drm_mm_pre_get+0x25/0x1e0 [drm] [ 75.430015] [] ttm_bo_setup_vm+0x2b/0x140 [ttm] [ 75.430015] [] ttm_bo_init+0x24d/0x290 [ttm] [ 75.430015] [] nouveau_bo_new+0x161/0x2d0 [nouveau] [ 75.430015] [] nouveau_mem_init+0x200/0x580 [nouveau] [ 75.430015] [] nouveau_card_init+0xf6/0x300 [nouveau] [ 75.430015] [] nouveau_load+0x351/0x660 [nouveau] [ 75.430015] [] drm_get_pci_dev+0x183/0x3a0 [drm] [ 75.430015] [] nouveau_pci_probe+0x15/0x17 [nouveau] [ 75.430015] [] local_pci_probe+0x5f/0xd0 [ 75.430015] [] pci_device_probe+0x88/0xb0 [ 75.430015] [] really_probe+0x68/0x190 [ 75.430015] [] driver_probe_device+0x45/0x70 [ 75.430015] [] __driver_attach+0x9b/0xa0 [ 75.430015] [] bus_for_each_dev+0x6c/0xa0 [ 75.430015] [] driver_attach+0x1e/0x20 [ 75.430015] [] bus_add_driver+0xd5/0x370 [ 75.430015] [] driver_register+0x78/0x140 [ 75.430015] [] __pci_register_driver+0x66/0xe0 [ 75.430015] [] drm_pci_init+0xdf/0xf0 [drm] [ 75.430015] [] drm_init+0x58/0x70 [drm] [ 75.430015] [] 0xffffffffa085b048 [ 75.430015] [] do_one_initcall+0x43/0x180 [ 75.430015] [] sys_init_module+0xba/0x200 [ 75.430015] [] system_call_fastpath+0x16/0x1b [ 75.430015] } [ 75.430015] ... key at: [] __key.38649+0x0/0xffffffffffff3460 [drm] [ 75.430015] ... acquired at: [ 75.430015] [] check_usage+0x138/0x1e0 [ 75.430015] [] check_irq_usage+0x60/0xf0 [ 75.430015] [] check_prev_add+0xc4/0x710 [ 75.430015] [] validate_chain+0x5a4/0x700 [ 75.430015] [] __lock_acquire+0x4b6/0x9d0 [ 75.430015] [] lock_acquire+0xa2/0x1d0 [ 75.430015] [] _raw_spin_lock+0x40/0x80 [ 75.430015] [] drm_mm_put_block+0x93/0x190 [drm] [ 75.430015] [] nouveau_gpuobj_del+0x135/0x1c0 [nouveau] [ 75.430015] [] nouveau_gpuobj_ref_del+0x9d/0xf0 [nouveau] [ 75.430015] [] nv50_graph_destroy_context+0xb6/0x110 [nouveau] [ 75.430015] [] nouveau_channel_free+0x128/0x2b0 [nouveau] [ 75.430015] [] nouveau_ioctl_fifo_free+0x6e/0x80 [nouveau] [ 75.430015] [] drm_ioctl+0x37b/0x4d0 [drm] [ 75.430015] [] do_vfs_ioctl+0x9f/0x330 [ 75.430015] [] sys_ioctl+0x4f/0x80 [ 75.430015] [] system_call_fastpath+0x16/0x1b [ 75.430015] [ 75.430015] [ 75.430015] stack backtrace: [ 75.430015] Pid: 3109, comm: Xorg Not tainted 2.6.36-rc3-wl-47417-g8164729-dirty #183 [ 75.430015] Call Trace: [ 75.430015] [] print_bad_irq_dependency+0x2ce/0x370 [ 75.430015] [] check_usage+0x138/0x1e0 [ 75.430015] [] check_irq_usage+0x60/0xf0 [ 75.430015] [] check_prev_add+0xc4/0x710 [ 75.430015] [] ? native_sched_clock+0x27/0x80 [ 75.430015] [] validate_chain+0x5a4/0x700 [ 75.430015] [] __lock_acquire+0x4b6/0x9d0 [ 75.430015] [] ? native_sched_clock+0x27/0x80 [ 75.430015] [] lock_acquire+0xa2/0x1d0 [ 75.430015] [] ? drm_mm_put_block+0x93/0x190 [drm] [ 75.430015] [] _raw_spin_lock+0x40/0x80 [ 75.430015] [] ? drm_mm_put_block+0x93/0x190 [drm] [ 75.430015] [] drm_mm_put_block+0x93/0x190 [drm] [ 75.430015] [] nouveau_gpuobj_del+0x135/0x1c0 [nouveau] [ 75.430015] [] nouveau_gpuobj_ref_del+0x9d/0xf0 [nouveau] [ 75.430015] [] nv50_graph_destroy_context+0xb6/0x110 [nouveau] [ 75.430015] [] nouveau_channel_free+0x128/0x2b0 [nouveau] [ 75.430015] [] nouveau_ioctl_fifo_free+0x6e/0x80 [nouveau] [ 75.430015] [] drm_ioctl+0x37b/0x4d0 [drm] [ 75.430015] [] ? native_sched_clock+0x27/0x80 [ 75.430015] [] ? nouveau_ioctl_fifo_free+0x0/0x80 [nouveau] [ 75.430015] [] ? get_parent_ip+0x11/0x50 [ 75.430015] [] ? get_parent_ip+0x11/0x50 [ 75.430015] [] ? sub_preempt_count+0x9d/0xd0 [ 75.430015] [] ? put_lock_stats+0xe/0x30 [ 75.430015] [] ? sys_munmap+0x61/0x80 [ 75.430015] [] do_vfs_ioctl+0x9f/0x330 [ 75.430015] [] sys_ioctl+0x4f/0x80 [ 75.430015] [] system_call_fastpath+0x16/0x1b (also, while I'm at asking questions, is it a known problem that switching between using an external monitor and not using it will with high probability lock up? Same for using dpms to turn off the screens, though that might just be the same thing?) johannes