diff options
author | Tommi Rantala <tt.rantala@gmail.com> | 2012-11-09 04:19:39 -0500 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2012-11-20 01:06:27 -0500 |
commit | 302381511f4b1bc98c6f61ccaec5d8e98ccd0365 (patch) | |
tree | 8b27820e0bb4a72aa328a46385aa4ace2109bfdd | |
parent | b0e77f45a6da3f361d69680baeb0e133d0bc46c0 (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.c | 13 |
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 | ||
282 | static struct drm_driver kms_driver; | 282 | static struct drm_driver kms_driver; |
283 | 283 | ||
284 | static void radeon_kick_out_firmware_fb(struct pci_dev *pdev) | 284 | static 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 | ||
300 | static int __devinit | 305 | static int __devinit |
301 | radeon_pci_probe(struct pci_dev *pdev, const struct pci_device_id *ent) | 306 | radeon_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 | } |