xref: /onnv-gate/usr/src/cmd/fps/fpsd/fpsd.h (revision 7571:9059504e688d)
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21 
22 /*
23  * Copyright 2008 Sun Microsystems, Inc.  All rights reserved.
24  * Use is subject to license terms.
25  */
26 
27 #ifndef _FPSD_H
28 #define	_FPSD_H
29 
30 /*
31  * FPSD structure and global functions
32  */
33 
34 #ifdef __cplusplus
35 extern "C" {
36 #endif
37 
38 #include <door.h>
39 #include <sys/processor.h>
40 #include <sys/param.h>
41 
42 #define	FPS_DAEMON_NAME "fpsd"
43 #define	FPS_FPUTST_NAME "fptest"
44 
45 #define	FPS_DIR		"/usr/lib/fps"
46 #define	FPS_CORE_DIR	"/var/fps/core"
47 
48 #define	FPU_TST_SRCH_DPTH	4	/* File search depth from FPS_DIR */
49 #define	DFLT_DBG_LVL  1 /* Default debug level */
50 #define	FPS_DOOR_COOKIE    ((void *)0xdeadbead)
51 
52 #define	SMF_PROP_INTVL "interval"
53 #define	SMF_FPS_PROP_GRP_NAME "config"
54 #define	SMF_PROP_EXCLD_CPUS	"exclude_cpus"
55 
56 /*
57  * RSS of fptest is about 10M and size = 15M; Keeping 185M in reserve,
58  * which is chosen aribitrarily that didn't cause test fork failure,
59  * nor a memory crunch in the system. So total swap space needed = 200M.
60  */
61 #define	FPS_LOWTST_SWAP  15   /* Low stress consumes 15 MB */
62 #define	FPS_SWAP_RESERVE 185	/* Leave atleast 185 MB in the system */
63 
64 /* (in secs) Delay test on low config m/c for 5min during bootup */
65 #define	FPS_BOOT_TST_DELAY (3*60)
66 #define	MAX_RETRIES	2
67 #define	MAX_FAILURES	3
68 #define	RETRY_INTVL	2000 /* in milli-seconds */
69 #define	MIN_INTERVAL	3	/* in seconds */
70 
71 /* Maximum time fptest is expected to run which is 1s */
72 
73 #define	MAX_TEST_RUN_TIME	1
74 
75 typedef struct
76 {
77 	processorid_t	cpuid;
78 	int	frequency;
79 	char	brand[MAXNAMELEN];
80 	int	asc;
81 	int	previous_iteration;
82 	int	total_iterations; /* For this fpu */
83 	int	disable_test;
84 	int	num_failures;	/* Failures to run fptest successfully. */
85 	char	fptest_path[MAXPATHLEN];
86 
87 } fps_cpu_t;
88 
89 typedef struct
90 {
91 	char	m_machine[MAXNAMELEN];	/* machine name e.g. sun4u */
92 	uint_t	m_num_fpus;	/* num of fpus in the system */
93 	uint_t	m_num_on_fpuids;	/* num of online cpus */
94 	int	m_max_cpuid;	/* maximum cpuid for this system */
95 	fps_cpu_t	*m_cpus;	/* array of cpus to test */
96 	int		m_cpuids_size;	/* size of previous array */
97 	int	m_num_cpus_to_test;	/* Num cpus to run test */
98 	int	m_reprobe;	/* flag set if reprobe required: */
99 					/*   - config changed */
100 					/*   - fp-test failed to offline */
101 	int	total_iter;	/* total iterations to run in 24 hr */
102 } mach_conf_t;
103 
104 typedef struct fpsd_struct
105 {
106 	unsigned	d_fg;	/* "fg" foreground property */
107 	int			d_daemon; /* running as daemon ? */
108 	mach_conf_t	*d_conf;	/* machine config information */
109 	processorid_t	*d_ignore_cpuid;	/* array of cpuids to ignore */
110 	int		num_ignore_cpus;	/* No. of cpuids to ignore */
111 	int		d_iteration;	/* iteration number */
112 	int		d_interval;	/* sleep time between iterations */
113 	int		d_fpuid_index;	/* Currently testing fpu */
114 	const char	*d_rootdir;	/* root directory path */
115 	pid_t		d_pid;	/* Process id */
116 	/* Timestamp last time HUP was recd */
117 	volatile	hrtime_t	d_ts_hup;
118 } fpsd_t;
119 
120 /*
121  * Exit status values used for the few places within fpsd where we exit(2) or
122  * return from main().  fpsd only exits if a fatal error occurs during startup;
123  * if anything else happens errors are reported and we just keep tracking.
124  */
125 #define	FPSD_NO_EXIT		0	/* continue execution of daemon */
126 #define	FPSD_EXIT_ERROR		1	/* failed to initialize daemon */
127 #define	FPSD_EXIT_USAGE		2	/* syntax error on command-line */
128 #define	FPSD_EXIT_TEST_USAGE	3	/* Invalid args passed to fp-test */
129 
130 #define	FPSD_INIT_SUCCESS	0	/* To inform parent process that */
131 				/* initialization was successful, so */
132 				/* that the parent can detach */
133 
134 #define	NO_DAEMON	0
135 #define	DAEMON_EXISTS	1
136 #define	DAEMON_EXISTS_AND_SAME_PROC	2
137 
138 #define	NO_CPUS_2_TEST	-2
139 #define	ZERO_INTERVAL	-1
140 
141 /* Global Variables */
142 
143 /* Defined in fpsd_main.c */
144 extern int 			debug_level;
145 extern fpsd_t  		fpsd;
146 extern pthread_mutex_t log_mutex;	/* fpsd_log.c */
147 extern int  is_estar_system;	/* fpsd_esutil.c */
148 extern int  sys_pm_state;	/* fpsd_esutil.c */
149 
150 
151 /* Util Functions */
152 
153 extern  uint64_t  get_free_swap(void);	/* fpsd_util.c */
154 extern  void	fps_wait_secs(int secs);	/* fpsd_util.c */
155 
156 extern  void  *test_fpu_thr(void *arg);	/* in fpsd_sched.c */
157 
158 extern  void   fps_door_handler(void *cookie, char *argp, size_t asize,
159 	door_desc_t  *dp, uint_t  n_desc);	/* in fpsd_util.c */
160 
161 extern  void update_pm_state();	/* fpsd_esutil.c */
162 extern  int  get_idle_rem_stats(int *min_idle,
163 		int *min_rem, int *max_rem);	/* fpsd_esutil.c */
164 extern  void init_estar_db();	/* fpsd_esutil.c */
165 extern  void wait_for_pm_state_change();	/* fpsd_esutil.c */
166 
167 /* fpsd_log.c */
168 extern void fpsd_message(int return_code, int msg_type, char *fmt,  ...);
169 
170 extern void terminate_process();	/* fpsd_main.c */
171 extern void fpsd_read_config();	/* fpsd_main.c */
172 
173 #ifdef __cplusplus
174 }
175 #endif
176 
177 #endif	/* _FPSD_H */
178