Commit 28b5f3b6 authored by Zack Rusin's avatar Zack Rusin
Browse files

drm/vmwgfx: Release ttm memory if probe fails



The ttm mem global state was leaking if the vmwgfx driver load failed.

In case of a driver load failure we have to make sure we also release
the ttm mem global state.

Signed-off-by: default avatarZack Rusin <zackr@vmware.com>
Reviewed-by: default avatarMartin Krastev <krastevm@vmware.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20211105193845.258816-3-zackr@vmware.com
parent 826c387d
Loading
Loading
Loading
Loading
+16 −10
Original line number Diff line number Diff line
@@ -1616,34 +1616,40 @@ static int vmw_probe(struct pci_dev *pdev, const struct pci_device_id *ent)

	ret = drm_aperture_remove_conflicting_pci_framebuffers(pdev, &driver);
	if (ret)
		return ret;
		goto out_error;

	ret = pcim_enable_device(pdev);
	if (ret)
		return ret;
		goto out_error;

	vmw = devm_drm_dev_alloc(&pdev->dev, &driver,
				 struct vmw_private, drm);
	if (IS_ERR(vmw))
		return PTR_ERR(vmw);
	if (IS_ERR(vmw)) {
		ret = PTR_ERR(vmw);
		goto out_error;
	}

	pci_set_drvdata(pdev, &vmw->drm);

	ret = ttm_mem_global_init(&ttm_mem_glob, &pdev->dev);
	if (ret)
		return ret;
		goto out_error;

	ret = vmw_driver_load(vmw, ent->device);
	if (ret)
		return ret;
		goto out_release;

	ret = drm_dev_register(&vmw->drm, 0);
	if (ret) {
		vmw_driver_unload(&vmw->drm);
		return ret;
	}
	if (ret)
		goto out_unload;

	return 0;
out_unload:
	vmw_driver_unload(&vmw->drm);
out_release:
	ttm_mem_global_release(&ttm_mem_glob);
out_error:
	return ret;
}

static int __init vmwgfx_init(void)