Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

drm/arm/malidp: use drmm_* to allocate driver structures

Use drm managed resources to allocate driver structures and get rid of
the deprecated drm_dev_alloc() call and replace it with
devm_drm_dev_alloc().

This also serves as preparation to get rid of drm_device->dev_private
and to fix use-after-free issues on driver unload.

Signed-off-by: Danilo Krummrich <dakr@redhat.com>
Signed-off-by: Liviu Dudau <liviu.dudau@arm.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20221026155934.125294-2-dakr@redhat.com

authored by

Danilo Krummrich and committed by
Liviu Dudau
aefae871 0e308efe

+8 -13
+7 -13
drivers/gpu/drm/arm/malidp_drv.c
··· 23 23 #include <drm/drm_fourcc.h> 24 24 #include <drm/drm_gem_dma_helper.h> 25 25 #include <drm/drm_gem_framebuffer_helper.h> 26 + #include <drm/drm_managed.h> 26 27 #include <drm/drm_modeset_helper.h> 27 28 #include <drm/drm_module.h> 28 29 #include <drm/drm_of.h> ··· 717 716 int ret = 0, i; 718 717 u32 version, out_depth = 0; 719 718 720 - malidp = devm_kzalloc(dev, sizeof(*malidp), GFP_KERNEL); 721 - if (!malidp) 722 - return -ENOMEM; 719 + malidp = devm_drm_dev_alloc(dev, &malidp_driver, typeof(*malidp), base); 720 + if (IS_ERR(malidp)) 721 + return PTR_ERR(malidp); 723 722 724 - hwdev = devm_kzalloc(dev, sizeof(*hwdev), GFP_KERNEL); 723 + drm = &malidp->base; 724 + 725 + hwdev = drmm_kzalloc(drm, sizeof(*hwdev), GFP_KERNEL); 725 726 if (!hwdev) 726 727 return -ENOMEM; 727 728 ··· 755 752 ret = of_reserved_mem_device_init(dev); 756 753 if (ret && ret != -ENODEV) 757 754 return ret; 758 - 759 - drm = drm_dev_alloc(&malidp_driver, dev); 760 - if (IS_ERR(drm)) { 761 - ret = PTR_ERR(drm); 762 - goto alloc_fail; 763 - } 764 755 765 756 drm->dev_private = malidp; 766 757 dev_set_drvdata(dev, drm); ··· 884 887 malidp_runtime_pm_suspend(dev); 885 888 drm->dev_private = NULL; 886 889 dev_set_drvdata(dev, NULL); 887 - drm_dev_put(drm); 888 - alloc_fail: 889 890 of_reserved_mem_device_release(dev); 890 891 891 892 return ret; ··· 912 917 malidp_runtime_pm_suspend(dev); 913 918 drm->dev_private = NULL; 914 919 dev_set_drvdata(dev, NULL); 915 - drm_dev_put(drm); 916 920 of_reserved_mem_device_release(dev); 917 921 } 918 922
+1
drivers/gpu/drm/arm/malidp_drv.h
··· 29 29 }; 30 30 31 31 struct malidp_drm { 32 + struct drm_device base; 32 33 struct malidp_hw_device *dev; 33 34 struct drm_crtc crtc; 34 35 struct drm_writeback_connector mw_connector;