Skip to content

Commit

Permalink
perf thread-stack: Allocate an array of thread stacks
Browse files Browse the repository at this point in the history
In preparation for fixing thread stack processing for the idle task,
allocate an array of thread stacks.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
Acked-by: Jiri Olsa <jolsa@kernel.org>
Link: http://lkml.kernel.org/r/20181221120620.9659-7-adrian.hunter@intel.com
[ No need to check for NULL when calling zfree(), noticed by Jiri Olsa ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
  • Loading branch information
Adrian Hunter authored and Arnaldo Carvalho de Melo committed Jan 2, 2019
1 parent 2e9e868 commit 139f42f
Showing 1 changed file with 17 additions and 12 deletions.
29 changes: 17 additions & 12 deletions tools/perf/util/thread-stack.c
Original file line number Diff line number Diff line change
Expand Up @@ -114,20 +114,25 @@ static int thread_stack__init(struct thread_stack *ts, struct thread *thread,
static struct thread_stack *thread_stack__new(struct thread *thread,
struct call_return_processor *crp)
{
struct thread_stack *ts;

ts = zalloc(sizeof(struct thread_stack));
if (!ts)
return NULL;

ts->arr_sz = 1;

if (thread_stack__init(ts, thread, crp)) {
free(ts);
return NULL;
struct thread_stack *ts = thread->ts, *new_ts;
unsigned int old_sz = ts ? ts->arr_sz : 0;
unsigned int new_sz = 1;

if (!ts || new_sz > old_sz) {
new_ts = calloc(new_sz, sizeof(*ts));
if (!new_ts)
return NULL;
if (ts)
memcpy(new_ts, ts, old_sz * sizeof(*ts));
new_ts->arr_sz = new_sz;
zfree(&thread->ts);
thread->ts = new_ts;
ts = new_ts;
}

thread->ts = ts;
if (!ts->stack &&
thread_stack__init(ts, thread, crp))
return NULL;

return ts;
}
Expand Down

0 comments on commit 139f42f

Please sign in to comment.