aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTommi Rantala <tt.rantala@gmail.com>2012-11-09 04:19:39 -0500
committerDave Airlie <airlied@redhat.com>2012-11-20 01:06:27 -0500
commit302381511f4b1bc98c6f61ccaec5d8e98ccd0365 (patch)
tree8b27820e0bb4a72aa328a46385aa4ace2109bfdd
parentb0e77f45a6da3f361d69680baeb0e133d0bc46c0 (diff)
drm/radeon: check alloc_apertures() success in radeon_kick_out_firmware_fb()
Check for alloc_apertures() memory allocation failure, and propagate an error code in case the allocation failed. Signed-off-by: Tommi Rantala <tt.rantala@gmail.com> Signed-off-by: Dave Airlie <airlied@redhat.com>
-rw-r--r--drivers/gpu/drm/radeon/radeon_drv.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c
index 07eb84e8a8a4..8c1a83c6eb07 100644
--- a/drivers/gpu/drm/radeon/radeon_drv.c
+++ b/drivers/gpu/drm/radeon/radeon_drv.c
@@ -281,12 +281,15 @@ static struct drm_driver driver_old = {
281 281
282static struct drm_driver kms_driver; 282static struct drm_driver kms_driver;
283 283
284static void radeon_kick_out_firmware_fb(struct pci_dev *pdev) 284static int radeon_kick_out_firmware_fb(struct pci_dev *pdev)
285{ 285{
286 struct apertures_struct *ap; 286 struct apertures_struct *ap;
287 bool primary = false; 287 bool primary = false;
288 288
289 ap = alloc_apertures(1); 289 ap = alloc_apertures(1);
290 if (!ap)
291 return -ENOMEM;
292
290 ap->ranges[0].base = pci_resource_start(pdev, 0); 293 ap->ranges[0].base = pci_resource_start(pdev, 0);
291 ap->ranges[0].size = pci_resource_len(pdev, 0); 294 ap->ranges[0].size = pci_resource_len(pdev, 0);
292 295
@@ -295,13 +298,19 @@ static void radeon_kick_out_firmware_fb(struct pci_dev *pdev)
295#endif 298#endif
296 remove_conflicting_framebuffers(ap, "radeondrmfb", primary); 299 remove_conflicting_framebuffers(ap, "radeondrmfb", primary);
297 kfree(ap); 300 kfree(ap);
301
302 return 0;
298} 303}
299 304
300static int __devinit 305static int __devinit
301radeon_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) 306radeon_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
302{ 307{
308 int ret;
309
303 /* Get rid of things like offb */ 310 /* Get rid of things like offb */
304 radeon_kick_out_firmware_fb(pdev); 311 ret = radeon_kick_out_firmware_fb(pdev);
312 if (ret)
313 return ret;
305 314
306 return drm_get_pci_dev(pdev, ent, &kms_driver); 315 return drm_get_pci_dev(pdev, ent, &kms_driver);
307} 316}