[PATCH] drm/mgag200: Fix calling drm_fb_helper_fini() twice

Ingo Molnar mingo at kernel.org
Sat Oct 3 03:55:50 PDT 2015


* Archit Taneja <architt at codeaurora.org> wrote:

> 
> 
> On 9/17/2015 2:04 PM, Ingo Molnar wrote:
> >
> >
> >* Ingo Molnar <mingo at kernel.org> wrote:
> >
> >
> >
> >>So this patch was whitespace damaged - I applied it by hand and made the commit
> >
> >>below. This has solved the crash, thanks Archit!
> >
> >
> >
> >Spoke too soon - the attached (allyesconfig-ish) config still crashes, first there
> >
> >are a handful of kobject debug warnings, then:
> 
> The error handling in the driver is bad. The main problem is that the
> driver_load op calls mgag200_driver_unload if anything fails, which doesn't
> work well if driver_load fails mid way.
> 
> I'll post out patches to fix this. But you'll need to undo the patch
> I'd sent previously.

Thanks, with Linus's latest kernel that has your fixes included I can no longer 
reproduce the crash.

The MGAG200 driver still generates the following kobject warnings:

[  269.353392] calling  mgag200_init+0x0/0x3b @ 1
[  269.358702] bus: 'pci': add driver mgag200
[  269.363760] bus: 'pci': driver_probe_device: matched device 0000:0b:00.0 with driver mgag200
[  269.373748] bus: 'pci': really_probe: probing driver mgag200 with device 0000:0b:00.0
[  269.383073] mgag200 0000:0b:00.0: no default pinctrl state
[  269.389590] devices_kset: Moving 0000:0b:00.0 to end of list
[  269.399437] device: 'controlD64': device_add
[  269.404901] PM: Adding info for No Bus:controlD64
[  269.410986] device: 'card0': device_add
[  269.415877] PM: Adding info for No Bus:card0
[  269.431210] ------------[ cut here ]------------
[  269.436655] WARNING: CPU: 0 PID: 230 at lib/kobject.c:582 kobject_get+0x33/0x6a()
[  269.445503] kobject: 'ttm' (ffffffff86c288b0): is not initialized, yet kobject_get() is being called.
[  269.456290] Modules linked in:
[  269.460057] CPU: 0 PID: 230 Comm: kworker/0:1 Tainted: G        W    L  4.3.0-rc3-02057-g77880ef-dirty #183
[  269.471428] Hardware name: Intel Corporation S2600GZ/S2600GZ, BIOS SE5C600.86B.02.02.0002.122320131210 12/23/2013
[  269.483389] Workqueue: events work_for_cpu_fn
[  269.488612]  0000000000000000 ffff88041fabf9a8 ffffffff81892127 ffff88041fabf9f0
[  269.497809]  ffff88041fabf9e0 ffffffff81145b0f ffffffff8189405f ffffffff86c288b0
[  269.506882]  0000000000000000 ffffffff86c288b0 0000000000ff0000 ffff88041fabfa40
[  269.515943] Call Trace:
[  269.518951]  [<ffffffff81892127>] dump_stack+0x4b/0x64
[  269.524975]  [<ffffffff81145b0f>] warn_slowpath_common+0x9f/0xb8
[  269.531970]  [<ffffffff8189405f>] ? kobject_get+0x33/0x6a
[  269.538271]  [<ffffffff81145b74>] warn_slowpath_fmt+0x4c/0x4e
[  269.544976]  [<ffffffff8118a84a>] ? lock_is_held+0x55/0x66
[  269.551382]  [<ffffffff8189405f>] kobject_get+0x33/0x6a
[  269.557500]  [<ffffffff81894723>] kobject_add_internal+0x58/0x2c4
[  269.564589]  [<ffffffff81894a02>] kobject_init_and_add+0x73/0x7e
[  269.571586]  [<ffffffff81b9ba3f>] ttm_mem_global_init+0xc6/0x2cd
[  269.578583]  [<ffffffff812916f1>] ? kasan_poison_shadow+0x2f/0x31
[  269.585674]  [<ffffffff81291f09>] ? kasan_unpoison_shadow+0x14/0x35
[  269.592958]  [<ffffffff812916f1>] ? kasan_poison_shadow+0x2f/0x31
[  269.600044]  [<ffffffff81291f75>] ? kasan_kmalloc+0x4b/0x50
[  269.606544]  [<ffffffff8128ebc4>] ? __kmalloc+0x13e/0x180
[  269.612856]  [<ffffffff812916f1>] ? kasan_poison_shadow+0x2f/0x31
[  269.619945]  [<ffffffff81b9496c>] ? drm_global_item_ref+0x67/0xad
[  269.627056]  [<ffffffff81cbf3c2>] mgag200_ttm_mem_global_init+0x12/0x14
[  269.634725]  [<ffffffff81b94983>] drm_global_item_ref+0x7e/0xad
[  269.641619]  [<ffffffff81cbf489>] mgag200_mm_init+0x50/0x199
[  269.648223]  [<ffffffff81cba964>] mgag200_driver_load+0x34a/0x4c7
[  269.655316]  [<ffffffff81b838ad>] drm_dev_register+0x6f/0xb0
[  269.661923]  [<ffffffff81b860d5>] drm_get_pci_dev+0xff/0x1c2
[  269.668526]  [<ffffffff81cbe709>] mga_pci_probe+0xa6/0xad
[  269.674840]  [<ffffffff81911f27>] local_pci_probe+0x3d/0x82
[  269.685976]  [<ffffffff811599c1>] work_for_cpu_fn+0x14/0x1b
[  269.692622]  [<ffffffff8115d50b>] process_one_work+0x28e/0x4ef
[  269.699424]  [<ffffffff8115d3ed>] ? process_one_work+0x170/0x4ef
[  269.706438]  [<ffffffff8115d78d>] process_scheduled_works+0x21/0x2f
[  269.713728]  [<ffffffff8115dc06>] worker_thread+0x1fb/0x2bd
[  269.720238]  [<ffffffff8115da0b>] ? cancel_delayed_work_sync+0x15/0x15
[  269.727815]  [<ffffffff8115da0b>] ? cancel_delayed_work_sync+0x15/0x15
[  269.735395]  [<ffffffff81162dcb>] kthread+0xc5/0xcd
[  269.741118]  [<ffffffff81162d06>] ? kthread_parkme+0x24/0x24
[  269.747727]  [<ffffffff83d556ef>] ret_from_fork+0x3f/0x70
[  269.754041]  [<ffffffff81162d06>] ? kthread_parkme+0x24/0x24
[  269.760641] ---[ end trace 0609b8147f0ef5df ]---
[  269.766074] ------------[ cut here ]------------
[  269.771499] WARNING: CPU: 0 PID: 230 at include/linux/kref.h:47 kobject_get+0x5d/0x6a()
[  269.780921] Modules linked in:
[  269.784691] CPU: 0 PID: 230 Comm: kworker/0:1 Tainted: G        W    L  4.3.0-rc3-02057-g77880ef-dirty #183
[  269.796062] Hardware name: Intel Corporation S2600GZ/S2600GZ, BIOS SE5C600.86B.02.02.0002.122320131210 12/23/2013
[  269.808019] Workqueue: events work_for_cpu_fn
[  269.813274]  0000000000000000 ffff88041fabf9f8 ffffffff81892127 0000000000000000
[  269.822347]  ffff88041fabfa30 ffffffff81145b0f ffffffff81894089 ffffffff86c288b0
[  269.831405]  0000000000000000 ffffffff86c288b0 0000000000ff0000 ffff88041fabfa40
[  269.840455] Call Trace:
[  269.843459]  [<ffffffff81892127>] dump_stack+0x4b/0x64
[  269.849477]  [<ffffffff81145b0f>] warn_slowpath_common+0x9f/0xb8
[  269.856468]  [<ffffffff81894089>] ? kobject_get+0x5d/0x6a
[  269.862783]  [<ffffffff81145bd6>] warn_slowpath_null+0x1a/0x1c
[  269.869571]  [<ffffffff81894089>] kobject_get+0x5d/0x6a
[  269.875690]  [<ffffffff81894723>] kobject_add_internal+0x58/0x2c4
[  269.882784]  [<ffffffff81894a02>] kobject_init_and_add+0x73/0x7e
[  269.889778]  [<ffffffff81b9ba3f>] ttm_mem_global_init+0xc6/0x2cd
[  269.896770]  [<ffffffff812916f1>] ? kasan_poison_shadow+0x2f/0x31
[  269.903865]  [<ffffffff81291f09>] ? kasan_unpoison_shadow+0x14/0x35
[  269.911147]  [<ffffffff812916f1>] ? kasan_poison_shadow+0x2f/0x31
[  269.918228]  [<ffffffff81291f75>] ? kasan_kmalloc+0x4b/0x50
[  269.924731]  [<ffffffff8128ebc4>] ? __kmalloc+0x13e/0x180
[  269.931046]  [<ffffffff812916f1>] ? kasan_poison_shadow+0x2f/0x31
[  269.938136]  [<ffffffff81b9496c>] ? drm_global_item_ref+0x67/0xad
[  269.945226]  [<ffffffff81cbf3c2>] mgag200_ttm_mem_global_init+0x12/0x14
[  269.952903]  [<ffffffff81b94983>] drm_global_item_ref+0x7e/0xad
[  269.959797]  [<ffffffff81cbf489>] mgag200_mm_init+0x50/0x199
[  269.966400]  [<ffffffff81cba964>] mgag200_driver_load+0x34a/0x4c7
[  269.973489]  [<ffffffff81b838ad>] drm_dev_register+0x6f/0xb0
[  269.980091]  [<ffffffff81b860d5>] drm_get_pci_dev+0xff/0x1c2
[  269.986698]  [<ffffffff81cbe709>] mga_pci_probe+0xa6/0xad
[  269.993013]  [<ffffffff81911f27>] local_pci_probe+0x3d/0x82
[  269.999519]  [<ffffffff811599c1>] work_for_cpu_fn+0x14/0x1b
[  270.006025]  [<ffffffff8115d50b>] process_one_work+0x28e/0x4ef
[  270.012826]  [<ffffffff8115d3ed>] ? process_one_work+0x170/0x4ef
[  270.019818]  [<ffffffff8115d78d>] process_scheduled_works+0x21/0x2f
[  270.027100]  [<ffffffff8115dc06>] worker_thread+0x1fb/0x2bd
[  270.033606]  [<ffffffff8115da0b>] ? cancel_delayed_work_sync+0x15/0x15
[  270.041182]  [<ffffffff8115da0b>] ? cancel_delayed_work_sync+0x15/0x15
[  270.048758]  [<ffffffff81162dcb>] kthread+0xc5/0xcd
[  270.054491]  [<ffffffff81162d06>] ? kthread_parkme+0x24/0x24
[  270.061096]  [<ffffffff83d556ef>] ret_from_fork+0x3f/0x70
[  270.067409]  [<ffffffff81162d06>] ? kthread_parkme+0x24/0x24
[  270.074012] ---[ end trace 0609b8147f0ef5e0 ]---
[  270.079448] ------------[ cut here ]------------
[  270.084882] WARNING: CPU: 0 PID: 230 at lib/kobject.c:674 kobject_put+0x33/0x47()
[  270.093723] kobject: 'ttm' (ffffffff86c288b0): is not initialized, yet kobject_put() is being called.
[  270.104503] Modules linked in:
[  270.108272] CPU: 0 PID: 230 Comm: kworker/0:1 Tainted: G        W    L  4.3.0-rc3-02057-g77880ef-dirty #183
[  270.119648] Hardware name: Intel Corporation S2600GZ/S2600GZ, BIOS SE5C600.86B.02.02.0002.122320131210 12/23/2013
[  270.131604] Workqueue: events work_for_cpu_fn
[  270.136828]  0000000000000000 ffff88041fabf9a8 ffffffff81892127 ffff88041fabf9f0
[  270.145900]  ffff88041fabf9e0 ffffffff81145b0f ffffffff818940c9 ffffffff86c288b0
[  270.154971]  ffffffff86c288b0 00000000fffffffe 0000000000ff0000 ffff88041fabfa40
[  270.164021] Call Trace:
[  270.167026]  [<ffffffff81892127>] dump_stack+0x4b/0x64
[  270.173045]  [<ffffffff81145b0f>] warn_slowpath_common+0x9f/0xb8
[  270.180036]  [<ffffffff818940c9>] ? kobject_put+0x33/0x47
[  270.186349]  [<ffffffff81145b74>] warn_slowpath_fmt+0x4c/0x4e
[  270.193099]  [<ffffffff818940c9>] kobject_put+0x33/0x47
[  270.199217]  [<ffffffff81894966>] kobject_add_internal+0x29b/0x2c4
[  270.206405]  [<ffffffff81894a02>] kobject_init_and_add+0x73/0x7e
[  270.213401]  [<ffffffff81b9ba3f>] ttm_mem_global_init+0xc6/0x2cd
[  270.220385]  [<ffffffff812916f1>] ? kasan_poison_shadow+0x2f/0x31
[  270.227473]  [<ffffffff81291f09>] ? kasan_unpoison_shadow+0x14/0x35
[  270.234755]  [<ffffffff812916f1>] ? kasan_poison_shadow+0x2f/0x31
[  270.241844]  [<ffffffff81291f75>] ? kasan_kmalloc+0x4b/0x50
[  270.248347]  [<ffffffff8128ebc4>] ? __kmalloc+0x13e/0x180
[  270.254678]  [<ffffffff812916f1>] ? kasan_poison_shadow+0x2f/0x31
[  270.261769]  [<ffffffff81b9496c>] ? drm_global_item_ref+0x67/0xad
[  270.268857]  [<ffffffff81cbf3c2>] mgag200_ttm_mem_global_init+0x12/0x14
[  270.276519]  [<ffffffff81b94983>] drm_global_item_ref+0x7e/0xad
[  270.283416]  [<ffffffff81cbf489>] mgag200_mm_init+0x50/0x199
[  270.290020]  [<ffffffff81cba964>] mgag200_driver_load+0x34a/0x4c7
[  270.297109]  [<ffffffff81b838ad>] drm_dev_register+0x6f/0xb0
[  270.303712]  [<ffffffff81b860d5>] drm_get_pci_dev+0xff/0x1c2
[  270.310317]  [<ffffffff81cbe709>] mga_pci_probe+0xa6/0xad
[  270.316642]  [<ffffffff81911f27>] local_pci_probe+0x3d/0x82
[  270.323151]  [<ffffffff811599c1>] work_for_cpu_fn+0x14/0x1b
[  270.329655]  [<ffffffff8115d50b>] process_one_work+0x28e/0x4ef
[  270.336455]  [<ffffffff8115d3ed>] ? process_one_work+0x170/0x4ef
[  270.343449]  [<ffffffff8115d78d>] process_scheduled_works+0x21/0x2f
[  270.350735]  [<ffffffff8115dc06>] worker_thread+0x1fb/0x2bd
[  270.357242]  [<ffffffff8115da0b>] ? cancel_delayed_work_sync+0x15/0x15
[  270.364821]  [<ffffffff8115da0b>] ? cancel_delayed_work_sync+0x15/0x15
[  270.372398]  [<ffffffff81162dcb>] kthread+0xc5/0xcd
[  270.378125]  [<ffffffff81162d06>] ? kthread_parkme+0x24/0x24
[  270.384733]  [<ffffffff83d556ef>] ret_from_fork+0x3f/0x70
[  270.391045]  [<ffffffff81162d06>] ? kthread_parkme+0x24/0x24
[  270.397646] ---[ end trace 0609b8147f0ef5e1 ]---
[  270.403093] ------------[ cut here ]------------
[  270.408531] WARNING: CPU: 0 PID: 230 at lib/kobject.c:244 kobject_add_internal+0x281/0x2c4()
[  270.418444] kobject_add_internal failed for memory_accounting (error: -2 parent: kkkkkkk\xffffffa5\xffffffbb\xffffffbb\xffffffbb\xffffffbb\xffffffbb\xffffffbb\xffffffbb\xffffffbb`R\xffffffb0\xffffff88\xffffffff\xffffffffsD\xffffff89\xffffff81\xffffffff\xffffffff\xffffffff\xffffffff>\xffffffe3(\xffffff81\xffffffff\xffffffff\xffffffff\xffffffffJ)\xffffff81\xffffffff\xffffffff\xffffffff\xffffffff\xffffffaf\xfffffff6\xffffff89\xffffff81\xffffffff\xffffffff\xffffffff\xffffffffsD\xffffff89\xffffff81\xffffffff\xffffffff\xffffffff\xffffffff\xffffff9c&܁\xffffffff\xffffffff\xffffffff\xffffffffֱR\xffffff87\xffffffff\xffffffff\xffffffff\xffffffff\xffffff88!)
[  270.435559] Modules linked in:
[  270.439326] CPU: 0 PID: 230 Comm: kworker/0:1 Tainted: G        W    L  4.3.0-rc3-02057-g77880ef-dirty #183
[  270.450700] Hardware name: Intel Corporation S2600GZ/S2600GZ, BIOS SE5C600.86B.02.02.0002.122320131210 12/23/2013
[  270.462657] Workqueue: events work_for_cpu_fn
[  270.467875]  0000000000000000 ffff88041fabf9c0 ffffffff81892127 ffff88041fabfa08
[  270.476941]  ffff88041fabf9f8 ffffffff81145b0f ffffffff8189494c ffff88041fe5e270
[  270.486017]  ffffffff86c288b0 00000000fffffffe 0000000000ff0000 ffff88041fabfa58
[  270.495088] Call Trace:
[  270.498094]  [<ffffffff81892127>] dump_stack+0x4b/0x64
[  270.504118]  [<ffffffff81145b0f>] warn_slowpath_common+0x9f/0xb8
[  270.511113]  [<ffffffff8189494c>] ? kobject_add_internal+0x281/0x2c4
[  270.518496]  [<ffffffff81145b74>] warn_slowpath_fmt+0x4c/0x4e
[  270.525197]  [<ffffffff8189494c>] kobject_add_internal+0x281/0x2c4
[  270.532387]  [<ffffffff81894a02>] kobject_init_and_add+0x73/0x7e
[  270.539380]  [<ffffffff81b9ba3f>] ttm_mem_global_init+0xc6/0x2cd
[  270.546372]  [<ffffffff812916f1>] ? kasan_poison_shadow+0x2f/0x31
[  270.553460]  [<ffffffff81291f09>] ? kasan_unpoison_shadow+0x14/0x35
[  270.560744]  [<ffffffff812916f1>] ? kasan_poison_shadow+0x2f/0x31
[  270.567844]  [<ffffffff81291f75>] ? kasan_kmalloc+0x4b/0x50
[  270.574350]  [<ffffffff8128ebc4>] ? __kmalloc+0x13e/0x180
[  270.580665]  [<ffffffff812916f1>] ? kasan_poison_shadow+0x2f/0x31
[  270.587757]  [<ffffffff81b9496c>] ? drm_global_item_ref+0x67/0xad
[  270.594847]  [<ffffffff81cbf3c2>] mgag200_ttm_mem_global_init+0x12/0x14
[  270.602522]  [<ffffffff81b94983>] drm_global_item_ref+0x7e/0xad
[  270.609423]  [<ffffffff81cbf489>] mgag200_mm_init+0x50/0x199
[  270.616027]  [<ffffffff81cba964>] mgag200_driver_load+0x34a/0x4c7
[  270.623118]  [<ffffffff81b838ad>] drm_dev_register+0x6f/0xb0
[  270.629722]  [<ffffffff81b860d5>] drm_get_pci_dev+0xff/0x1c2
[  270.636327]  [<ffffffff81cbe709>] mga_pci_probe+0xa6/0xad
[  270.642642]  [<ffffffff81911f27>] local_pci_probe+0x3d/0x82
[  270.649154]  [<ffffffff811599c1>] work_for_cpu_fn+0x14/0x1b
[  270.655664]  [<ffffffff8115d50b>] process_one_work+0x28e/0x4ef
[  270.662465]  [<ffffffff8115d3ed>] ? process_one_work+0x170/0x4ef
[  270.669459]  [<ffffffff8115d78d>] process_scheduled_works+0x21/0x2f
[  270.676747]  [<ffffffff8115dc06>] worker_thread+0x1fb/0x2bd
[  270.683259]  [<ffffffff8115da0b>] ? cancel_delayed_work_sync+0x15/0x15
[  270.690836]  [<ffffffff8115da0b>] ? cancel_delayed_work_sync+0x15/0x15
[  270.698414]  [<ffffffff81162dcb>] kthread+0xc5/0xcd
[  270.704143]  [<ffffffff81162d06>] ? kthread_parkme+0x24/0x24
[  270.710742]  [<ffffffff83d556ef>] ret_from_fork+0x3f/0x70
[  270.717055]  [<ffffffff81162d06>] ? kthread_parkme+0x24/0x24
[  270.723658] ---[ end trace 0609b8147f0ef5e2 ]---
[  270.729111] [drm:mgag200_mm_init] *ERROR* Failed setting up TTM memory accounting subsystem.
[  270.739731] PM: Removing info for No Bus:card0
[  270.746079] PM: Removing info for No Bus:controlD64
[  270.755395] mgag200: probe of 0000:0b:00.0 failed with error -2
[  270.763040] initcall mgag200_init+0x0/0x3b returned 0 after 1371312 usecs
[  270.873569] calling  cirrus_init+0x0/0x3b @ 1

and fails - but does not crash.

Similar config to what I sent you earlier in this thread.

Thanks,

	Ingo


More information about the dri-devel mailing list