Lines Matching refs:node

255 static struct gcov_info *get_node_info(struct gcov_node *node)  in get_node_info()  argument
257 if (node->num_loaded > 0) in get_node_info()
258 return node->loaded_info[0]; in get_node_info()
260 return node->unloaded_info; in get_node_info()
267 static struct gcov_info *get_accumulated_info(struct gcov_node *node) in get_accumulated_info() argument
272 if (node->unloaded_info) in get_accumulated_info()
273 info = gcov_info_dup(node->unloaded_info); in get_accumulated_info()
275 info = gcov_info_dup(node->loaded_info[i++]); in get_accumulated_info()
278 for (; i < node->num_loaded; i++) in get_accumulated_info()
279 gcov_info_add(info, node->loaded_info[i]); in get_accumulated_info()
290 struct gcov_node *node = inode->i_private; in gcov_seq_open() local
302 info = get_accumulated_info(node); in gcov_seq_open()
350 struct gcov_node *node; in get_node_by_name() local
353 list_for_each_entry(node, &all_head, all) { in get_node_by_name()
354 info = get_node_info(node); in get_node_by_name()
356 return node; in get_node_by_name()
365 static void reset_node(struct gcov_node *node) in reset_node() argument
369 if (node->unloaded_info) in reset_node()
370 gcov_info_reset(node->unloaded_info); in reset_node()
371 for (i = 0; i < node->num_loaded; i++) in reset_node()
372 gcov_info_reset(node->loaded_info[i]); in reset_node()
375 static void remove_node(struct gcov_node *node);
387 struct gcov_node *node; in gcov_seq_write() local
392 node = get_node_by_name(gcov_info_filename(info)); in gcov_seq_write()
393 if (node) { in gcov_seq_write()
395 if (node->num_loaded == 0) in gcov_seq_write()
396 remove_node(node); in gcov_seq_write()
398 reset_node(node); in gcov_seq_write()
476 static void add_links(struct gcov_node *node, struct dentry *parent) in add_links() argument
485 node->links = kcalloc(num, sizeof(struct dentry *), GFP_KERNEL); in add_links()
486 if (!node->links) in add_links()
490 gcov_info_filename(get_node_info(node)), in add_links()
497 node->links[i] = debugfs_create_symlink(deskew(basename), in add_links()
506 debugfs_remove(node->links[i]); in add_links()
507 kfree(node->links); in add_links()
508 node->links = NULL; in add_links()
520 static void init_node(struct gcov_node *node, struct gcov_info *info, in init_node() argument
523 INIT_LIST_HEAD(&node->list); in init_node()
524 INIT_LIST_HEAD(&node->children); in init_node()
525 INIT_LIST_HEAD(&node->all); in init_node()
526 if (node->loaded_info) { in init_node()
527 node->loaded_info[0] = info; in init_node()
528 node->num_loaded = 1; in init_node()
530 node->parent = parent; in init_node()
532 strcpy(node->name, name); in init_node()
542 struct gcov_node *node; in new_node() local
544 node = kzalloc(sizeof(struct gcov_node) + strlen(name) + 1, GFP_KERNEL); in new_node()
545 if (!node) in new_node()
548 node->loaded_info = kcalloc(1, sizeof(struct gcov_info *), in new_node()
550 if (!node->loaded_info) in new_node()
553 init_node(node, info, name, parent); in new_node()
556 node->dentry = debugfs_create_file(deskew(node->name), 0600, in new_node()
557 parent->dentry, node, &gcov_data_fops); in new_node()
559 node->dentry = debugfs_create_dir(node->name, parent->dentry); in new_node()
561 add_links(node, parent->dentry); in new_node()
562 list_add(&node->list, &parent->children); in new_node()
563 list_add(&node->all, &all_head); in new_node()
565 return node; in new_node()
568 kfree(node); in new_node()
574 static void remove_links(struct gcov_node *node) in remove_links() argument
578 if (!node->links) in remove_links()
581 debugfs_remove(node->links[i]); in remove_links()
582 kfree(node->links); in remove_links()
583 node->links = NULL; in remove_links()
590 static void release_node(struct gcov_node *node) in release_node() argument
592 list_del(&node->list); in release_node()
593 list_del(&node->all); in release_node()
594 debugfs_remove(node->dentry); in release_node()
595 remove_links(node); in release_node()
596 kfree(node->loaded_info); in release_node()
597 if (node->unloaded_info) in release_node()
598 gcov_info_free(node->unloaded_info); in release_node()
599 kfree(node); in release_node()
603 static void remove_node(struct gcov_node *node) in remove_node() argument
607 while ((node != &root_node) && list_empty(&node->children)) { in remove_node()
608 parent = node->parent; in remove_node()
609 release_node(node); in remove_node()
610 node = parent; in remove_node()
621 struct gcov_node *node; in get_child_by_name() local
623 list_for_each_entry(node, &parent->children, list) { in get_child_by_name()
624 if (strcmp(node->name, name) == 0) in get_child_by_name()
625 return node; in get_child_by_name()
638 struct gcov_node *node; in reset_write() local
642 list_for_each_entry(node, &all_head, all) { in reset_write()
643 if (node->num_loaded > 0) in reset_write()
644 reset_node(node); in reset_write()
645 else if (list_empty(&node->children)) { in reset_write()
646 remove_node(node); in reset_write()
680 struct gcov_node *node; in add_node() local
699 node = get_child_by_name(parent, curr); in add_node()
700 if (!node) { in add_node()
701 node = new_node(parent, NULL, curr); in add_node()
702 if (!node) in add_node()
705 parent = node; in add_node()
708 node = new_node(parent, info, curr); in add_node()
709 if (!node) in add_node()
724 static void add_info(struct gcov_node *node, struct gcov_info *info) in add_info() argument
727 int num = node->num_loaded; in add_info()
740 memcpy(loaded_info, node->loaded_info, in add_info()
749 if (!gcov_info_is_compatible(node->unloaded_info, info)) { in add_info()
753 gcov_info_free(node->unloaded_info); in add_info()
754 node->unloaded_info = NULL; in add_info()
761 if (!gcov_info_is_compatible(node->loaded_info[0], info)) { in add_info()
769 kfree(node->loaded_info); in add_info()
770 node->loaded_info = loaded_info; in add_info()
771 node->num_loaded = num + 1; in add_info()
777 static int get_info_index(struct gcov_node *node, struct gcov_info *info) in get_info_index() argument
781 for (i = 0; i < node->num_loaded; i++) { in get_info_index()
782 if (node->loaded_info[i] == info) in get_info_index()
791 static void save_info(struct gcov_node *node, struct gcov_info *info) in save_info() argument
793 if (node->unloaded_info) in save_info()
794 gcov_info_add(node->unloaded_info, info); in save_info()
796 node->unloaded_info = gcov_info_dup(info); in save_info()
797 if (!node->unloaded_info) { in save_info()
809 static void remove_info(struct gcov_node *node, struct gcov_info *info) in remove_info() argument
813 i = get_info_index(node, info); in remove_info()
820 save_info(node, info); in remove_info()
822 node->loaded_info[i] = node->loaded_info[node->num_loaded - 1]; in remove_info()
823 node->num_loaded--; in remove_info()
824 if (node->num_loaded > 0) in remove_info()
827 kfree(node->loaded_info); in remove_info()
828 node->loaded_info = NULL; in remove_info()
829 node->num_loaded = 0; in remove_info()
830 if (!node->unloaded_info) in remove_info()
831 remove_node(node); in remove_info()
840 struct gcov_node *node; in gcov_event() local
843 node = get_node_by_name(gcov_info_filename(info)); in gcov_event()
846 if (node) in gcov_event()
847 add_info(node, info); in gcov_event()
852 if (node) in gcov_event()
853 remove_info(node, info); in gcov_event()