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

Commit f51d920c authored by qctecmdr's avatar qctecmdr Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: kgsl: Cleanup correctly when platform probe fails"

parents b9541a89 6186cb14
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1585,6 +1585,7 @@ int adreno_device_probe(struct platform_device *pdev,
	if (of_find_matching_node(dev->of_node, adreno_gmu_match))
		component_unbind_all(dev, NULL);

	idr_destroy(&device->context_idr);
	kgsl_bus_close(device);

	return status;
+9 −9
Original line number Diff line number Diff line
@@ -4293,6 +4293,9 @@ static void _unregister_device(struct kgsl_device *device)
{
	int minor;

	if (device->gpu_sysfs_kobj.state_initialized)
		kobject_del(&device->gpu_sysfs_kobj);

	mutex_lock(&kgsl_driver.devlock);
	for (minor = 0; minor < ARRAY_SIZE(kgsl_driver.devp); minor++) {
		if (device == kgsl_driver.devp[minor]) {
@@ -4484,12 +4487,6 @@ int kgsl_device_platform_probe(struct kgsl_device *device)
	device->pwrctrl.interrupt_num = status;
	disable_irq(device->pwrctrl.interrupt_num);

	rwlock_init(&device->context_lock);
	spin_lock_init(&device->submit_lock);

	idr_init(&device->timelines);
	spin_lock_init(&device->timelines_lock);

	device->events_wq = alloc_workqueue("kgsl-events",
		WQ_UNBOUND | WQ_MEM_RECLAIM | WQ_SYSFS | WQ_HIGHPRI, 0);

@@ -4504,6 +4501,12 @@ int kgsl_device_platform_probe(struct kgsl_device *device)
	if (status != 0)
		goto error_pwrctrl_close;

	rwlock_init(&device->context_lock);
	spin_lock_init(&device->submit_lock);

	idr_init(&device->timelines);
	spin_lock_init(&device->timelines_lock);

	kgsl_device_debugfs_init(device);

	dma_set_coherent_mask(&pdev->dev, KGSL_DMA_BIT_MASK);
@@ -4537,9 +4540,6 @@ void kgsl_device_platform_remove(struct kgsl_device *device)

	kgsl_device_snapshot_close(device);

	if (device->gpu_sysfs_kobj.state_initialized)
		kobject_del(&device->gpu_sysfs_kobj);

	idr_destroy(&device->context_idr);
	idr_destroy(&device->timelines);

+2 −0
Original line number Diff line number Diff line
// SPDX-License-Identifier: GPL-2.0-only
/*
 * Copyright (c) 2019-2021, The Linux Foundation. All rights reserved.
 * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved.
 */

#include <linux/interconnect.h>
@@ -224,6 +225,7 @@ void kgsl_bus_close(struct kgsl_device *device)
	kfree(device->pwrctrl.ddr_table);
	device->pwrctrl.ddr_table = NULL;
	icc_put(device->pwrctrl.icc_path);
	device->pwrctrl.icc_path = NULL;
	if (device->pwrctrl.ddr_qos_devfreq)
		put_device(&device->pwrctrl.ddr_qos_devfreq->dev);
}