alloc_apertures() handling fixes
Subsystems (5)
cover alloc_apertures() handling fixes
Greetings,
The following patches fix a few memory leaks and other problems related to the alloc_apertures() call.
Tommi Rantala (6):
drm/cirrus: check alloc_apertures() success in
cirrus_kick_out_firmware_fb()
drm/mgag200: check alloc_apertures() success in mga_vram_init() drm/mgag200: free memory allocated with alloc_apertures() drm/mgag200: remove unneeded aper->count assignment after
alloc_apertures()
drm/radeon: check alloc_apertures() success in
radeon_kick_out_firmware_fb()
drm/nouveau: free memory allocated with alloc_apertures()
drivers/gpu/drm/cirrus/cirrus_drv.c | 13 +++++++++++-- drivers/gpu/drm/mgag200/mgag200_main.c | 4 +++- drivers/gpu/drm/nouveau/nouveau_drm.c | 1 + drivers/gpu/drm/radeon/radeon_drv.c | 13 +++++++++++-- 4 files changed, 26 insertions(+), 5 deletions(-)
Signature · 1 line
1.7.9.5
PATCH 1/6 drm/cirrus: check alloc_apertures() success in cirrus_kick_out_firmware_fb()
Check for alloc_apertures() memory allocation failure, and propagate an error code in case the allocation failed.
--- drivers/gpu/drm/cirrus/cirrus_drv.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-)
drivers/gpu/drm/cirrus/cirrus_drv.c +11 -2
@@ -35,12 +35,15 @@ static DEFINE_PCI_DEVICE_TABLE(pciidlist) = { }; -static void cirrus_kick_out_firmware_fb (struct pci_dev *pdev) +static int cirrus_kick_out_firmware_fb (struct pci_dev *pdev) {struct apertures_struct *ap;bool primary = false; ap =alloc_apertures (1 ); +if (!ap) +return -ENOMEM ; + ap->ranges[0 ].base =pci_resource_start (pdev,0 ); ap->ranges[0 ].size =pci_resource_len (pdev,0 );
@@ -49,12 +52,18 @@ static void cirrus_kick_out_firmware_fb(struct pci_dev *pdev)#endif remove_conflicting_framebuffers (ap,"cirrusdrmfb" , primary);kfree (ap); + +return 0 ; }static int __devinit cirrus_pci_probe (struct pci_dev *pdev,const struct pci_device_id *ent) { -cirrus_kick_out_firmware_fb (pdev); +int ret; + + ret =cirrus_kick_out_firmware_fb (pdev); +if (ret) +return ret;return drm_get_pci_dev (pdev, ent, &driver); }
Signature · 1 line
1.7.9.5
PATCH 2/6 drm/mgag200: check alloc_apertures() success in mga_vram_init()
In reply to Tommi RantalaCheck for alloc_apertures() memory allocation failure, and propagate an error code in case the allocation failed.
--- drivers/gpu/drm/mgag200/mgag200_main.c | 2 ++ 1 file changed, 2 insertions(+)
drivers/gpu/drm/mgag200/mgag200_main.c +2 -0
@@ -133,6 +133,8 @@ static int mga_vram_init(struct mga_device *mdev) {void __iomem *mem;struct apertures_struct *aper =alloc_apertures (1 ); +if (!aper) +return -ENOMEM ;/* BAR 0 is VRAM */ mdev->mc.vram_base =pci_resource_start (mdev->dev->pdev,0 );
Signature · 1 line
1.7.9.5
PATCH 3/6 drm/mgag200: free memory allocated with alloc_apertures()
In reply to Tommi RantalaFix a memory leak by deallocating the memory we got from alloc_apertures().
--- drivers/gpu/drm/mgag200/mgag200_main.c | 1 + 1 file changed, 1 insertion(+)
drivers/gpu/drm/mgag200/mgag200_main.c +1 -0
@@ -145,6 +145,7 @@ static int mga_vram_init(struct mga_device *mdev) aper->count =1 ;remove_conflicting_framebuffers (aper,"mgafb" , true); +kfree (aper);if (!request_mem_region (mdev->mc.vram_base, mdev->mc.vram_window,"mgadrmfb_vram" )) {
Signature · 1 line
1.7.9.5
PATCH 4/6 drm/mgag200: remove unneeded aper->count assignment after alloc_apertures()
In reply to Tommi Rantalaalloc_apertures() already does the assignment for us, so assigning the count member after the alloc_apertures() call is not needed.
--- drivers/gpu/drm/mgag200/mgag200_main.c | 1 - 1 file changed, 1 deletion(-)
drivers/gpu/drm/mgag200/mgag200_main.c +0 -1
@@ -142,7 +142,6 @@ static int mga_vram_init(struct mga_device *mdev) aper->ranges[0 ].base = mdev->mc.vram_base; aper->ranges[0 ].size = mdev->mc.vram_window; - aper->count =1 ;remove_conflicting_framebuffers (aper,"mgafb" , true);kfree (aper);
Signature · 1 line
1.7.9.5
PATCH 5/6 drm/radeon: check alloc_apertures() success in radeon_kick_out_firmware_fb()
In reply to Tommi RantalaCheck for alloc_apertures() memory allocation failure, and propagate an error code in case the allocation failed.
--- drivers/gpu/drm/radeon/radeon_drv.c | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-)
drivers/gpu/drm/radeon/radeon_drv.c +11 -2
@@ -281,12 +281,15 @@ static struct drm_driver driver_old = {static struct drm_driver kms_driver; -static void radeon_kick_out_firmware_fb (struct pci_dev *pdev) +static int radeon_kick_out_firmware_fb (struct pci_dev *pdev) {struct apertures_struct *ap;bool primary = false; ap =alloc_apertures (1 ); +if (!ap) +return -ENOMEM ; + ap->ranges[0 ].base =pci_resource_start (pdev,0 ); ap->ranges[0 ].size =pci_resource_len (pdev,0 );
@@ -295,13 +298,19 @@ static void radeon_kick_out_firmware_fb(struct pci_dev *pdev)#endif remove_conflicting_framebuffers (ap,"radeondrmfb" , primary);kfree (ap); + +return 0 ; }static int __devinit radeon_pci_probe (struct pci_dev *pdev,const struct pci_device_id *ent) { +int ret; +/* Get rid of things like offb */ -radeon_kick_out_firmware_fb (pdev); + ret =radeon_kick_out_firmware_fb (pdev); +if (ret) +return ret;return drm_get_pci_dev (pdev, ent, &kms_driver); }
Signature · 1 line
1.7.9.5
PATCH 6/6 drm/nouveau: free memory allocated with alloc_apertures()
In reply to Tommi RantalaFix a memory leak by deallocating the memory we got from alloc_apertures().
--- drivers/gpu/drm/nouveau/nouveau_drm.c | 1 + 1 file changed, 1 insertion(+)
drivers/gpu/drm/nouveau/nouveau_drm.c +1 -0
@@ -223,6 +223,7 @@ nouveau_drm_probe(struct pci_dev *pdev, const struct pci_device_id *pent) boot = pdev->resource[PCI_ROM_RESOURCE ].flags &IORESOURCE_ROM_SHADOW ;#endif remove_conflicting_framebuffers (aper,"nouveaufb" , boot); +kfree (aper); ret =nouveau_device_create (pdev,nouveau_name (pdev),pci_name (pdev), nouveau_config, nouveau_debug, &device);
Signature · 1 line
1.7.9.5