Messages in this thread | | | Date | Wed, 6 Apr 2022 11:09:11 +0200 | Subject | Re: [PATCH v3 4/6] mm/slub: distinguish and print stack traces in debugfs files | From | Vlastimil Babka <> |
| |
On 4/5/22 23:40, David Rientjes wrote: >> @@ -5116,9 +5117,13 @@ static int add_location(struct loc_track *t, struct kmem_cache *s, >> { >> long start, end, pos; >> struct location *l; >> - unsigned long caddr; >> + unsigned long caddr, chandle; >> unsigned long age = jiffies - track->when; >> + depot_stack_handle_t handle = 0; >> >> +#ifdef CONFIG_STACKDEPOT >> + handle = READ_ONCE(track->handle); >> +#endif >> start = -1; >> end = t->count; >> >> @@ -5133,7 +5138,8 @@ static int add_location(struct loc_track *t, struct kmem_cache *s, >> break; >> >> caddr = t->loc[pos].addr; >> - if (track->addr == caddr) { >> + chandle = t->loc[pos].handle; >> + if ((track->addr == caddr) && (handle == chandle)) { >> >> l = &t->loc[pos]; >> l->count++; >> @@ -5158,6 +5164,8 @@ static int add_location(struct loc_track *t, struct kmem_cache *s, >> >> if (track->addr < caddr) >> end = pos; >> + else if (track->addr == caddr && handle < chandle) >> + end = pos; >> else >> start = pos; >> } > > Does this need to properly handle the case where handle == NULL?
Hm I can't think of how much more properly is possible. If objects have same track->addr (which is the immediate caller) and also same NULL handle, they will be counted together. I think it's the best we can do?
| |