From: Thomas Zimmermann Date: Thu, 9 Oct 2025 13:16:31 +0000 (+0200) Subject: drm/client: Do not free client memory by default X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=57fe8285dc4764171fa9eb1f153cae3bb313d6fc;p=thirdparty%2Fkernel%2Flinux.git drm/client: Do not free client memory by default Make no assumption on the allocation of the client's memory. For example, amdgpu stores a client within another data structures, where it cannot be freed by itself. The correct place to free the client's memory is the client's free callback. All existing clients implement this. Signed-off-by: Thomas Zimmermann Reviewed-by: Jocelyn Falempe Link: https://lore.kernel.org/r/20251009132006.45834-5-tzimmermann@suse.de --- diff --git a/drivers/gpu/drm/drm_client_event.c b/drivers/gpu/drm/drm_client_event.c index c3baeb4d4e6bc..d25dc5250983a 100644 --- a/drivers/gpu/drm/drm_client_event.c +++ b/drivers/gpu/drm/drm_client_event.c @@ -39,12 +39,13 @@ void drm_client_dev_unregister(struct drm_device *dev) mutex_lock(&dev->clientlist_mutex); list_for_each_entry_safe(client, tmp, &dev->clientlist, list) { list_del(&client->list); - if (client->funcs && client->funcs->unregister) { + /* + * Unregistering consumes and frees the client. + */ + if (client->funcs && client->funcs->unregister) client->funcs->unregister(client); - } else { + else drm_client_release(client); - kfree(client); - } } mutex_unlock(&dev->clientlist_mutex); }