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

Commit 782e97f8 authored by Rajeev Kulkarni's avatar Rajeev Kulkarni
Browse files

msm: kgsl: Release all memory entries at process close



During process close release memory entries of all the file
descriptors. Also remove device file from mem entry since its
no longer used.

CRs-Fixed: 762691
Change-Id: Ib60324218454f87905d351a7c71c52e522725070
Signed-off-by: default avatarRajeev Kulkarni <krajeev@codeaurora.org>
parent 2a4b1904
Loading
Loading
Loading
Loading
+3 −5
Original line number Diff line number Diff line
@@ -418,7 +418,6 @@ kgsl_mem_entry_attach_process(struct kgsl_mem_entry *entry,

	entry->id = id;
	entry->priv = process;
	entry->dev_priv = dev_priv;

	spin_lock(&process->mem_lock);
	ret = kgsl_mem_entry_track_gpuaddr(process, entry);
@@ -927,8 +926,7 @@ static struct kgsl_process_private *kgsl_process_private_new(
	return private;
}

static void process_release_memory(struct kgsl_device_private *dev_priv,
		struct kgsl_process_private *private)
static void process_release_memory(struct kgsl_process_private *private)
{
	struct kgsl_mem_entry *entry;
	int next = 0;
@@ -946,7 +944,7 @@ static void process_release_memory(struct kgsl_device_private *dev_priv,
		 * free a reference to this entry, other references are from
		 * within kgsl so they will be freed eventually by kgsl
		 */
		if (entry->dev_priv == dev_priv && !entry->pending_free) {
		if (!entry->pending_free) {
			entry->pending_free = 1;
			spin_unlock(&private->mem_lock);
			kgsl_mem_entry_put(entry);
@@ -1005,7 +1003,7 @@ static void kgsl_process_private_close(struct kgsl_device_private *dev_priv,
	 */
	mutex_unlock(&kgsl_driver.process_mutex);

	process_release_memory(dev_priv, private);
	process_release_memory(private);

	kgsl_process_private_put(private);
}
+1 −1
Original line number Diff line number Diff line
@@ -193,9 +193,9 @@ struct kgsl_mem_entry {
	unsigned int id;
	struct kgsl_process_private *priv;
	int pending_free;
	struct kgsl_device_private *dev_priv;
};

struct kgsl_device_private;
struct kgsl_event_group;

typedef void (*kgsl_event_func)(struct kgsl_device *, struct kgsl_event_group *,