From: "Christian König" <ckoenig.leichtzumerken@gmail.com>
To: Arnd Bergmann <arnd@arndb.de>,
Alex Deucher <alexander.deucher@amd.com>,
amd-gfx@lists.freedesktop.org
Cc: George Zhang <george.zhang@amd.com>,
Harry Wentland <harry.wentland@amd.com>,
Leo Li <sunpeng.li@amd.com>,
Rodrigo Siqueira <Rodrigo.Siqueira@amd.com>
Subject: Re: [PATCH] drm/amd/display: use GFP_ATOMIC for bounding box
Date: Wed, 5 Jun 2024 11:06:02 +0200 [thread overview]
Message-ID: <b491e52f-c034-457d-9286-3da1e2ad9e27@gmail.com> (raw)
In-Reply-To: <3d7c938b-208c-4a73-8287-bc9ff598c47b@app.fastmail.com>
Am 04.06.24 um 16:57 schrieb Arnd Bergmann:
> On Tue, Jun 4, 2024, at 16:22, Christian König wrote:
>> Am 04.06.24 um 15:50 schrieb Alex Deucher:
>>> This can be called in atomic context. Should fix:
>>>
>>> BUG: sleeping function called from invalid context at include/linux/sched/mm.h:306
>>> in_atomic(): 1, irqs_disabled(): 0, non_block: 0, pid: 449, name: kworker/u64:8
>>> preempt_count: 2, expected: 0
>>> RCU nest depth: 0, expected: 0
>>> Preemption disabled at:
>>> ffffffffc0ce1580>] dc_fpu_begin+0x30/0xd0 [amdgpu]
>>> CPU: 5 PID: 449 Comm: kworker/u64:8 Tainted: G W 6.8.0+ #35
>>> Hardware name: System manufacturer System Product Name/ROG STRIX X570-E GAMING WIFI II, BIOS 4204 02/24/2022
>>> Workqueue: events_unbound async_run_entry_fn
>> That most likely only papers over the real problem and is not a valid fix.
>>
>> The question is why is that an atomic context? If the function is used
>> under a spinlock then this might indeed be the right fix.
>>
>> If it's because of floating point operation then that here won't work
>> either.
> It looks like there is only one caller, and this turns on
> floating point instructions just for the call:
>
> if (dc->res_pool->funcs->update_bw_bounding_box) {
> DC_FP_START();
> dc->res_pool->funcs->update_bw_bounding_box(dc, dc->clk_mgr->bw_params);
> DC_FP_END();
> }
>
> but then they are enabled again inside of the function.
>
> If we can drop the outer DC_FP_START(), that means
> the GFP_KERNEL allocation works. On the other hand if
> we actually have to enabled it before calling into
> the function (e.g. because there is an architecture that
> has incompatible function calling conventions when FP
> is enabled), the inner one is redundant, but we can
> potentially move the kmemdup() into the caller and
> pass the copy by refernence.
Yeah exactly that's the case.
The DC_FP_START() and DC_FP_END() calls need to be outside of the
function because the compiler has no idea that it can't move any
flouting point instructions outside of the critical section between the
two functions.
So yes the calls to DC_FP_START() and DC_FP_END() from within floating
point enabled code should be forbidden somehow.
And when that is done the caller should allocate any parameters needed
and pass them by reference to avoid the GFP_ATOMIC.
Regards,
Christian.
>
> Arnd
prev parent reply other threads:[~2024-06-05 9:06 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-06-04 13:50 [PATCH] drm/amd/display: use GFP_ATOMIC for bounding box Alex Deucher
2024-06-04 14:22 ` Christian König
2024-06-04 14:45 ` Alex Deucher
2024-06-04 14:57 ` Arnd Bergmann
2024-06-05 9:06 ` Christian König [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=b491e52f-c034-457d-9286-3da1e2ad9e27@gmail.com \
--to=ckoenig.leichtzumerken@gmail.com \
--cc=Rodrigo.Siqueira@amd.com \
--cc=alexander.deucher@amd.com \
--cc=amd-gfx@lists.freedesktop.org \
--cc=arnd@arndb.de \
--cc=george.zhang@amd.com \
--cc=harry.wentland@amd.com \
--cc=sunpeng.li@amd.com \
/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