xyarray__realloc() could be used if we wish extend the evsel->fd, evsel->sample_id or any other xyarray on-the-fly.
Cc: David Ahern <dsah...@gmail.com> Cc: Arjan van de Ven <ar...@linux.intel.com> Cc: Namhyung Kim <namhy...@gmail.com> Cc: Yanmin Zhang <yanmin.zh...@intel.com> Cc: Wu Fengguang <fengguang...@intel.com> Cc: Mike Galbraith <efa...@gmx.de> Cc: Paul Mackerras <pau...@samba.org> Cc: Peter Zijlstra <pet...@infradead.org> Cc: Ingo Molnar <mi...@redhat.com> Cc: Arnaldo Carvalho de Melo <a...@ghostprotocols.net> Cc: Andrew Morton <a...@linux-foundation.org> Signed-off-by: Chenggang Qin <chenggang....@taobao.com> --- tools/perf/util/xyarray.c | 26 ++++++++++++++++++++++++++ tools/perf/util/xyarray.h | 2 ++ 2 files changed, 28 insertions(+) diff --git a/tools/perf/util/xyarray.c b/tools/perf/util/xyarray.c index 22afbf6..4e76377 100644 --- a/tools/perf/util/xyarray.c +++ b/tools/perf/util/xyarray.c @@ -18,3 +18,29 @@ void xyarray__delete(struct xyarray *xy) { free(xy); } + +int xyarray__realloc(struct xyarray **xy_old, int xlen_old, int xlen_new, + int ylen_new) +{ + size_t row_size_new = ylen_new * (*xy_old)->entry_size; + struct xyarray *xy_new = zalloc(sizeof(*xy_new) + xlen_new + * row_size_new); + int x; + + if (xy_new != NULL) { + for (x = 0; x < xlen_old; x++) + memcpy(&xy_new->contents[x * row_size_new], + &((*xy_old)->contents[x * (*xy_old)->row_size]), + (*xy_old)->row_size); + + xy_new->row_size = row_size_new; + xy_new->entry_size = (*xy_old)->entry_size; + + xyarray__delete(*xy_old); + + *xy_old = xy_new; + + return 0; + } + + return -1; +} + diff --git a/tools/perf/util/xyarray.h b/tools/perf/util/xyarray.h index c488a07..ad41649 100644 --- a/tools/perf/util/xyarray.h +++ b/tools/perf/util/xyarray.h @@ -11,6 +11,8 @@ struct xyarray { struct xyarray *xyarray__new(int xlen, int ylen, size_t entry_size); void xyarray__delete(struct xyarray *xy); +int xyarray__realloc(struct xyarray **xy_old, int xlen_old, int xlen_new, + int ylen_new); static inline void *xyarray__entry(struct xyarray *xy, int x, int y) { -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/