dri-devel Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: "Christian König" <christian.koenig@amd.com>
To: "Thomas Hellström" <thomas.hellstrom@linux.intel.com>,
	"Daniel Vetter" <daniel.vetter@ffwll.ch>
Cc: Matthew Brost <matthew.brost@intel.com>,
	dri-devel@lists.freedesktop.org,  David Airlie <airlied@linux.ie>
Subject: Re: [PATCH 4/7] drm/ttm: move LRU walk defines into new internal header
Date: Thu, 22 Aug 2024 09:55:52 +0200	[thread overview]
Message-ID: <8b479754-ea3f-4eb9-a739-26ee38530a23@amd.com> (raw)
In-Reply-To: <e3716526ae9b530adddc815ca12c402b4cf7678b.camel@linux.intel.com>

[-- Attachment #1: Type: text/plain, Size: 2737 bytes --]

Am 22.08.24 um 08:47 schrieb Thomas Hellström:
>>>> As Sima said, this is complicated but not beyond comprehension:
>>>> i915
>>>> https://elixir.bootlin.com/linux/v6.11-rc4/source/drivers/gpu/drm/i915/gem/i915_gem_shrinker.c#L317
>>> As far as I can tell what i915 does here is extremely questionable.
>>>
>>>       if (sc->nr_scanned < sc->nr_to_scan && current_is_kswapd()) {
>>> ....
>>>           with_intel_runtime_pm(&i915->runtime_pm, wakeref) {
>>>
>>> with_intel_runtime_pm() then calls pm_runtime_get_sync().
>>>
>>> So basically the i915 shrinker assumes that when called from
>>> kswapd()
>>> that it can synchronously wait for runtime PM to power up the
>>> device
>>> again.
>>>
>>> As far as I can tell that means that a device driver makes strong
>>> and
>>> completely undocumented assumptions how kswapd works internally.
>> Admittedly that looks weird
>>
>> But I'd really expect a reclaim lockdep splat to happen there if the
>> i915 pm did something not-allowed. IIRC, the design direction the
>> i915
>> people got from mm people regarding the shrinkers was to avoid any
>> sleeps in direct reclaim and punt it to kswapd. Need to ask i915
>> people
>> how they can get away with that.
>>
>>
> So it turns out that Xe integrated pm resume is reclaim-safe, and I'd
> expect i915's to be as well. Xe discrete pm resume isn't.
>
> So that means that, at least for integrated, the i915 shrinker should
> be ok from that POW, and punting certain bos to kswapd is not AFAICT
> abusing any undocumented features of kswapd but rather a way to avoid
> resuming the device during direct reclaim, like documented.

The more I think about this the more I disagree to this driver design. 
In my opinion device drivers should *never* resume runtime PM in a 
shrinker callback in the first place.

When the device is turned off it means that all of it's operations are 
stopped and eventually power to caches etc turned off as well. So I 
don't see any ongoing writeback operations or similar either.

So the question is why do we need to power on the device in a shrinker 
in the first place?

What could be is that the device needs to flush GART TLBs or similar 
when it is turned on, e.g. that you grab a PM reference to make sure 
that during your HW operation the device doesn't suspend.

But that doesn't mean that you should resume the device. In other words 
when the device is powered down you shouldn't power it up again.

And for GART we already have the necessary move callback implemented in 
TTM. This is done by radeon, amdgpu and nouveu in a common way as far as 
I can see.

So why should Xe be special and follow the very questionable approach of 
i915 here?

Regards,
Christian.


>
> /Thomas
>
>
>

[-- Attachment #2: Type: text/html, Size: 3864 bytes --]

  reply	other threads:[~2024-08-22  7:56 UTC|newest]

Thread overview: 53+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-07-10 12:42 Using drm_exec in TTM Christian König
2024-07-10 12:42 ` [PATCH 1/7] dma-buf/dma-resv: Introduce dma_resv_trylock_ctx() Christian König
2024-07-10 12:42 ` [PATCH 2/7] drm/exec: don't immediately add the prelocked obj Christian König
2024-07-10 12:42 ` [PATCH 3/7] drm/exec: provide trylock interface for eviction Christian König
2024-07-10 12:42 ` [PATCH 4/7] drm/ttm: move LRU walk defines into new internal header Christian König
2024-07-10 18:19   ` Matthew Brost
2024-07-11 12:01     ` Christian König
2024-07-11 16:00       ` Matthew Brost
2024-08-06  8:29       ` Thomas Hellström
2024-08-19 11:03         ` Christian König
2024-08-19 11:38           ` Thomas Hellström
2024-08-19 14:14             ` Daniel Vetter
2024-08-19 15:26               ` Christian König
2024-08-20 10:37                 ` Thomas Hellström
2024-08-20 15:45                   ` Christian König
2024-08-20 16:00                     ` Thomas Hellström
2024-08-21  8:14                       ` Christian König
2024-08-21  8:57                         ` Thomas Hellström
2024-08-21  9:31                           ` Thomas Hellström
2024-08-21  9:48                           ` Christian König
2024-08-21 12:00                             ` Thomas Hellström
2024-08-22  6:47                               ` Thomas Hellström
2024-08-22  7:55                                 ` Christian König [this message]
2024-08-22  8:21                                   ` Thomas Hellström
2024-08-22  8:36                                     ` Thomas Hellström
2024-08-22  9:29                                     ` Christian König
2024-08-22 13:16                                       ` Thomas Hellström
2024-08-27 16:58                                       ` Daniel Vetter
2024-08-22  9:23                         ` Daniel Vetter
2024-08-22 13:19                           ` Christian König
2024-08-27 16:52                             ` Daniel Vetter
2024-08-27 17:53                               ` Daniel Vetter
2024-08-28 12:20                                 ` Christian König
2024-08-28 14:05                                   ` Thomas Hellström
2024-08-28 15:25                                     ` Christian König
2024-08-28 15:35                                       ` Alex Deucher
2024-08-28 15:45                                       ` Thomas Hellström
2024-09-02 11:07                                   ` Daniel Vetter
2024-09-18 12:57                                     ` Thomas Hellström
2024-10-02 11:30                                       ` Thomas Hellström
2024-10-02 11:32                                         ` Christian König
2024-10-02 11:36                                           ` Thomas Hellström
2024-10-07  9:08                                       ` Christian König
2024-10-09 13:39                                         ` Thomas Hellström
2024-10-09 14:17                                           ` Thomas Hellström
2024-10-10  8:00                                             ` Christian König
2024-10-11 16:52                                               ` Thomas Hellström
2024-08-27 18:24                               ` Alex Deucher
2024-09-02 11:00                                 ` Daniel Vetter
2024-08-21  7:02                     ` Thomas Hellström
2024-07-10 12:42 ` [PATCH 5/7] drm/ttm: move needs_unlock into the walk Christian König
2024-07-10 12:43 ` [PATCH 6/7] drm/ttm: support using drm_exec during eviction v2 Christian König
2024-07-10 12:43 ` [PATCH 7/7] drm/amdgpu: use drm_exec during BO validation Christian König

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=8b479754-ea3f-4eb9-a739-26ee38530a23@amd.com \
    --to=christian.koenig@amd.com \
    --cc=airlied@linux.ie \
    --cc=daniel.vetter@ffwll.ch \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=matthew.brost@intel.com \
    --cc=thomas.hellstrom@linux.intel.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