18cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/** 28cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @file opd_image.h 38cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * Management of binary images 48cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * 58cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Copyright 2002 OProfile authors 68cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Read the file COPYING 78cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * 88cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @author John Levon 98cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @author Philippe Elie 108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd */ 118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#ifndef OPD_IMAGE_H 138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define OPD_IMAGE_H 148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "op_list.h" 168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "op_config_24.h" 178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "op_types.h" 188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <time.h> 208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddstruct opd_24_sfile; 228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/** 248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * A binary (library, application, kernel or module) 258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * is represented by a struct opd_image. 268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd */ 278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddstruct opd_image { 288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /** used by container of opd_images */ 298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd struct list_head hash_next; 308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /** how many time this opd_image is referenced */ 318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd int ref_count; 328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /** all samples files belonging to this image */ 338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd struct opd_24_sfile ** sfiles[NR_CPUS]; 348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /** name of this image */ 358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd char * name; 368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /** the application name where belongs this image, NULL if image has 378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * no owner (such as vmlinux or module) */ 388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd char * app_name; 398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /** thread id, on 2.2 kernel always == to tgid */ 408cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd pid_t tid; 418cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /** thread group id */ 428cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd pid_t tgid; 438cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /** time of last modification */ 448cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd time_t mtime; 458cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /** kernel image or not */ 468cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd int kernel; 478cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd /** non zero if this image must be profiled */ 488cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd int ignored; 498cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd}; 508cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 518cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/** callback function passed to opd_for_each_image() */ 528cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddtypedef void (*opd_image_cb)(struct opd_image *); 538cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 548cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/** 558cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @param imagecb callback to apply onto each existing image struct 568cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * 578cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * the callback receive a struct opd_image * (not a const struct) and is 588cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * allowed to freeze the image struct itself. 598cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd */ 608cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddvoid opd_for_each_image(opd_image_cb imagecb); 618cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 628cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/** 638cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * initialize opd_image container 648cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd */ 658cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddvoid opd_init_images(void); 668cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 678cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/** 688cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @param image the image pointer 698cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * 708cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * Decrement reference count of image, if reference count is zero flush and 718cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * close the samples files then freeze all memory belonging to this image. 728cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd */ 738cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddvoid opd_delete_image(struct opd_image * image); 748cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 758cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/** 768cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * opd_get_kernel_image - get a kernel image 778cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @param name of image 788cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @param app_name application owner of this kernel image. non-null only 798cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * when separate_kernel_sample != 0 808cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @param tid thread id 818cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @param tgid thread group id 828cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * 838cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * Create and initialise an image adding it to the image lists and to image 848cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * hash list. Note than at creation reference count is zero, it's caller 858cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * responsabilities to incr this count. 868cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd */ 878cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddstruct opd_image * opd_get_kernel_image(char const * name, 888cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd char const * app_name, pid_t tid, pid_t tgid); 898cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 908cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/** 918cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * opd_get_image - get an image from the image structure 928cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @param name name of image 938cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @param app_name the application name where belongs this image 948cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @param kernel is the image a kernel/module image 958cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @param tid thread id 968cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @param tgid thread group id 978cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * 988cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * Get the image specified by the file name name from the 998cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * image structure. If it is not present, the image is 1008cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * added to the structure. In either case, the image number 1018cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * is returned. 1028cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd */ 1038cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddstruct opd_image * opd_get_image(char const * name, char const * app_name, 1048cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd int kernel, pid_t tid, pid_t tgid); 1058cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 1068cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/** 1078cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * opd_get_nr_images - return number of images 1088cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd */ 1098cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddint opd_get_nr_images(void); 1108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd 1118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#endif /* OPD_IMAGE_H */ 112