[PATCH] drm/ttm: optimize the pool shrinker a bit

Christian König ckoenig.leichtzumerken at gmail.com
Thu Apr 8 12:44:16 UTC 2021


Am 08.04.21 um 13:31 schrieb Daniel Vetter:
> On Thu, Apr 08, 2021 at 01:17:32PM +0200, Christian König wrote:
>> Am 08.04.21 um 13:08 schrieb Daniel Vetter:
>>> On Thu, Apr 01, 2021 at 03:54:13PM +0200, Christian König wrote:
>>>> [SNIP]
>>>>    EXPORT_SYMBOL(unregister_shrinker);
>>>> +/**
>>>> + * sync_shrinker - Wait for all running shrinkers to complete.
>>>> + */
>>>> +void sync_shrinkers(void)
>>> This one should probably be in its own patch, with a bit more commit
>>> message about why we need it and all that. I'd assume that just
>>> unregistering the shrinker should sync everything we needed to sync
>>> already, and for other sync needs we can do locking within our own
>>> shrinker?
>> Correct. Reason why we need the barrier is that we need to destroy the
>> device (during hotplug) before the shrinker is unregistered (during module
>> unload).
>>
>> Going to separate that, write something up in the commit message and send it
>> to the appropriate audience.
> Hm why do we need that?

When the shrinker runs in parallel with (for example) a hotplug event 
and unmaps pages from the devices IOMMU I must make sure that you can't 
destroy the device or pool structure at the same time.

Previously holding the mutex while updating the IOMMU would take care of 
that, but now we need to prevent this otherwise.

Could be that this is also handled somewhere else, but I'm better save 
than sorry here and grabbing/releasing write side of the shrinker_rwsem 
is rather lightweight.

> Either way sounds like an orthogonal series for
> the hotunplug work, not just shrinker optimization.

It is unrelated to the hotplug work in general.

Regards,
Christian.

> -Daniel
>
>> Thanks,
>> Christian.
>>
>>> -Daniel
>>>
>>>> +{
>>>> +	down_write(&shrinker_rwsem);
>>>> +	up_write(&shrinker_rwsem);
>>>> +}
>>>> +EXPORT_SYMBOL(sync_shrinkers);
>>>> +
>>>>    #define SHRINK_BATCH 128
>>>>    static unsigned long do_shrink_slab(struct shrink_control *shrinkctl,
>>>> -- 
>>>> 2.25.1
>>>>



More information about the dri-devel mailing list