diff options
-rw-r--r-- | lib/stackdepot.c | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/lib/stackdepot.c b/lib/stackdepot.c index f87d138e9672..e513459a5601 100644 --- a/lib/stackdepot.c +++ b/lib/stackdepot.c | |||
@@ -163,6 +163,21 @@ static inline u32 hash_stack(unsigned long *entries, unsigned int size) | |||
163 | STACK_HASH_SEED); | 163 | STACK_HASH_SEED); |
164 | } | 164 | } |
165 | 165 | ||
166 | /* Use our own, non-instrumented version of memcmp(). | ||
167 | * | ||
168 | * We actually don't care about the order, just the equality. | ||
169 | */ | ||
170 | static inline | ||
171 | int stackdepot_memcmp(const unsigned long *u1, const unsigned long *u2, | ||
172 | unsigned int n) | ||
173 | { | ||
174 | for ( ; n-- ; u1++, u2++) { | ||
175 | if (*u1 != *u2) | ||
176 | return 1; | ||
177 | } | ||
178 | return 0; | ||
179 | } | ||
180 | |||
166 | /* Find a stack that is equal to the one stored in entries in the hash */ | 181 | /* Find a stack that is equal to the one stored in entries in the hash */ |
167 | static inline struct stack_record *find_stack(struct stack_record *bucket, | 182 | static inline struct stack_record *find_stack(struct stack_record *bucket, |
168 | unsigned long *entries, int size, | 183 | unsigned long *entries, int size, |
@@ -173,10 +188,8 @@ static inline struct stack_record *find_stack(struct stack_record *bucket, | |||
173 | for (found = bucket; found; found = found->next) { | 188 | for (found = bucket; found; found = found->next) { |
174 | if (found->hash == hash && | 189 | if (found->hash == hash && |
175 | found->size == size && | 190 | found->size == size && |
176 | !memcmp(entries, found->entries, | 191 | !stackdepot_memcmp(entries, found->entries, size)) |
177 | size * sizeof(unsigned long))) { | ||
178 | return found; | 192 | return found; |
179 | } | ||
180 | } | 193 | } |
181 | return NULL; | 194 | return NULL; |
182 | } | 195 | } |