flushing uninitialized work item in radeon init failure path

Tejun Heo tj at kernel.org
Thu Apr 4 09:50:42 PDT 2013


Hello,

The following happens on my test machine which has an on-board VGA
which is not connected.  The failure is expected but, in the failure
path, it calls radeon_irq_kms_fini() which flushes @rdev->*_work when
@rdev seemingly hasn't gone through radeon_irq_kms_init(), ending up
trying to flush uninitialized work items triggering the following
lockdep warning.  Well, at least, that's what I think is happening.

 [drm] Initialized drm 1.1.0 20060810
 [drm] radeon kernel modesetting enabled.
 radeon 0000:00:0c.0: enabling device (0080 -> 0083)
 [drm] initializing kernel modesetting (RV100 0x1002:0x515E 0x1002:0x515E).
 [drm] register mmio base: 0xFEBE0000
 [drm] register mmio size: 65536
 radeon 0000:00:0c.0: Invalid ROM contents
 radeon 0000:00:0c.0: Invalid ROM contents
 [drm:radeon_get_bios] *ERROR* Unable to locate a BIOS ROM
 radeon 0000:00:0c.0: Card not posted and no BIOS - ignoring
 radeon 0000:00:0c.0: Fatal error during GPU init
 [drm] radeon: finishing device.
 [TTM] Memory type 2 has not been initialized
 [drm] radeon: cp finalized
 INFO: trying to register non-static key.
 the code is fine but needs lockdep annotation.
 turning off the locking correctness validator.
 Pid: 50, comm: kworker/0:1 Not tainted 3.9.0-rc5-work+ #1
 Call Trace:
  [<ffffffff810f9830>] __lock_acquire+0x1840/0x1c50
  [<ffffffff810faba6>] ? mark_held_locks+0x86/0x110
  [<ffffffff81c678a0>] ? retint_restore_args+0xe/0xe
  [<ffffffff810fad45>] ? trace_hardirqs_on_caller+0x115/0x1a0
  [<ffffffff8143635e>] ? trace_hardirqs_on_thunk+0x3a/0x3f
  [<ffffffff810fa255>] lock_acquire+0x95/0x1e0
  [<ffffffff810b3315>] ? flush_work+0x5/0x270
  [<ffffffff810b335c>] flush_work+0x4c/0x270
  [<ffffffff810b3315>] ? flush_work+0x5/0x270
  [<ffffffff81c59b7b>] ? printk+0x4d/0x4f
  [<ffffffff8155677f>] radeon_irq_kms_fini+0x2f/0x70
  [<ffffffff815604bf>] r100_fini+0x4f/0x90
  [<ffffffff81529362>] radeon_device_fini+0x42/0x100
  [<ffffffff8152abdc>] radeon_driver_unload_kms+0x3c/0x60
  [<ffffffff8152acbd>] radeon_driver_load_kms+0xbd/0x160
  [<ffffffff8150320e>] drm_get_pci_dev+0x17e/0x2a0
  [<ffffffff81527dfb>] radeon_pci_probe+0xab/0xd0
  [<ffffffff8144c863>] local_pci_probe+0x23/0x40
  [<ffffffff810b07e8>] work_for_cpu_fn+0x18/0x30
  [<ffffffff810b44f6>] process_one_work+0x1f6/0x670
  [<ffffffff810b448a>] ? process_one_work+0x18a/0x670
  [<ffffffff810b499c>] process_scheduled_works+0x2c/0x40
  [<ffffffff810b4eb2>] worker_thread+0x2b2/0x380
  [<ffffffff810b4c00>] ? rescuer_thread+0x250/0x250
  [<ffffffff810ba7ea>] kthread+0xea/0xf0
  [<ffffffff810ba700>] ? __init_kthread_worker+0x70/0x70
  [<ffffffff81c682dc>] ret_from_fork+0x7c/0xb0
  [<ffffffff810ba700>] ? __init_kthread_worker+0x70/0x70
 radeon: probe of 0000:00:0c.0 failed with error -22

Thanks.

-- 
tejun


More information about the dri-devel mailing list