From: Harry Wentland <harry.wentland-5C7GfCeVMHo@public.gmane.org>
To: "Michel Dänzer" <michel-otUistvHUpPR7s880joybQ@public.gmane.org>,
christian.koenig-5C7GfCeVMHo@public.gmane.org,
"Shirish S" <shirish.s-5C7GfCeVMHo@public.gmane.org>
Cc: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org
Subject: Re: [PATCH] drm/amd/display: avoid sleeping in atomic context while creating new context or state
Date: Thu, 7 Jun 2018 10:46:59 -0400 [thread overview]
Message-ID: <cfb7118a-d5a2-7d33-0ccd-43bf22b91cd7@amd.com> (raw)
In-Reply-To: <3ed3bc96-4218-de1f-ba0a-1e4102883438-otUistvHUpPR7s880joybQ@public.gmane.org>
On 2018-06-07 10:44 AM, Michel Dänzer wrote:
> On 2018-05-31 08:05 PM, Christian König wrote:
>> Am 30.05.2018 um 18:03 schrieb Harry Wentland:
>>> On 2018-05-30 06:17 AM, Shirish S wrote:
>>>> This patch fixes the warning messages that are caused due to calling
>>>> sleep in atomic context as below:
>>>>
>>>> BUG: sleeping function called from invalid context at mm/slab.h:419
>>>> in_atomic(): 1, irqs_disabled(): 1, pid: 5, name: kworker/u4:0
>>>> CPU: 1 PID: 5 Comm: kworker/u4:0 Tainted: G W 4.14.35 #941
>>>> Workqueue: events_unbound commit_work
>>>> Call Trace:
>>>> dump_stack+0x4d/0x63
>>>> ___might_sleep+0x11f/0x12e
>>>> kmem_cache_alloc_trace+0x41/0xea
>>>> dc_create_state+0x1f/0x30
>>>> dc_commit_updates_for_stream+0x73/0x4cf
>>>> ? amdgpu_get_crtc_scanoutpos+0x82/0x16b
>>>> amdgpu_dm_do_flip+0x239/0x298
>>>> amdgpu_dm_commit_planes.isra.23+0x379/0x54b
>>>> ? dc_commit_state+0x3da/0x404
>>>> amdgpu_dm_atomic_commit_tail+0x4fc/0x5d2
>>>> ? wait_for_common+0x5b/0x69
>>>> commit_tail+0x42/0x64
>>>> process_one_work+0x1b0/0x314
>>>> worker_thread+0x1cb/0x2c1
>>>> ? create_worker+0x1da/0x1da
>>>> kthread+0x156/0x15e
>>>> ? kthread_flush_work+0xea/0xea
>>>> ret_from_fork+0x22/0x40
>>>>
>>>> Signed-off-by: Shirish S <shirish.s@amd.com>
>>>> ---
>>>> drivers/gpu/drm/amd/display/dc/core/dc.c | 4 ++--
>>>> 1 file changed, 2 insertions(+), 2 deletions(-)
>>>>
>>>> diff --git a/drivers/gpu/drm/amd/display/dc/core/dc.c
>>>> b/drivers/gpu/drm/amd/display/dc/core/dc.c
>>>> index 33149ed..d62206f 100644
>>>> --- a/drivers/gpu/drm/amd/display/dc/core/dc.c
>>>> +++ b/drivers/gpu/drm/amd/display/dc/core/dc.c
>>>> @@ -588,7 +588,7 @@ static void disable_dangling_plane(struct dc *dc,
>>>> struct dc_state *context)
>>>> struct dc *dc_create(const struct dc_init_data *init_params)
>>>> {
>>>> - struct dc *dc = kzalloc(sizeof(*dc), GFP_KERNEL);
>>>> + struct dc *dc = kzalloc(sizeof(*dc), GFP_ATOMIC);
>>> Are you sure this one can be called in atomic_context?
>>>
>>> If so then everything in consstruct() would also need GFP_ATOMIC.
>>
>> Well the backtrace is quite obvious, but I agree that change still looks
>> fishy to me as well.
>>
>> Using GFP_ATOMIC should only be a last resort when nothing else helps,
>> but here it looks more like we misuse a spinlock where a mutex or
>> semaphore would be more appropriate.
>
> I want to raise this concern again, for all of these patches.
>
> I'm now seeing similar BUG messages triggered from VCE functions, see an
> example below. I've never seen these before today, so I assume they're
> caused by the "drm/amdgpu/pp: replace mutex with spin_lock (V3)" change.
>
> Now if we just mechanically convert the mutex to a spinlock whenever
> this happens, it could be a rat's tail, and we might end up converting a
> lot of mutexes to spinlocks. This could be bad if any of those locks can
> be held for significant amounts of time.
>
> Instead, we should look into why we end up in atomic context. All of the
> messages in these patches have been triggered from either a worker
> thread or an ioctl, neither of which run in atomic context per se. Most
> likely we end up in atomic context because a spinlock is held, so maybe
> it can be solved by converting those spinlocks to mutexes instead?
>
I fully agree with Michel.
Shirish, please follow up on this.
Harry
>
> [ 6232.096387] BUG: sleeping function called from invalid context at kernel/locking/mutex.c:747
> [ 6232.099544] in_atomic(): 1, irqs_disabled(): 0, pid: 14785, name: kworker/3:14
> [ 6232.102183] INFO: lockdep is turned off.
> [ 6232.104965] CPU: 3 PID: 14785 Comm: kworker/3:14 Tainted: G B D W OE 4.16.0-rc7+ #104
> [ 6232.107835] Hardware name: Micro-Star International Co., Ltd. MS-7A34/B350 TOMAHAWK (MS-7A34), BIOS 1.80 09/13/2017
> [ 6232.110878] Workqueue: events amdgpu_vce_idle_work_handler [amdgpu]
> [ 6232.113457] Call Trace:
> [ 6232.116065] dump_stack+0x85/0xc1
> [ 6232.117880] ___might_sleep+0x28a/0x3c0
> [ 6232.119770] __mutex_lock+0xc4/0x1520
> [ 6232.121756] ? vce_v3_0_stop+0x3a/0x170 [amdgpu]
> [ 6232.123603] ? mutex_lock_io_nested+0x13e0/0x13e0
> [ 6232.125447] ? debug_check_no_locks_freed+0x2c0/0x2c0
> [ 6232.127333] ? amdgpu_dpm_enable_vce+0x21a/0x330 [amdgpu]
> [ 6232.129253] ? __mutex_lock+0xf9/0x1520
> [ 6232.131251] ? amdgpu_dpm_enable_vce+0x21a/0x330 [amdgpu]
> [ 6232.133324] ? pick_next_task_fair+0x550/0x1720
> [ 6232.135178] ? amdgpu_dpm_enable_vce+0x21a/0x330 [amdgpu]
> [ 6232.137078] ? vce_v3_0_stop+0x3a/0x170 [amdgpu]
> [ 6232.138948] vce_v3_0_stop+0x3a/0x170 [amdgpu]
> [ 6232.140687] amdgpu_device_ip_set_powergating_state+0x150/0x2f0 [amdgpu]
> [ 6232.142694] smu7_powergate_vce+0x11d/0x1c0 [amdgpu]
> [ 6232.144336] pp_dpm_powergate_vce+0xf4/0x160 [amdgpu]
> [ 6232.146283] ? pp_set_clockgating_by_smu+0xe0/0xe0 [amdgpu]
> [ 6232.148007] amdgpu_dpm_enable_vce+0x298/0x330 [amdgpu]
> [ 6232.149815] process_one_work+0x715/0x1570
> [ 6232.151547] ? pwq_dec_nr_in_flight+0x2b0/0x2b0
> [ 6232.153193] ? lock_acquire+0x10b/0x350
> [ 6232.155001] worker_thread+0xd4/0xef0
> [ 6232.156758] ? process_one_work+0x1570/0x1570
> [ 6232.158595] kthread+0x311/0x3d0
> [ 6232.160049] ? kthread_create_worker_on_cpu+0xc0/0xc0
> [ 6232.161677] ret_from_fork+0x27/0x50
>
>
>
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
prev parent reply other threads:[~2018-06-07 14:46 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-05-30 10:17 [PATCH] drm/amd/display: avoid sleeping in atomic context while creating new context or state Shirish S
[not found] ` <1527675436-24022-1-git-send-email-shirish.s-5C7GfCeVMHo@public.gmane.org>
2018-05-30 16:03 ` Harry Wentland
[not found] ` <1b831a0f-3d54-2b07-12f8-b1ddda9007f6-5C7GfCeVMHo@public.gmane.org>
2018-05-31 10:01 ` S, Shirish
2018-05-31 18:05 ` Christian König
[not found] ` <56590c3a-6f96-17b1-a3c3-c3159bf5b313-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2018-06-01 9:56 ` S, Shirish
[not found] ` <67617d8b-65ee-1bfc-7937-14f534cc98b8-5C7GfCeVMHo@public.gmane.org>
2018-06-01 10:10 ` Christian König
2018-06-07 14:44 ` Michel Dänzer
[not found] ` <3ed3bc96-4218-de1f-ba0a-1e4102883438-otUistvHUpPR7s880joybQ@public.gmane.org>
2018-06-07 14:46 ` Harry Wentland [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=cfb7118a-d5a2-7d33-0ccd-43bf22b91cd7@amd.com \
--to=harry.wentland-5c7gfcevmho@public.gmane.org \
--cc=amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org \
--cc=christian.koenig-5C7GfCeVMHo@public.gmane.org \
--cc=michel-otUistvHUpPR7s880joybQ@public.gmane.org \
--cc=shirish.s-5C7GfCeVMHo@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox