• Home
  • Raw
  • Download

Lines Matching +full:com +full:- +full:seq

1 // SPDX-License-Identifier: GPL-2.0
6 * Author(s): Peter Oberparleiter <oberpar@linux.vnet.ibm.com>
8 * Uses gcc-internal data definitions.
9 * Based on the gcov-kernel patch by:
10 * Hubertus Franke <frankeh@us.ibm.com>
11 * Nigel Hinds <nhinds@us.ibm.com>
12 * Rajan Ravindran <rajancr@us.ibm.com>
13 * Peter Oberparleiter <oberpar@linux.vnet.ibm.com>
32 * struct gcov_node - represents a debugfs entry
70 /* If non-zero, keep copies of profiling data for unloaded modules. */
94 static void *gcov_seq_start(struct seq_file *seq, loff_t *pos) in gcov_seq_start() argument
98 gcov_iter_start(seq->private); in gcov_seq_start()
100 if (gcov_iter_next(seq->private)) in gcov_seq_start()
103 return seq->private; in gcov_seq_start()
107 static void *gcov_seq_next(struct seq_file *seq, void *data, loff_t *pos) in gcov_seq_next() argument
119 static int gcov_seq_show(struct seq_file *seq, void *data) in gcov_seq_show() argument
123 if (gcov_iter_write(iter, seq)) in gcov_seq_show()
124 return -EINVAL; in gcov_seq_show()
128 static void gcov_seq_stop(struct seq_file *seq, void *data) in gcov_seq_stop() argument
147 if (node->num_loaded > 0) in get_node_info()
148 return node->loaded_info[0]; in get_node_info()
150 return node->unloaded_info; in get_node_info()
162 if (node->unloaded_info) in get_accumulated_info()
163 info = gcov_info_dup(node->unloaded_info); in get_accumulated_info()
165 info = gcov_info_dup(node->loaded_info[i++]); in get_accumulated_info()
168 for (; i < node->num_loaded; i++) in get_accumulated_info()
169 gcov_info_add(info, node->loaded_info[i]); in get_accumulated_info()
180 struct gcov_node *node = inode->i_private; in gcov_seq_open()
182 struct seq_file *seq; in gcov_seq_open() local
184 int rc = -ENOMEM; in gcov_seq_open()
201 seq = file->private_data; in gcov_seq_open()
202 seq->private = iter; in gcov_seq_open()
222 struct seq_file *seq; in gcov_seq_release() local
224 seq = file->private_data; in gcov_seq_release()
225 iter = seq->private; in gcov_seq_release()
259 if (node->unloaded_info) in reset_node()
260 gcov_info_reset(node->unloaded_info); in reset_node()
261 for (i = 0; i < node->num_loaded; i++) in reset_node()
262 gcov_info_reset(node->loaded_info[i]); in reset_node()
275 struct seq_file *seq; in gcov_seq_write() local
279 seq = file->private_data; in gcov_seq_write()
280 info = gcov_iter_get_info(seq->private); in gcov_seq_write()
285 if (node->num_loaded == 0) in gcov_seq_write()
337 if (ext->dir == SRC_TREE) in get_link_target()
338 result = link_target(srctree, rel, ext->ext); in get_link_target()
340 result = link_target(objtree, rel, ext->ext); in get_link_target()
343 result = link_target(NULL, filename, ext->ext); in get_link_target()
353 * for filename skewing caused by the mod-versioning mechanism.
357 if (strncmp(basename, SKEW_PREFIX, sizeof(SKEW_PREFIX) - 1) == 0) in deskew()
358 return basename + sizeof(SKEW_PREFIX) - 1; in deskew()
375 node->links = kcalloc(num, sizeof(struct dentry *), GFP_KERNEL); in add_links()
376 if (!node->links) in add_links()
387 node->links[i] = debugfs_create_symlink(deskew(basename), in add_links()
395 while (i-- > 0) in add_links()
396 debugfs_remove(node->links[i]); in add_links()
397 kfree(node->links); in add_links()
398 node->links = NULL; in add_links()
413 INIT_LIST_HEAD(&node->list); in init_node()
414 INIT_LIST_HEAD(&node->children); in init_node()
415 INIT_LIST_HEAD(&node->all); in init_node()
416 if (node->loaded_info) { in init_node()
417 node->loaded_info[0] = info; in init_node()
418 node->num_loaded = 1; in init_node()
420 node->parent = parent; in init_node()
422 strcpy(node->name, name); in init_node()
438 node->loaded_info = kcalloc(1, sizeof(struct gcov_info *), in new_node()
440 if (!node->loaded_info) in new_node()
446 node->dentry = debugfs_create_file(deskew(node->name), 0600, in new_node()
447 parent->dentry, node, &gcov_data_fops); in new_node()
449 node->dentry = debugfs_create_dir(node->name, parent->dentry); in new_node()
451 add_links(node, parent->dentry); in new_node()
452 list_add(&node->list, &parent->children); in new_node()
453 list_add(&node->all, &all_head); in new_node()
468 if (!node->links) in remove_links()
471 debugfs_remove(node->links[i]); in remove_links()
472 kfree(node->links); in remove_links()
473 node->links = NULL; in remove_links()
482 list_del(&node->list); in release_node()
483 list_del(&node->all); in release_node()
484 debugfs_remove(node->dentry); in release_node()
486 kfree(node->loaded_info); in release_node()
487 if (node->unloaded_info) in release_node()
488 gcov_info_free(node->unloaded_info); in release_node()
497 while ((node != &root_node) && list_empty(&node->children)) { in remove_node()
498 parent = node->parent; in remove_node()
513 list_for_each_entry(node, &parent->children, list) { in get_child_by_name()
514 if (strcmp(node->name, name) == 0) in get_child_by_name()
533 if (node->num_loaded > 0) in reset_write()
535 else if (list_empty(&node->children)) { in reset_write()
537 /* Several nodes may have gone - restart loop. */ in reset_write()
584 if (!parent->parent) in add_node()
586 parent = parent->parent; in add_node()
617 int num = node->num_loaded; in add_info()
630 memcpy(loaded_info, node->loaded_info, in add_info()
639 if (!gcov_info_is_compatible(node->unloaded_info, info)) { in add_info()
643 gcov_info_free(node->unloaded_info); in add_info()
644 node->unloaded_info = NULL; in add_info()
651 if (!gcov_info_is_compatible(node->loaded_info[0], info)) { in add_info()
659 kfree(node->loaded_info); in add_info()
660 node->loaded_info = loaded_info; in add_info()
661 node->num_loaded = num + 1; in add_info()
671 for (i = 0; i < node->num_loaded; i++) { in get_info_index()
672 if (node->loaded_info[i] == info) in get_info_index()
675 return -ENOENT; in get_info_index()
683 if (node->unloaded_info) in save_info()
684 gcov_info_add(node->unloaded_info, info); in save_info()
686 node->unloaded_info = gcov_info_dup(info); in save_info()
687 if (!node->unloaded_info) { in save_info()
712 node->loaded_info[i] = node->loaded_info[node->num_loaded - 1]; in remove_info()
713 node->num_loaded--; in remove_info()
714 if (node->num_loaded > 0) in remove_info()
717 kfree(node->loaded_info); in remove_info()
718 node->loaded_info = NULL; in remove_info()
719 node->num_loaded = 0; in remove_info()
720 if (!node->unloaded_info) in remove_info()
726 * -fprofile-arcs is loaded/unloaded.
768 /* Replay previous events to get our fs hierarchy up-to-date. */ in gcov_fs_init()