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

Ingo Molnar
2015-10-03T10:56:18Z

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

>
>
> On 9/17/2015 2:04 PM, Ingo Molnar wrote:
> >
> >
> >* Ingo Molnar <mingo@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\x0e\a\xffffff88\xffffffff\xffffffffsD\xffffff89\xffffff81\xffffffff\xffffffff\xffffffff\xffffffff>\xffffffe3(\xffffff81\xffffffff\xffffffff\xffffffff\xffffffffJ\x13)\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