Lines Matching refs:node

145 static struct gcov_info *get_node_info(struct gcov_node *node)  in get_node_info()  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()
157 static struct gcov_info *get_accumulated_info(struct gcov_node *node) in get_accumulated_info() argument
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() local
192 info = get_accumulated_info(node); in gcov_seq_open()
240 struct gcov_node *node; in get_node_by_name() local
243 list_for_each_entry(node, &all_head, all) { in get_node_by_name()
244 info = get_node_info(node); in get_node_by_name()
246 return node; in get_node_by_name()
255 static void reset_node(struct gcov_node *node) in reset_node() argument
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()
265 static void remove_node(struct gcov_node *node);
277 struct gcov_node *node; in gcov_seq_write() local
282 node = get_node_by_name(gcov_info_filename(info)); in gcov_seq_write()
283 if (node) { in gcov_seq_write()
285 if (node->num_loaded == 0) in gcov_seq_write()
286 remove_node(node); in gcov_seq_write()
288 reset_node(node); in gcov_seq_write()
366 static void add_links(struct gcov_node *node, struct dentry *parent) in add_links() argument
375 node->links = kcalloc(num, sizeof(struct dentry *), GFP_KERNEL); in add_links()
376 if (!node->links) in add_links()
380 gcov_info_filename(get_node_info(node)), in add_links()
387 node->links[i] = debugfs_create_symlink(deskew(basename), in add_links()
389 if (!node->links[i]) in add_links()
398 debugfs_remove(node->links[i]); in add_links()
399 kfree(node->links); in add_links()
400 node->links = NULL; in add_links()
412 static void init_node(struct gcov_node *node, struct gcov_info *info, in init_node() argument
415 INIT_LIST_HEAD(&node->list); in init_node()
416 INIT_LIST_HEAD(&node->children); in init_node()
417 INIT_LIST_HEAD(&node->all); in init_node()
418 if (node->loaded_info) { in init_node()
419 node->loaded_info[0] = info; in init_node()
420 node->num_loaded = 1; in init_node()
422 node->parent = parent; in init_node()
424 strcpy(node->name, name); in init_node()
434 struct gcov_node *node; in new_node() local
436 node = kzalloc(sizeof(struct gcov_node) + strlen(name) + 1, GFP_KERNEL); in new_node()
437 if (!node) in new_node()
440 node->loaded_info = kcalloc(1, sizeof(struct gcov_info *), in new_node()
442 if (!node->loaded_info) in new_node()
445 init_node(node, info, name, parent); in new_node()
448 node->dentry = debugfs_create_file(deskew(node->name), 0600, in new_node()
449 parent->dentry, node, &gcov_data_fops); in new_node()
451 node->dentry = debugfs_create_dir(node->name, parent->dentry); in new_node()
452 if (!node->dentry) { in new_node()
454 kfree(node); in new_node()
458 add_links(node, parent->dentry); in new_node()
459 list_add(&node->list, &parent->children); in new_node()
460 list_add(&node->all, &all_head); in new_node()
462 return node; in new_node()
465 kfree(node); in new_node()
471 static void remove_links(struct gcov_node *node) in remove_links() argument
475 if (!node->links) in remove_links()
478 debugfs_remove(node->links[i]); in remove_links()
479 kfree(node->links); in remove_links()
480 node->links = NULL; in remove_links()
487 static void release_node(struct gcov_node *node) in release_node() argument
489 list_del(&node->list); in release_node()
490 list_del(&node->all); in release_node()
491 debugfs_remove(node->dentry); in release_node()
492 remove_links(node); in release_node()
493 kfree(node->loaded_info); in release_node()
494 if (node->unloaded_info) in release_node()
495 gcov_info_free(node->unloaded_info); in release_node()
496 kfree(node); in release_node()
500 static void remove_node(struct gcov_node *node) in remove_node() argument
504 while ((node != &root_node) && list_empty(&node->children)) { in remove_node()
505 parent = node->parent; in remove_node()
506 release_node(node); in remove_node()
507 node = parent; in remove_node()
518 struct gcov_node *node; in get_child_by_name() local
520 list_for_each_entry(node, &parent->children, list) { in get_child_by_name()
521 if (strcmp(node->name, name) == 0) in get_child_by_name()
522 return node; in get_child_by_name()
535 struct gcov_node *node; in reset_write() local
539 list_for_each_entry(node, &all_head, all) { in reset_write()
540 if (node->num_loaded > 0) in reset_write()
541 reset_node(node); in reset_write()
542 else if (list_empty(&node->children)) { in reset_write()
543 remove_node(node); in reset_write()
577 struct gcov_node *node; in add_node() local
596 node = get_child_by_name(parent, curr); in add_node()
597 if (!node) { in add_node()
598 node = new_node(parent, NULL, curr); in add_node()
599 if (!node) in add_node()
602 parent = node; in add_node()
605 node = new_node(parent, info, curr); in add_node()
606 if (!node) in add_node()
621 static void add_info(struct gcov_node *node, struct gcov_info *info) in add_info() argument
624 int num = node->num_loaded; in add_info()
637 memcpy(loaded_info, node->loaded_info, in add_info()
646 if (!gcov_info_is_compatible(node->unloaded_info, info)) { in add_info()
650 gcov_info_free(node->unloaded_info); in add_info()
651 node->unloaded_info = NULL; in add_info()
658 if (!gcov_info_is_compatible(node->loaded_info[0], info)) { in add_info()
666 kfree(node->loaded_info); in add_info()
667 node->loaded_info = loaded_info; in add_info()
668 node->num_loaded = num + 1; in add_info()
674 static int get_info_index(struct gcov_node *node, struct gcov_info *info) in get_info_index() argument
678 for (i = 0; i < node->num_loaded; i++) { in get_info_index()
679 if (node->loaded_info[i] == info) in get_info_index()
688 static void save_info(struct gcov_node *node, struct gcov_info *info) in save_info() argument
690 if (node->unloaded_info) in save_info()
691 gcov_info_add(node->unloaded_info, info); in save_info()
693 node->unloaded_info = gcov_info_dup(info); in save_info()
694 if (!node->unloaded_info) { in save_info()
706 static void remove_info(struct gcov_node *node, struct gcov_info *info) in remove_info() argument
710 i = get_info_index(node, info); in remove_info()
717 save_info(node, info); in remove_info()
719 node->loaded_info[i] = node->loaded_info[node->num_loaded - 1]; in remove_info()
720 node->num_loaded--; in remove_info()
721 if (node->num_loaded > 0) in remove_info()
724 kfree(node->loaded_info); in remove_info()
725 node->loaded_info = NULL; in remove_info()
726 node->num_loaded = 0; in remove_info()
727 if (!node->unloaded_info) in remove_info()
728 remove_node(node); in remove_info()
737 struct gcov_node *node; in gcov_event() local
740 node = get_node_by_name(gcov_info_filename(info)); in gcov_event()
743 if (node) in gcov_event()
744 add_info(node, info); in gcov_event()
749 if (node) in gcov_event()
750 remove_info(node, info); in gcov_event()