[PATCH 08/11] drm/i915: Use drm_fbdev_helper_client_unregister()

Thomas Zimmermann tzimmermann at suse.de
Tue May 7 13:10:13 UTC 2024


Hi

Am 07.05.24 um 14:25 schrieb Rodrigo Vivi:
> On Tue, May 07, 2024 at 01:58:29PM +0200, Thomas Zimmermann wrote:
>> Implement struct drm_client_funcs.unregister with the helpers
>> drm_fbdev_helper_client_unregister() and remove the custom code
>> from the driver. The generic helper is equivalent in functionality.
>>
>> Signed-off-by: Thomas Zimmermann <tzimmermann at suse.de>
>> ---
>>   drivers/gpu/drm/i915/display/intel_fbdev.c | 21 ++-------------------
>>   1 file changed, 2 insertions(+), 19 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/i915/display/intel_fbdev.c b/drivers/gpu/drm/i915/display/intel_fbdev.c
>> index bda702c2cab8e..f1b4543bffc02 100644
>> --- a/drivers/gpu/drm/i915/display/intel_fbdev.c
>> +++ b/drivers/gpu/drm/i915/display/intel_fbdev.c
>> @@ -38,7 +38,6 @@
>>   #include <linux/vga_switcheroo.h>
>>   
>>   #include <drm/drm_crtc.h>
>> -#include <drm/drm_crtc_helper.h>
>>   #include <drm/drm_fb_helper.h>
>>   #include <drm/drm_fourcc.h>
>>   #include <drm/drm_gem_framebuffer_helper.h>
>> @@ -580,25 +579,9 @@ static int intel_fbdev_restore_mode(struct drm_i915_private *dev_priv)
>>   }
>>   
>>   /*
>> - * Fbdev client and struct drm_client_funcs
>> + * struct drm_client_funcs
>>    */
>>   
>> -static void intel_fbdev_client_unregister(struct drm_client_dev *client)
>> -{
>> -	struct drm_fb_helper *fb_helper = drm_fb_helper_from_client(client);
>> -	struct drm_device *dev = fb_helper->dev;
>> -	struct pci_dev *pdev = to_pci_dev(dev->dev);
>> -
>> -	if (fb_helper->info) {
>> -		vga_switcheroo_client_fb_set(pdev, NULL);
>> -		drm_fb_helper_unregister_info(fb_helper);
>> -	} else {
>> -		drm_fb_helper_unprepare(fb_helper);
>> -		drm_client_release(&fb_helper->client);
> The only real difference is that these 2 calls are inverted in the new
> drm_fbdev_helper_client_unregister.

The condition in this if statement is different for some drivers, but 
not i915. The setup code first does a _prepare and then an 
_init+_register, hence the _release goes first and then comes the 
_unprepare.

>
> I feel that the releasing after the unprepare sounds more logical,
> but if there's no actual issue with that and it is working for
> everybody, let's do that.

It should make no difference in practice, but doing the release first is 
the inverse of the setup; hence conceptually cleaner.

>
> Reviewed-by: Rodrigo Vivi <rodrigo.vivi at intel.com>
>
> Acked-by: Rodrigo Vivi <rodrigo.vivi at intel.com>
> (to get through drm-misc with everything else if you prefer)

Thanks.

Best regards
Thomas

>
>> -		kfree(fb_helper);
>> -	}
>> -}
>> -
>>   static int intel_fbdev_client_restore(struct drm_client_dev *client)
>>   {
>>   	struct drm_i915_private *dev_priv = to_i915(client->dev);
>> @@ -644,7 +627,7 @@ static int intel_fbdev_client_hotplug(struct drm_client_dev *client)
>>   
>>   static const struct drm_client_funcs intel_fbdev_client_funcs = {
>>   	.owner		= THIS_MODULE,
>> -	.unregister	= intel_fbdev_client_unregister,
>> +	.unregister	= drm_fbdev_helper_client_unregister,
>>   	.restore	= intel_fbdev_client_restore,
>>   	.hotplug	= intel_fbdev_client_hotplug,
>>   };
>> -- 
>> 2.44.0
>>

-- 
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Frankenstrasse 146, 90461 Nuernberg, Germany
GF: Ivo Totev, Andrew Myers, Andrew McDonald, Boudien Moerman
HRB 36809 (AG Nuernberg)



More information about the dri-devel mailing list