Lines Matching refs:dsos

15 void dsos__init(struct dsos *dsos)  in dsos__init()  argument
17 init_rwsem(&dsos->lock); in dsos__init()
19 dsos->cnt = 0; in dsos__init()
20 dsos->allocated = 0; in dsos__init()
21 dsos->dsos = NULL; in dsos__init()
22 dsos->sorted = true; in dsos__init()
25 static void dsos__purge(struct dsos *dsos) in dsos__purge() argument
27 down_write(&dsos->lock); in dsos__purge()
29 for (unsigned int i = 0; i < dsos->cnt; i++) { in dsos__purge()
30 struct dso *dso = dsos->dsos[i]; in dsos__purge()
36 zfree(&dsos->dsos); in dsos__purge()
37 dsos->cnt = 0; in dsos__purge()
38 dsos->allocated = 0; in dsos__purge()
39 dsos->sorted = true; in dsos__purge()
41 up_write(&dsos->lock); in dsos__purge()
44 void dsos__exit(struct dsos *dsos) in dsos__exit() argument
46 dsos__purge(dsos); in dsos__exit()
47 exit_rwsem(&dsos->lock); in dsos__exit()
51 static int __dsos__for_each_dso(struct dsos *dsos, in __dsos__for_each_dso() argument
55 for (unsigned int i = 0; i < dsos->cnt; i++) { in __dsos__for_each_dso()
56 struct dso *dso = dsos->dsos[i]; in __dsos__for_each_dso()
99 bool dsos__read_build_ids(struct dsos *dsos, bool with_hits) in dsos__read_build_ids() argument
106 dsos__for_each_dso(dsos, dsos__read_build_ids_cb, &args); in dsos__read_build_ids()
156 static struct dso *__dsos__find_by_longname_id(struct dsos *dsos, in __dsos__find_by_longname_id() argument
167 if (dsos->dsos == NULL) in __dsos__find_by_longname_id()
170 if (!dsos->sorted) { in __dsos__find_by_longname_id()
174 up_read(&dsos->lock); in __dsos__find_by_longname_id()
175 down_write(&dsos->lock); in __dsos__find_by_longname_id()
176 dso = __dsos__find_by_longname_id(dsos, name, id, in __dsos__find_by_longname_id()
178 up_write(&dsos->lock); in __dsos__find_by_longname_id()
179 down_read(&dsos->lock); in __dsos__find_by_longname_id()
182 qsort(dsos->dsos, dsos->cnt, sizeof(struct dso *), in __dsos__find_by_longname_id()
184 dsos->sorted = true; in __dsos__find_by_longname_id()
187 res = bsearch(&key, dsos->dsos, dsos->cnt, sizeof(struct dso *), in __dsos__find_by_longname_id()
195 int __dsos__add(struct dsos *dsos, struct dso *dso) in __dsos__add() argument
197 if (dsos->cnt == dsos->allocated) { in __dsos__add()
201 if (dsos->allocated > 0) in __dsos__add()
202 to_allocate = dsos->allocated * 2; in __dsos__add()
203 temp = realloc(dsos->dsos, sizeof(struct dso *) * to_allocate); in __dsos__add()
206 dsos->dsos = temp; in __dsos__add()
207 dsos->allocated = to_allocate; in __dsos__add()
209 if (!dsos->sorted) { in __dsos__add()
210 dsos->dsos[dsos->cnt++] = dso__get(dso); in __dsos__add()
212 int low = 0, high = dsos->cnt - 1; in __dsos__add()
213 int insert = dsos->cnt; /* Default to inserting at the end. */ in __dsos__add()
217 int cmp = dsos__cmp_long_name_id_short_name(&dsos->dsos[mid], &dso); in __dsos__add()
226 memmove(&dsos->dsos[insert + 1], &dsos->dsos[insert], in __dsos__add()
227 (dsos->cnt - insert) * sizeof(struct dso *)); in __dsos__add()
228 dsos->cnt++; in __dsos__add()
229 dsos->dsos[insert] = dso__get(dso); in __dsos__add()
231 dso__set_dsos(dso, dsos); in __dsos__add()
235 int dsos__add(struct dsos *dsos, struct dso *dso) in dsos__add() argument
239 down_write(&dsos->lock); in dsos__add()
240 ret = __dsos__add(dsos, dso); in dsos__add()
241 up_write(&dsos->lock); in dsos__add()
263 static struct dso *__dsos__find_id(struct dsos *dsos, const char *name, struct dso_id *id, in __dsos__find_id() argument
275 __dsos__for_each_dso(dsos, dsos__find_id_cb, &args); in __dsos__find_id()
278 res = __dsos__find_by_longname_id(dsos, name, id, write_locked); in __dsos__find_id()
282 struct dso *dsos__find(struct dsos *dsos, const char *name, bool cmp_short) in dsos__find() argument
286 down_read(&dsos->lock); in dsos__find()
287 res = __dsos__find_id(dsos, name, NULL, cmp_short, /*write_locked=*/false); in dsos__find()
288 up_read(&dsos->lock); in dsos__find()
324 static struct dso *__dsos__addnew_id(struct dsos *dsos, const char *name, struct dso_id *id) in __dsos__addnew_id() argument
335 __dsos__add(dsos, dso); in __dsos__addnew_id()
340 static struct dso *__dsos__findnew_id(struct dsos *dsos, const char *name, struct dso_id *id) in __dsos__findnew_id() argument
342 struct dso *dso = __dsos__find_id(dsos, name, id, false, /*write_locked=*/true); in __dsos__findnew_id()
347 return dso ? dso : __dsos__addnew_id(dsos, name, id); in __dsos__findnew_id()
350 struct dso *dsos__findnew_id(struct dsos *dsos, const char *name, struct dso_id *id) in dsos__findnew_id() argument
353 down_write(&dsos->lock); in dsos__findnew_id()
354 dso = __dsos__findnew_id(dsos, name, id); in dsos__findnew_id()
355 up_write(&dsos->lock); in dsos__findnew_id()
378 size_t dsos__fprintf_buildid(struct dsos *dsos, FILE *fp, in dsos__fprintf_buildid() argument
388 dsos__for_each_dso(dsos, dsos__fprintf_buildid_cb, &args); in dsos__fprintf_buildid()
405 size_t dsos__fprintf(struct dsos *dsos, FILE *fp) in dsos__fprintf() argument
412 dsos__for_each_dso(dsos, dsos__fprintf_cb, &args); in dsos__fprintf()
422 int dsos__hit_all(struct dsos *dsos) in dsos__hit_all() argument
424 return dsos__for_each_dso(dsos, dsos__hit_all_cb, NULL); in dsos__hit_all()
427 struct dso *dsos__findnew_module_dso(struct dsos *dsos, in dsos__findnew_module_dso() argument
434 down_write(&dsos->lock); in dsos__findnew_module_dso()
436 dso = __dsos__find_id(dsos, m->name, NULL, /*cmp_short=*/true, /*write_locked=*/true); in dsos__findnew_module_dso()
438 up_write(&dsos->lock); in dsos__findnew_module_dso()
448 up_write(&dsos->lock); in dsos__findnew_module_dso()
455 __dsos__add(dsos, dso); in dsos__findnew_module_dso()
457 up_write(&dsos->lock); in dsos__findnew_module_dso()
485 struct dso *dsos__find_kernel_dso(struct dsos *dsos) in dsos__find_kernel_dso() argument
489 dsos__for_each_dso(dsos, dsos__find_kernel_dso_cb, &res); in dsos__find_kernel_dso()
493 int dsos__for_each_dso(struct dsos *dsos, int (*cb)(struct dso *dso, void *data), void *data) in dsos__for_each_dso() argument
497 down_read(&dsos->lock); in dsos__for_each_dso()
498 err = __dsos__for_each_dso(dsos, cb, data); in dsos__for_each_dso()
499 up_read(&dsos->lock); in dsos__for_each_dso()