Merge "Revert "msm: kgsl: Offload mementry destroy work to separate thread""
This commit is contained in:
commit
db478ca29d
1 changed files with 8 additions and 27 deletions
|
@ -255,13 +255,6 @@ static void _deferred_put(struct work_struct *work)
|
|||
kgsl_mem_entry_put(entry);
|
||||
}
|
||||
|
||||
static inline void
|
||||
kgsl_mem_entry_put_deferred(struct kgsl_mem_entry *entry)
|
||||
{
|
||||
if (entry)
|
||||
queue_work(kgsl_driver.mem_workqueue, &entry->work);
|
||||
}
|
||||
|
||||
static inline struct kgsl_mem_entry *
|
||||
kgsl_mem_entry_create(void)
|
||||
{
|
||||
|
@ -272,7 +265,6 @@ kgsl_mem_entry_create(void)
|
|||
|
||||
/* put this ref in the caller functions after init */
|
||||
kref_get(&entry->refcount);
|
||||
INIT_WORK(&entry->work, _deferred_put);
|
||||
}
|
||||
return entry;
|
||||
}
|
||||
|
@ -1869,7 +1861,7 @@ long kgsl_ioctl_sharedmem_free(struct kgsl_device_private *dev_priv,
|
|||
return -EINVAL;
|
||||
|
||||
ret = gpumem_free_entry(entry);
|
||||
kgsl_mem_entry_put_deferred(entry);
|
||||
kgsl_mem_entry_put(entry);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -1887,7 +1879,7 @@ long kgsl_ioctl_gpumem_free_id(struct kgsl_device_private *dev_priv,
|
|||
return -EINVAL;
|
||||
|
||||
ret = gpumem_free_entry(entry);
|
||||
kgsl_mem_entry_put_deferred(entry);
|
||||
kgsl_mem_entry_put(entry);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
@ -1924,7 +1916,8 @@ static void gpuobj_free_fence_func(void *priv)
|
|||
{
|
||||
struct kgsl_mem_entry *entry = priv;
|
||||
|
||||
kgsl_mem_entry_put_deferred(entry);
|
||||
INIT_WORK(&entry->work, _deferred_put);
|
||||
queue_work(kgsl_driver.mem_workqueue, &entry->work);
|
||||
}
|
||||
|
||||
static long gpuobj_free_on_fence(struct kgsl_device_private *dev_priv,
|
||||
|
@ -1988,7 +1981,7 @@ long kgsl_ioctl_gpuobj_free(struct kgsl_device_private *dev_priv,
|
|||
else
|
||||
ret = -EINVAL;
|
||||
|
||||
kgsl_mem_entry_put_deferred(entry);
|
||||
kgsl_mem_entry_put(entry);
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -3363,13 +3356,7 @@ long kgsl_ioctl_sparse_phys_free(struct kgsl_device_private *dev_priv,
|
|||
if (entry == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
if (!kgsl_mem_entry_set_pend(entry)) {
|
||||
kgsl_mem_entry_put(entry);
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
if (entry->memdesc.cur_bindings != 0) {
|
||||
kgsl_mem_entry_unset_pend(entry);
|
||||
kgsl_mem_entry_put(entry);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
@ -3378,7 +3365,7 @@ long kgsl_ioctl_sparse_phys_free(struct kgsl_device_private *dev_priv,
|
|||
|
||||
/* One put for find_id(), one put for the kgsl_mem_entry_create() */
|
||||
kgsl_mem_entry_put(entry);
|
||||
kgsl_mem_entry_put_deferred(entry);
|
||||
kgsl_mem_entry_put(entry);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -3438,13 +3425,7 @@ long kgsl_ioctl_sparse_virt_free(struct kgsl_device_private *dev_priv,
|
|||
if (entry == NULL)
|
||||
return -EINVAL;
|
||||
|
||||
if (!kgsl_mem_entry_set_pend(entry)) {
|
||||
kgsl_mem_entry_put(entry);
|
||||
return -EBUSY;
|
||||
}
|
||||
|
||||
if (entry->bind_tree.rb_node != NULL) {
|
||||
kgsl_mem_entry_unset_pend(entry);
|
||||
kgsl_mem_entry_put(entry);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
@ -3453,7 +3434,7 @@ long kgsl_ioctl_sparse_virt_free(struct kgsl_device_private *dev_priv,
|
|||
|
||||
/* One put for find_id(), one put for the kgsl_mem_entry_create() */
|
||||
kgsl_mem_entry_put(entry);
|
||||
kgsl_mem_entry_put_deferred(entry);
|
||||
kgsl_mem_entry_put(entry);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@ -4929,7 +4910,7 @@ static int __init kgsl_core_init(void)
|
|||
WQ_UNBOUND | WQ_MEM_RECLAIM | WQ_SYSFS, 0);
|
||||
|
||||
kgsl_driver.mem_workqueue = alloc_workqueue("kgsl-mementry",
|
||||
WQ_MEM_RECLAIM, 0);
|
||||
WQ_UNBOUND | WQ_MEM_RECLAIM, 0);
|
||||
|
||||
init_kthread_worker(&kgsl_driver.worker);
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue