mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 03:36:19 +00:00
[PATCH] taskstats_exit_alloc: optimize/simplify
If there are no listeners, every task does unneeded kmem_cache alloc/free on exit. We don't need listeners->sem for 'if (!list_empty())' check. Yes, we may have a false positive, but this doesn't differ from the case when the listener is unregistered after we drop the semaphore. So we don't need to do allocation beforehand. Signed-off-by: Oleg Nesterov <oleg@tv-sign.ru> Cc: Balbir Singh <balbir@in.ibm.com> Acked-by: Shailabh Nagar <nagar@watson.ibm.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
38da288b8b
commit
128fb95650
1 changed files with 4 additions and 13 deletions
|
@ -416,7 +416,6 @@ err:
|
||||||
void taskstats_exit_alloc(struct taskstats **ptidstats, unsigned int *mycpu)
|
void taskstats_exit_alloc(struct taskstats **ptidstats, unsigned int *mycpu)
|
||||||
{
|
{
|
||||||
struct listener_list *listeners;
|
struct listener_list *listeners;
|
||||||
struct taskstats *tmp;
|
|
||||||
/*
|
/*
|
||||||
* This is the cpu on which the task is exiting currently and will
|
* This is the cpu on which the task is exiting currently and will
|
||||||
* be the one for which the exit event is sent, even if the cpu
|
* be the one for which the exit event is sent, even if the cpu
|
||||||
|
@ -424,19 +423,11 @@ void taskstats_exit_alloc(struct taskstats **ptidstats, unsigned int *mycpu)
|
||||||
*/
|
*/
|
||||||
*mycpu = raw_smp_processor_id();
|
*mycpu = raw_smp_processor_id();
|
||||||
|
|
||||||
*ptidstats = NULL;
|
|
||||||
tmp = kmem_cache_zalloc(taskstats_cache, GFP_KERNEL);
|
|
||||||
if (!tmp)
|
|
||||||
return;
|
|
||||||
|
|
||||||
listeners = &per_cpu(listener_array, *mycpu);
|
listeners = &per_cpu(listener_array, *mycpu);
|
||||||
down_read(&listeners->sem);
|
|
||||||
if (!list_empty(&listeners->list)) {
|
*ptidstats = NULL;
|
||||||
*ptidstats = tmp;
|
if (!list_empty(&listeners->list))
|
||||||
tmp = NULL;
|
*ptidstats = kmem_cache_zalloc(taskstats_cache, GFP_KERNEL);
|
||||||
}
|
|
||||||
up_read(&listeners->sem);
|
|
||||||
kfree(tmp);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Send pid data out on exit */
|
/* Send pid data out on exit */
|
||||||
|
|
Loading…
Reference in a new issue