Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 30238151 authored by Tommi Rantala's avatar Tommi Rantala Committed by Dave Airlie
Browse files

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: default avatarTommi Rantala <tt.rantala@gmail.com>
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent b0e77f45
Loading
Loading
Loading
Loading
+11 −2
Original line number Diff line number Diff line
@@ -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);
}