110673SKrishnendu.Sadhukhan@Sun.COM /* 210673SKrishnendu.Sadhukhan@Sun.COM * CDDL HEADER START 310673SKrishnendu.Sadhukhan@Sun.COM * 410673SKrishnendu.Sadhukhan@Sun.COM * The contents of this file are subject to the terms of the 510673SKrishnendu.Sadhukhan@Sun.COM * Common Development and Distribution License (the "License"). 610673SKrishnendu.Sadhukhan@Sun.COM * You may not use this file except in compliance with the License. 710673SKrishnendu.Sadhukhan@Sun.COM * 810673SKrishnendu.Sadhukhan@Sun.COM * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 910673SKrishnendu.Sadhukhan@Sun.COM * or http://www.opensolaris.org/os/licensing. 1010673SKrishnendu.Sadhukhan@Sun.COM * See the License for the specific language governing permissions 1110673SKrishnendu.Sadhukhan@Sun.COM * and limitations under the License. 1210673SKrishnendu.Sadhukhan@Sun.COM * 1310673SKrishnendu.Sadhukhan@Sun.COM * When distributing Covered Code, include this CDDL HEADER in each 1410673SKrishnendu.Sadhukhan@Sun.COM * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 1510673SKrishnendu.Sadhukhan@Sun.COM * If applicable, add the following below this CDDL HEADER, with the 1610673SKrishnendu.Sadhukhan@Sun.COM * fields enclosed by brackets "[]" replaced with your own identifying 1710673SKrishnendu.Sadhukhan@Sun.COM * information: Portions Copyright [yyyy] [name of copyright owner] 1810673SKrishnendu.Sadhukhan@Sun.COM * 1910673SKrishnendu.Sadhukhan@Sun.COM * CDDL HEADER END 2010673SKrishnendu.Sadhukhan@Sun.COM */ 2110673SKrishnendu.Sadhukhan@Sun.COM /* 2210673SKrishnendu.Sadhukhan@Sun.COM * Copyright (c) 2008-2009, Intel Corporation. 2310673SKrishnendu.Sadhukhan@Sun.COM * All Rights Reserved. 2410673SKrishnendu.Sadhukhan@Sun.COM */ 2510673SKrishnendu.Sadhukhan@Sun.COM 2610673SKrishnendu.Sadhukhan@Sun.COM #ifndef _LATENCYTOP_H 2710673SKrishnendu.Sadhukhan@Sun.COM #define _LATENCYTOP_H 2810673SKrishnendu.Sadhukhan@Sun.COM 2910673SKrishnendu.Sadhukhan@Sun.COM #include <sys/types.h> 3010673SKrishnendu.Sadhukhan@Sun.COM 3110673SKrishnendu.Sadhukhan@Sun.COM #include <glib.h> 3210673SKrishnendu.Sadhukhan@Sun.COM 3310673SKrishnendu.Sadhukhan@Sun.COM #ifdef __cplusplus 3410673SKrishnendu.Sadhukhan@Sun.COM extern "C" { 3510673SKrishnendu.Sadhukhan@Sun.COM #endif 3610673SKrishnendu.Sadhukhan@Sun.COM 3710673SKrishnendu.Sadhukhan@Sun.COM /* 3810673SKrishnendu.Sadhukhan@Sun.COM * Without this lint seems to be confused by glib header file. 3910673SKrishnendu.Sadhukhan@Sun.COM */ 4010673SKrishnendu.Sadhukhan@Sun.COM #ifdef __lint 4110673SKrishnendu.Sadhukhan@Sun.COM #undef g_assert 4210673SKrishnendu.Sadhukhan@Sun.COM #define g_assert(x) ((void)(x)) 4310673SKrishnendu.Sadhukhan@Sun.COM #undef TRUE 4410673SKrishnendu.Sadhukhan@Sun.COM #define TRUE 1 4510673SKrishnendu.Sadhukhan@Sun.COM #endif 4610673SKrishnendu.Sadhukhan@Sun.COM 4710673SKrishnendu.Sadhukhan@Sun.COM /* 4810673SKrishnendu.Sadhukhan@Sun.COM * We define our own conversions in order to avoid compiler warnings. 4910673SKrishnendu.Sadhukhan@Sun.COM */ 5010673SKrishnendu.Sadhukhan@Sun.COM #define LT_INT_TO_POINTER(a) ((void *)(unsigned long)(a)) 5110673SKrishnendu.Sadhukhan@Sun.COM 5210673SKrishnendu.Sadhukhan@Sun.COM #define TITLE "LatencyTOP for OpenSolaris, version 1.0" 5310673SKrishnendu.Sadhukhan@Sun.COM #define COPYRIGHT "Copyright (c) 2008-2009, Intel Corporation." 5410673SKrishnendu.Sadhukhan@Sun.COM #define DEFAULT_KLOG_FILE "/var/log/latencytop.log" 5510673SKrishnendu.Sadhukhan@Sun.COM 5610673SKrishnendu.Sadhukhan@Sun.COM #define INVALID_PID (~0) 5710673SKrishnendu.Sadhukhan@Sun.COM #define INVALID_TID (~0) 5810673SKrishnendu.Sadhukhan@Sun.COM #define PID_SYS_GLOBAL INVALID_PID 5910673SKrishnendu.Sadhukhan@Sun.COM #define INVALID_CAUSE 0 6010673SKrishnendu.Sadhukhan@Sun.COM #define HIGHER_PRIORITY(a, b) ((a) > (b)) 6110673SKrishnendu.Sadhukhan@Sun.COM 6210673SKrishnendu.Sadhukhan@Sun.COM #ifdef EMBED_CONFIGS 6310673SKrishnendu.Sadhukhan@Sun.COM /* 6410673SKrishnendu.Sadhukhan@Sun.COM * LatencyTOP configuration is embedded in the binary. 6510673SKrishnendu.Sadhukhan@Sun.COM * Array will be generated by elfwrap. 6610673SKrishnendu.Sadhukhan@Sun.COM */ 6710673SKrishnendu.Sadhukhan@Sun.COM extern char latencytop_d_start; 6810673SKrishnendu.Sadhukhan@Sun.COM extern char latencytop_d_end; 6910673SKrishnendu.Sadhukhan@Sun.COM extern char latencytop_trans_start; 7010673SKrishnendu.Sadhukhan@Sun.COM extern char latencytop_trans_end; 7110673SKrishnendu.Sadhukhan@Sun.COM #else 7210673SKrishnendu.Sadhukhan@Sun.COM /* 7310673SKrishnendu.Sadhukhan@Sun.COM * LatencyTOP configuration is provided externally by user. 7410673SKrishnendu.Sadhukhan@Sun.COM */ 7510673SKrishnendu.Sadhukhan@Sun.COM #define DEFAULT_CONFIG_NAME "./latencytop.trans" 7610673SKrishnendu.Sadhukhan@Sun.COM #define DEFAULT_D_SCRIPT_NAME "./latencytop.d" 7710673SKrishnendu.Sadhukhan@Sun.COM #endif 7810673SKrishnendu.Sadhukhan@Sun.COM 7910673SKrishnendu.Sadhukhan@Sun.COM typedef enum { 8010673SKrishnendu.Sadhukhan@Sun.COM LT_STAT_COUNT, 8110673SKrishnendu.Sadhukhan@Sun.COM LT_STAT_MAX, 8210673SKrishnendu.Sadhukhan@Sun.COM LT_STAT_SUM, 8310673SKrishnendu.Sadhukhan@Sun.COM } lt_stat_type_t; 8410673SKrishnendu.Sadhukhan@Sun.COM 8510673SKrishnendu.Sadhukhan@Sun.COM #define LT_KLOG_LEVEL_NONE 0 /* Log nothing */ 8610673SKrishnendu.Sadhukhan@Sun.COM #define LT_KLOG_LEVEL_UNMAPPED 1 /* Log only stacks not mapped */ 8710673SKrishnendu.Sadhukhan@Sun.COM #define LT_KLOG_LEVEL_MAPPED 2 /* Log only stacks mapped */ 8810673SKrishnendu.Sadhukhan@Sun.COM #define LT_KLOG_LEVEL_ALL 3 /* Log all stacks, mapped or not */ 8910673SKrishnendu.Sadhukhan@Sun.COM 9010673SKrishnendu.Sadhukhan@Sun.COM typedef enum { 9110673SKrishnendu.Sadhukhan@Sun.COM LT_LEVEL_GLOBAL, /* System wide statistics */ 9210673SKrishnendu.Sadhukhan@Sun.COM LT_LEVEL_PROCESS, /* Per-process statistics */ 9310673SKrishnendu.Sadhukhan@Sun.COM LT_LEVEL_THREAD, /* Per-thread statistics */ 9410673SKrishnendu.Sadhukhan@Sun.COM } lt_stat_level_t; 9510673SKrishnendu.Sadhukhan@Sun.COM 9610673SKrishnendu.Sadhukhan@Sun.COM typedef enum { 9710673SKrishnendu.Sadhukhan@Sun.COM LT_SORT_TOTAL, 9810673SKrishnendu.Sadhukhan@Sun.COM LT_SORT_MAX, 9910673SKrishnendu.Sadhukhan@Sun.COM LT_SORT_AVG, 10010673SKrishnendu.Sadhukhan@Sun.COM LT_SORT_COUNT, 10110673SKrishnendu.Sadhukhan@Sun.COM } lt_sort_t; 10210673SKrishnendu.Sadhukhan@Sun.COM 10310673SKrishnendu.Sadhukhan@Sun.COM typedef enum { 10410673SKrishnendu.Sadhukhan@Sun.COM LT_FIELD_FNAME, 10510673SKrishnendu.Sadhukhan@Sun.COM LT_FIELD_PSARGS, 10610673SKrishnendu.Sadhukhan@Sun.COM } lt_field_t; 10710673SKrishnendu.Sadhukhan@Sun.COM 10810673SKrishnendu.Sadhukhan@Sun.COM typedef enum { 10910673SKrishnendu.Sadhukhan@Sun.COM LT_LIST_CAUSE, /* List latency by causes (default) */ 11010673SKrishnendu.Sadhukhan@Sun.COM LT_LIST_SPECIALS, /* List only "special" causes */ 11110673SKrishnendu.Sadhukhan@Sun.COM LT_LIST_SOBJ /* List synchronization objects */ 11210673SKrishnendu.Sadhukhan@Sun.COM } lt_list_type_t; 11310673SKrishnendu.Sadhukhan@Sun.COM 11410673SKrishnendu.Sadhukhan@Sun.COM /* 11510673SKrishnendu.Sadhukhan@Sun.COM * Data structure which contains statistics. 11610673SKrishnendu.Sadhukhan@Sun.COM */ 11710673SKrishnendu.Sadhukhan@Sun.COM typedef struct { 11810673SKrishnendu.Sadhukhan@Sun.COM uint64_t lt_s_count; 11910673SKrishnendu.Sadhukhan@Sun.COM uint64_t lt_s_total; 12010673SKrishnendu.Sadhukhan@Sun.COM uint64_t lt_s_max; 12110673SKrishnendu.Sadhukhan@Sun.COM } lt_stat_data_t; 12210673SKrishnendu.Sadhukhan@Sun.COM 12310673SKrishnendu.Sadhukhan@Sun.COM /* 12410673SKrishnendu.Sadhukhan@Sun.COM * Data structure that stores statistics along with the name. 12510673SKrishnendu.Sadhukhan@Sun.COM */ 12610673SKrishnendu.Sadhukhan@Sun.COM typedef struct { 12710673SKrishnendu.Sadhukhan@Sun.COM enum { 12810673SKrishnendu.Sadhukhan@Sun.COM STAT_CAUSE, 12910673SKrishnendu.Sadhukhan@Sun.COM STAT_SOBJ 13010673SKrishnendu.Sadhukhan@Sun.COM } lt_se_type; 13110673SKrishnendu.Sadhukhan@Sun.COM const char *lt_se_string; 13210673SKrishnendu.Sadhukhan@Sun.COM lt_stat_data_t lt_se_data; 13310673SKrishnendu.Sadhukhan@Sun.COM union { 13410673SKrishnendu.Sadhukhan@Sun.COM struct { 13510673SKrishnendu.Sadhukhan@Sun.COM int lt_se_c_id; 13610673SKrishnendu.Sadhukhan@Sun.COM int lt_se_c_flags; 13710673SKrishnendu.Sadhukhan@Sun.COM } lt_se_t_cause; 13810673SKrishnendu.Sadhukhan@Sun.COM struct { 13910673SKrishnendu.Sadhukhan@Sun.COM int lt_se_s_id; 14010673SKrishnendu.Sadhukhan@Sun.COM } lt_se_t_sobj; 14110673SKrishnendu.Sadhukhan@Sun.COM } lt_se_tsdata; /* type specific data */ 14210673SKrishnendu.Sadhukhan@Sun.COM } lt_stat_entry_t; 14310673SKrishnendu.Sadhukhan@Sun.COM 14410673SKrishnendu.Sadhukhan@Sun.COM typedef struct { 14510673SKrishnendu.Sadhukhan@Sun.COM int lt_cfg_enable_filter; 14610673SKrishnendu.Sadhukhan@Sun.COM int lt_cfg_trace_sched; 14710673SKrishnendu.Sadhukhan@Sun.COM int lt_cfg_trace_syncobj; 14810673SKrishnendu.Sadhukhan@Sun.COM int lt_cfg_low_overhead_mode; 14910673SKrishnendu.Sadhukhan@Sun.COM int lt_cfg_snap_interval; 15010673SKrishnendu.Sadhukhan@Sun.COM char *lt_cfg_config_name; 151*11789SKrishnendu.Sadhukhan@Sun.COM unsigned int lt_cfg_trace_pid; 152*11789SKrishnendu.Sadhukhan@Sun.COM unsigned int lt_cfg_trace_pgid; 15310673SKrishnendu.Sadhukhan@Sun.COM } lt_config_t; 15410673SKrishnendu.Sadhukhan@Sun.COM 15510673SKrishnendu.Sadhukhan@Sun.COM extern lt_config_t g_config; /* The global settings */ 15610673SKrishnendu.Sadhukhan@Sun.COM 15710673SKrishnendu.Sadhukhan@Sun.COM /* 15810673SKrishnendu.Sadhukhan@Sun.COM * Causes can be disabled through the configuration file. 15910673SKrishnendu.Sadhukhan@Sun.COM * When disabled, though D script will continue to capture causes, they will 16010673SKrishnendu.Sadhukhan@Sun.COM * not be counted by LatencyTOP. 16110673SKrishnendu.Sadhukhan@Sun.COM */ 16210673SKrishnendu.Sadhukhan@Sun.COM #define CAUSE_FLAG_DISABLED 1 16310673SKrishnendu.Sadhukhan@Sun.COM /* 16410673SKrishnendu.Sadhukhan@Sun.COM * This flag will not show and count causes as part of summary in 16510673SKrishnendu.Sadhukhan@Sun.COM * "kstack window". 16610673SKrishnendu.Sadhukhan@Sun.COM */ 16710673SKrishnendu.Sadhukhan@Sun.COM #define CAUSE_FLAG_HIDE_IN_SUMMARY 2 16810673SKrishnendu.Sadhukhan@Sun.COM /* 16910673SKrishnendu.Sadhukhan@Sun.COM * This is generated from D script (named cause), and is "special". 17010673SKrishnendu.Sadhukhan@Sun.COM */ 17110673SKrishnendu.Sadhukhan@Sun.COM #define CAUSE_FLAG_SPECIAL 4 17210673SKrishnendu.Sadhukhan@Sun.COM #define CAUSE_ALL_FLAGS 0xffffffff 17310673SKrishnendu.Sadhukhan@Sun.COM 17410883SKrishnendu.Sadhukhan@Sun.COM extern boolean_t lt_drop_detected; 17510883SKrishnendu.Sadhukhan@Sun.COM 17610673SKrishnendu.Sadhukhan@Sun.COM /* 17710673SKrishnendu.Sadhukhan@Sun.COM * These functions collect statistics using DTrace. 17810673SKrishnendu.Sadhukhan@Sun.COM */ 17910673SKrishnendu.Sadhukhan@Sun.COM extern int lt_dtrace_init(void); 18010673SKrishnendu.Sadhukhan@Sun.COM extern int lt_dtrace_work(int); 18110673SKrishnendu.Sadhukhan@Sun.COM extern int lt_dtrace_collect(void); 18210883SKrishnendu.Sadhukhan@Sun.COM extern int lt_dtrace_deinit(void); 18310673SKrishnendu.Sadhukhan@Sun.COM 18410673SKrishnendu.Sadhukhan@Sun.COM /* 18510673SKrishnendu.Sadhukhan@Sun.COM * These functions maintain configuration, e.g. symbol to cause mapping. 18610673SKrishnendu.Sadhukhan@Sun.COM */ 18710673SKrishnendu.Sadhukhan@Sun.COM extern int lt_table_init(void); 18810673SKrishnendu.Sadhukhan@Sun.COM extern int lt_table_cause_from_stack(const char *, int *, int *); 18910673SKrishnendu.Sadhukhan@Sun.COM extern const char *lt_table_get_cause_name(int); 19010673SKrishnendu.Sadhukhan@Sun.COM extern int lt_table_get_cause_flag(int, int); 19110673SKrishnendu.Sadhukhan@Sun.COM extern int lt_table_cause_from_name(char *, int, int); 19210673SKrishnendu.Sadhukhan@Sun.COM extern int lt_table_append_trans(FILE *fp); 19310673SKrishnendu.Sadhukhan@Sun.COM extern void lt_table_deinit(void); 19410673SKrishnendu.Sadhukhan@Sun.COM 19510673SKrishnendu.Sadhukhan@Sun.COM /* 19610673SKrishnendu.Sadhukhan@Sun.COM * These functions update statistic of all causes of latency, collected 19710673SKrishnendu.Sadhukhan@Sun.COM * from DTrace. 19810673SKrishnendu.Sadhukhan@Sun.COM */ 19910673SKrishnendu.Sadhukhan@Sun.COM extern void lt_stat_update(pid_t, id_t, char *, char *, unsigned int, 20010673SKrishnendu.Sadhukhan@Sun.COM lt_stat_type_t, uint64_t); 20110673SKrishnendu.Sadhukhan@Sun.COM extern void lt_stat_update_cause(pid_t, id_t, int, lt_stat_type_t, uint64_t); 20210673SKrishnendu.Sadhukhan@Sun.COM extern void lt_stat_update_sobj(pid_t, id_t, int, unsigned long long, 20310673SKrishnendu.Sadhukhan@Sun.COM lt_stat_type_t, uint64_t); 20410673SKrishnendu.Sadhukhan@Sun.COM extern void lt_stat_clear_all(void); 20510673SKrishnendu.Sadhukhan@Sun.COM extern void lt_stat_free_all(void); 20610673SKrishnendu.Sadhukhan@Sun.COM 20710673SKrishnendu.Sadhukhan@Sun.COM /* 20810673SKrishnendu.Sadhukhan@Sun.COM * These functions produce lists for display panes. 20910673SKrishnendu.Sadhukhan@Sun.COM * Note: after a call to lt_stat_update_*, the old lists will become invalid. 21010673SKrishnendu.Sadhukhan@Sun.COM */ 21110673SKrishnendu.Sadhukhan@Sun.COM extern void *lt_stat_list_create(lt_list_type_t, lt_stat_level_t, 21210673SKrishnendu.Sadhukhan@Sun.COM pid_t, id_t, int, lt_sort_t); 21310673SKrishnendu.Sadhukhan@Sun.COM extern int lt_stat_list_has_item(void *, int); 21410673SKrishnendu.Sadhukhan@Sun.COM extern const char *lt_stat_list_get_reason(void *, int); 21510673SKrishnendu.Sadhukhan@Sun.COM extern uint64_t lt_stat_list_get_max(void *, int); 21610673SKrishnendu.Sadhukhan@Sun.COM extern uint64_t lt_stat_list_get_sum(void *, int); 21710673SKrishnendu.Sadhukhan@Sun.COM extern uint64_t lt_stat_list_get_count(void *, int); 21810673SKrishnendu.Sadhukhan@Sun.COM extern uint64_t lt_stat_list_get_gtotal(void *); 21910673SKrishnendu.Sadhukhan@Sun.COM extern void lt_stat_list_free(void *); 22010673SKrishnendu.Sadhukhan@Sun.COM 22110673SKrishnendu.Sadhukhan@Sun.COM /* 22210673SKrishnendu.Sadhukhan@Sun.COM * These functions produce the process list and the thread list. 22310673SKrishnendu.Sadhukhan@Sun.COM */ 22410673SKrishnendu.Sadhukhan@Sun.COM extern int lt_stat_proc_list_create(pid_t **, id_t **); 22510673SKrishnendu.Sadhukhan@Sun.COM extern void lt_stat_proc_list_free(pid_t *, id_t *); 22610673SKrishnendu.Sadhukhan@Sun.COM extern const char *lt_stat_proc_get_name(pid_t); 22710673SKrishnendu.Sadhukhan@Sun.COM extern int lt_stat_proc_get_nthreads(pid_t); 22810673SKrishnendu.Sadhukhan@Sun.COM 22910673SKrishnendu.Sadhukhan@Sun.COM /* 23010673SKrishnendu.Sadhukhan@Sun.COM * These functions use ncurses to create console-based display. 23110673SKrishnendu.Sadhukhan@Sun.COM */ 23210673SKrishnendu.Sadhukhan@Sun.COM extern void lt_display_init(void); 23310673SKrishnendu.Sadhukhan@Sun.COM extern int lt_display_loop(int); 23410673SKrishnendu.Sadhukhan@Sun.COM extern void lt_display_error(const char *, ...); 23510673SKrishnendu.Sadhukhan@Sun.COM extern void lt_display_deinit(void); 23610673SKrishnendu.Sadhukhan@Sun.COM 23710673SKrishnendu.Sadhukhan@Sun.COM /* 23810673SKrishnendu.Sadhukhan@Sun.COM * Write statistics to log file - useful for debugging and offline analysis. 23910673SKrishnendu.Sadhukhan@Sun.COM */ 24010673SKrishnendu.Sadhukhan@Sun.COM extern void lt_klog_init(void); 24110673SKrishnendu.Sadhukhan@Sun.COM extern void lt_klog_deinit(void); 24210673SKrishnendu.Sadhukhan@Sun.COM extern int lt_klog_set_log_file(const char *); 24310673SKrishnendu.Sadhukhan@Sun.COM extern int lt_klog_set_log_level(int); 24410673SKrishnendu.Sadhukhan@Sun.COM extern void lt_klog_write(void); 24510673SKrishnendu.Sadhukhan@Sun.COM extern void lt_klog_log(int, pid_t, char *, lt_stat_type_t, 24610673SKrishnendu.Sadhukhan@Sun.COM uint64_t); 24710673SKrishnendu.Sadhukhan@Sun.COM 24810673SKrishnendu.Sadhukhan@Sun.COM /* 24910673SKrishnendu.Sadhukhan@Sun.COM * Utility functions. 25010673SKrishnendu.Sadhukhan@Sun.COM */ 25110673SKrishnendu.Sadhukhan@Sun.COM extern uint64_t lt_millisecond(void); 25210673SKrishnendu.Sadhukhan@Sun.COM extern void *lt_malloc(size_t); 25310673SKrishnendu.Sadhukhan@Sun.COM extern void *lt_zalloc(size_t); 25410673SKrishnendu.Sadhukhan@Sun.COM extern char *lt_strdup(const char *); 25510673SKrishnendu.Sadhukhan@Sun.COM extern void lt_check_null(void *); 25610673SKrishnendu.Sadhukhan@Sun.COM extern void lt_time_str(char *, int); 25710673SKrishnendu.Sadhukhan@Sun.COM extern char *lt_get_proc_field(pid_t, lt_field_t); 25810673SKrishnendu.Sadhukhan@Sun.COM extern void lt_update_stat_value(lt_stat_data_t *, lt_stat_type_t, uint64_t); 25910673SKrishnendu.Sadhukhan@Sun.COM extern int lt_sort_by_total_desc(lt_stat_entry_t *, lt_stat_entry_t *); 26010673SKrishnendu.Sadhukhan@Sun.COM extern int lt_sort_by_max_desc(lt_stat_entry_t *, lt_stat_entry_t *); 26110673SKrishnendu.Sadhukhan@Sun.COM extern int lt_sort_by_count_desc(lt_stat_entry_t *, lt_stat_entry_t *); 26210673SKrishnendu.Sadhukhan@Sun.COM extern int lt_sort_by_avg_desc(lt_stat_entry_t *, lt_stat_entry_t *); 26310673SKrishnendu.Sadhukhan@Sun.COM extern void lt_gpipe_init(void); 26410673SKrishnendu.Sadhukhan@Sun.COM extern void lt_gpipe_deinit(void); 26510673SKrishnendu.Sadhukhan@Sun.COM extern void lt_gpipe_break(const char *); 26610673SKrishnendu.Sadhukhan@Sun.COM extern int lt_gpipe_readfd(void); 26710673SKrishnendu.Sadhukhan@Sun.COM extern int lt_file_exist(const char *); 26810673SKrishnendu.Sadhukhan@Sun.COM 26910673SKrishnendu.Sadhukhan@Sun.COM #ifdef __cplusplus 27010673SKrishnendu.Sadhukhan@Sun.COM } 27110673SKrishnendu.Sadhukhan@Sun.COM #endif 27210673SKrishnendu.Sadhukhan@Sun.COM 27310673SKrishnendu.Sadhukhan@Sun.COM #endif /* _LATENCYTOP_H */ 274