Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

perf intlist: Change 'struct intlist' int member to 'unsigned long'

This is to let intlist support addresses as its payload.

One potential problem is it can't support negative number. But so far,
there is no such kind of use case.

Signed-off-by: Jin Yao <yao.jin@linux.intel.com>
Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Jin Yao <yao.jin@intel.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Kan Liang <kan.liang@linux.intel.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lore.kernel.org/lkml/20210207080935.31784-1-yao.jin@linux.intel.com
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

authored by

Jin Yao and committed by
Arnaldo Carvalho de Melo
94253393 a81fbb87

+22 -17
+16 -11
tools/perf/util/intlist.c
··· 13 13 static struct rb_node *intlist__node_new(struct rblist *rblist __maybe_unused, 14 14 const void *entry) 15 15 { 16 - int i = (int)((long)entry); 16 + unsigned long i = (unsigned long)entry; 17 17 struct rb_node *rc = NULL; 18 18 struct int_node *node = malloc(sizeof(*node)); 19 19 ··· 41 41 42 42 static int intlist__node_cmp(struct rb_node *rb_node, const void *entry) 43 43 { 44 - int i = (int)((long)entry); 44 + unsigned long i = (unsigned long)entry; 45 45 struct int_node *node = container_of(rb_node, struct int_node, rb_node); 46 46 47 - return node->i - i; 47 + if (node->i > i) 48 + return 1; 49 + else if (node->i < i) 50 + return -1; 51 + 52 + return 0; 48 53 } 49 54 50 - int intlist__add(struct intlist *ilist, int i) 55 + int intlist__add(struct intlist *ilist, unsigned long i) 51 56 { 52 - return rblist__add_node(&ilist->rblist, (void *)((long)i)); 57 + return rblist__add_node(&ilist->rblist, (void *)i); 53 58 } 54 59 55 60 void intlist__remove(struct intlist *ilist, struct int_node *node) ··· 63 58 } 64 59 65 60 static struct int_node *__intlist__findnew(struct intlist *ilist, 66 - int i, bool create) 61 + unsigned long i, bool create) 67 62 { 68 63 struct int_node *node = NULL; 69 64 struct rb_node *rb_node; ··· 72 67 return NULL; 73 68 74 69 if (create) 75 - rb_node = rblist__findnew(&ilist->rblist, (void *)((long)i)); 70 + rb_node = rblist__findnew(&ilist->rblist, (void *)i); 76 71 else 77 - rb_node = rblist__find(&ilist->rblist, (void *)((long)i)); 72 + rb_node = rblist__find(&ilist->rblist, (void *)i); 78 73 79 74 if (rb_node) 80 75 node = container_of(rb_node, struct int_node, rb_node); ··· 82 77 return node; 83 78 } 84 79 85 - struct int_node *intlist__find(struct intlist *ilist, int i) 80 + struct int_node *intlist__find(struct intlist *ilist, unsigned long i) 86 81 { 87 82 return __intlist__findnew(ilist, i, false); 88 83 } 89 84 90 - struct int_node *intlist__findnew(struct intlist *ilist, int i) 85 + struct int_node *intlist__findnew(struct intlist *ilist, unsigned long i) 91 86 { 92 87 return __intlist__findnew(ilist, i, true); 93 88 } ··· 98 93 int err; 99 94 100 95 do { 101 - long value = strtol(s, &sep, 10); 96 + unsigned long value = strtol(s, &sep, 10); 102 97 err = -EINVAL; 103 98 if (*sep != ',' && *sep != '\0') 104 99 break;
+5 -5
tools/perf/util/intlist.h
··· 9 9 10 10 struct int_node { 11 11 struct rb_node rb_node; 12 - int i; 12 + unsigned long i; 13 13 void *priv; 14 14 }; 15 15 ··· 21 21 void intlist__delete(struct intlist *ilist); 22 22 23 23 void intlist__remove(struct intlist *ilist, struct int_node *in); 24 - int intlist__add(struct intlist *ilist, int i); 24 + int intlist__add(struct intlist *ilist, unsigned long i); 25 25 26 26 struct int_node *intlist__entry(const struct intlist *ilist, unsigned int idx); 27 - struct int_node *intlist__find(struct intlist *ilist, int i); 28 - struct int_node *intlist__findnew(struct intlist *ilist, int i); 27 + struct int_node *intlist__find(struct intlist *ilist, unsigned long i); 28 + struct int_node *intlist__findnew(struct intlist *ilist, unsigned long i); 29 29 30 - static inline bool intlist__has_entry(struct intlist *ilist, int i) 30 + static inline bool intlist__has_entry(struct intlist *ilist, unsigned long i) 31 31 { 32 32 return intlist__find(ilist, i) != NULL; 33 33 }
+1 -1
tools/perf/util/probe-event.c
··· 1074 1074 } 1075 1075 1076 1076 intlist__for_each_entry(ln, lr->line_list) { 1077 - for (; ln->i > l; l++) { 1077 + for (; ln->i > (unsigned long)l; l++) { 1078 1078 ret = show_one_line(fp, l - lr->offset); 1079 1079 if (ret < 0) 1080 1080 goto end;