Loading kernel/trace/trace_stat.c +71 −76 Original line number Diff line number Diff line Loading @@ -56,71 +56,6 @@ static void destroy_session(struct tracer_stat_session *session) kfree(session); } static int init_stat_file(struct tracer_stat_session *session); int register_stat_tracer(struct tracer_stat *trace) { struct tracer_stat_session *session, *node, *tmp; int ret; if (!trace) return -EINVAL; if (!trace->stat_start || !trace->stat_next || !trace->stat_show) return -EINVAL; /* Already registered? */ mutex_lock(&all_stat_sessions_mutex); list_for_each_entry_safe(node, tmp, &all_stat_sessions, session_list) { if (node->ts == trace) { mutex_unlock(&all_stat_sessions_mutex); return -EINVAL; } } mutex_unlock(&all_stat_sessions_mutex); /* Init the session */ session = kmalloc(sizeof(struct tracer_stat_session), GFP_KERNEL); if (!session) return -ENOMEM; session->ts = trace; INIT_LIST_HEAD(&session->session_list); INIT_LIST_HEAD(&session->stat_list); mutex_init(&session->stat_mutex); session->file = NULL; ret = init_stat_file(session); if (ret) { destroy_session(session); return ret; } /* Register */ mutex_lock(&all_stat_sessions_mutex); list_add_tail(&session->session_list, &all_stat_sessions); mutex_unlock(&all_stat_sessions_mutex); return 0; } void unregister_stat_tracer(struct tracer_stat *trace) { struct tracer_stat_session *node, *tmp; mutex_lock(&all_stat_sessions_mutex); list_for_each_entry_safe(node, tmp, &all_stat_sessions, session_list) { if (node->ts == trace) { list_del(&node->session_list); destroy_session(node); break; } } mutex_unlock(&all_stat_sessions_mutex); } /* * For tracers that don't provide a stat_cmp callback. * This one will force an immediate insertion on tail of Loading Loading @@ -275,7 +210,6 @@ static int tracing_stat_open(struct inode *inode, struct file *file) return ret; } /* * Avoid consuming memory with our now useless list. */ Loading Loading @@ -322,3 +256,64 @@ static int init_stat_file(struct tracer_stat_session *session) return -ENOMEM; return 0; } int register_stat_tracer(struct tracer_stat *trace) { struct tracer_stat_session *session, *node, *tmp; int ret; if (!trace) return -EINVAL; if (!trace->stat_start || !trace->stat_next || !trace->stat_show) return -EINVAL; /* Already registered? */ mutex_lock(&all_stat_sessions_mutex); list_for_each_entry_safe(node, tmp, &all_stat_sessions, session_list) { if (node->ts == trace) { mutex_unlock(&all_stat_sessions_mutex); return -EINVAL; } } mutex_unlock(&all_stat_sessions_mutex); /* Init the session */ session = kmalloc(sizeof(struct tracer_stat_session), GFP_KERNEL); if (!session) return -ENOMEM; session->ts = trace; INIT_LIST_HEAD(&session->session_list); INIT_LIST_HEAD(&session->stat_list); mutex_init(&session->stat_mutex); session->file = NULL; ret = init_stat_file(session); if (ret) { destroy_session(session); return ret; } /* Register */ mutex_lock(&all_stat_sessions_mutex); list_add_tail(&session->session_list, &all_stat_sessions); mutex_unlock(&all_stat_sessions_mutex); return 0; } void unregister_stat_tracer(struct tracer_stat *trace) { struct tracer_stat_session *node, *tmp; mutex_lock(&all_stat_sessions_mutex); list_for_each_entry_safe(node, tmp, &all_stat_sessions, session_list) { if (node->ts == trace) { list_del(&node->session_list); destroy_session(node); break; } } mutex_unlock(&all_stat_sessions_mutex); } Loading
kernel/trace/trace_stat.c +71 −76 Original line number Diff line number Diff line Loading @@ -56,71 +56,6 @@ static void destroy_session(struct tracer_stat_session *session) kfree(session); } static int init_stat_file(struct tracer_stat_session *session); int register_stat_tracer(struct tracer_stat *trace) { struct tracer_stat_session *session, *node, *tmp; int ret; if (!trace) return -EINVAL; if (!trace->stat_start || !trace->stat_next || !trace->stat_show) return -EINVAL; /* Already registered? */ mutex_lock(&all_stat_sessions_mutex); list_for_each_entry_safe(node, tmp, &all_stat_sessions, session_list) { if (node->ts == trace) { mutex_unlock(&all_stat_sessions_mutex); return -EINVAL; } } mutex_unlock(&all_stat_sessions_mutex); /* Init the session */ session = kmalloc(sizeof(struct tracer_stat_session), GFP_KERNEL); if (!session) return -ENOMEM; session->ts = trace; INIT_LIST_HEAD(&session->session_list); INIT_LIST_HEAD(&session->stat_list); mutex_init(&session->stat_mutex); session->file = NULL; ret = init_stat_file(session); if (ret) { destroy_session(session); return ret; } /* Register */ mutex_lock(&all_stat_sessions_mutex); list_add_tail(&session->session_list, &all_stat_sessions); mutex_unlock(&all_stat_sessions_mutex); return 0; } void unregister_stat_tracer(struct tracer_stat *trace) { struct tracer_stat_session *node, *tmp; mutex_lock(&all_stat_sessions_mutex); list_for_each_entry_safe(node, tmp, &all_stat_sessions, session_list) { if (node->ts == trace) { list_del(&node->session_list); destroy_session(node); break; } } mutex_unlock(&all_stat_sessions_mutex); } /* * For tracers that don't provide a stat_cmp callback. * This one will force an immediate insertion on tail of Loading Loading @@ -275,7 +210,6 @@ static int tracing_stat_open(struct inode *inode, struct file *file) return ret; } /* * Avoid consuming memory with our now useless list. */ Loading Loading @@ -322,3 +256,64 @@ static int init_stat_file(struct tracer_stat_session *session) return -ENOMEM; return 0; } int register_stat_tracer(struct tracer_stat *trace) { struct tracer_stat_session *session, *node, *tmp; int ret; if (!trace) return -EINVAL; if (!trace->stat_start || !trace->stat_next || !trace->stat_show) return -EINVAL; /* Already registered? */ mutex_lock(&all_stat_sessions_mutex); list_for_each_entry_safe(node, tmp, &all_stat_sessions, session_list) { if (node->ts == trace) { mutex_unlock(&all_stat_sessions_mutex); return -EINVAL; } } mutex_unlock(&all_stat_sessions_mutex); /* Init the session */ session = kmalloc(sizeof(struct tracer_stat_session), GFP_KERNEL); if (!session) return -ENOMEM; session->ts = trace; INIT_LIST_HEAD(&session->session_list); INIT_LIST_HEAD(&session->stat_list); mutex_init(&session->stat_mutex); session->file = NULL; ret = init_stat_file(session); if (ret) { destroy_session(session); return ret; } /* Register */ mutex_lock(&all_stat_sessions_mutex); list_add_tail(&session->session_list, &all_stat_sessions); mutex_unlock(&all_stat_sessions_mutex); return 0; } void unregister_stat_tracer(struct tracer_stat *trace) { struct tracer_stat_session *node, *tmp; mutex_lock(&all_stat_sessions_mutex); list_for_each_entry_safe(node, tmp, &all_stat_sessions, session_list) { if (node->ts == trace) { list_del(&node->session_list); destroy_session(node); break; } } mutex_unlock(&all_stat_sessions_mutex); }