Lines Matching refs:rsi
365 script_info_t *rsi; in script_init() local
372 module->rsi = NULL; in script_init()
380 rsi = (script_info_t *)rcmscript_calloc(1, sizeof (script_info_t)); in script_init()
381 rsi->script_full_name = (char *)rcmscript_calloc(1, len); in script_init()
383 rsi->module = module; in script_init()
384 rcm_init_queue(&rsi->drreq_q); in script_init()
386 (void) mutex_init(&rsi->channel_lock, USYNC_THREAD, NULL); in script_init()
388 (void) snprintf(rsi->script_full_name, len, "%s%s", script_path, in script_init()
390 rsi->script_name = strrchr(rsi->script_full_name, '/') + 1; in script_init()
392 (void) mutex_lock(&rsi->channel_lock); in script_init()
394 rsi->cmd_timeout = -1; /* don't time scriptinfo command */ in script_init()
395 if (do_script_info(rsi) == RCM_SUCCESS) { in script_init()
400 if (rsi->cmd_timeout == -1) in script_init()
401 rsi->cmd_timeout = SCRIPT_CMD_TIMEOUT; in script_init()
402 (void) mutex_unlock(&rsi->channel_lock); in script_init()
406 rcm_enqueue_tail(&script_info_q, &rsi->queue); in script_init()
409 module->rsi = rsi; in script_init()
413 (void) mutex_unlock(&rsi->channel_lock); in script_init()
415 free(rsi->script_full_name); in script_init()
416 free(rsi); in script_init()
428 script_info_t *rsi = module->rsi; in script_info() local
431 rsi->script_name); in script_info()
432 return (rsi->func_info_buf); in script_info()
443 script_info_t *rsi = module->rsi; in script_fini() local
446 rsi->script_name); in script_fini()
450 rcm_dequeue(&rsi->queue); in script_fini()
453 remove_drreq_all(rsi); in script_fini()
455 if (rsi->func_info_buf) in script_fini()
456 free(rsi->func_info_buf); in script_fini()
458 free(rsi->script_full_name); in script_fini()
459 free(rsi); in script_fini()
461 module->rsi = NULL; in script_fini()
878 run_script(script_info_t *rsi, char *argv[], char *envp[], char **errmsg) in run_script() argument
885 rsi->script_full_name); in run_script()
894 if (stat(rsi->script_full_name, &stats) != 0) in run_script()
920 if ((p1 = pipe(rsi->pipe1)) == -1 || (p2 = pipe(rsi->pipe2)) == -1) { in run_script()
930 if ((p1 = pipe(rsi->pipe1)) == -1) in run_script()
933 if ((p2 = pipe(rsi->pipe2)) == -1) in run_script()
940 if ((rsi->pid = fork1()) == (pid_t)-1) { in run_script()
947 if (rsi->pid == 0) { in run_script()
961 (void) dup2(rsi->pipe1[CHILD_END_OF_PIPE], 1); in run_script()
962 (void) dup2(rsi->pipe2[CHILD_END_OF_PIPE], 2); in run_script()
989 (void) execve(rsi->script_full_name, argv, envp); in run_script()
994 (void) close(rsi->pipe1[CHILD_END_OF_PIPE]); in run_script()
995 (void) close(rsi->pipe2[CHILD_END_OF_PIPE]); in run_script()
997 script_ps_state_file_add_entry(rsi->pid, rsi->script_name); in run_script()
1003 rsi->script_name, strerror(errno)); in run_script()
1006 (void) close(rsi->pipe1[PARENT_END_OF_PIPE]); in run_script()
1007 (void) close(rsi->pipe1[CHILD_END_OF_PIPE]); in run_script()
1011 (void) close(rsi->pipe2[PARENT_END_OF_PIPE]); in run_script()
1012 (void) close(rsi->pipe2[CHILD_END_OF_PIPE]); in run_script()
1115 script_exited(script_info_t *rsi) in script_exited() argument
1117 if (rsi->flags & STDERR_THREAD_CREATED) { in script_exited()
1119 "script_exited: doing thr_join (%s)\n", rsi->script_name); in script_exited()
1120 (void) thr_join(rsi->tid, NULL, NULL); in script_exited()
1121 rsi->flags &= ~STDERR_THREAD_CREATED; in script_exited()
1124 (void) close(rsi->pipe1[PARENT_END_OF_PIPE]); in script_exited()
1125 (void) close(rsi->pipe2[PARENT_END_OF_PIPE]); in script_exited()
1126 rsi->pipe1[PARENT_END_OF_PIPE] = -1; in script_exited()
1127 rsi->pipe2[PARENT_END_OF_PIPE] = -1; in script_exited()
1129 script_ps_state_file_remove_entry(rsi->pid); in script_exited()
1130 rsi->pid = 0; in script_exited()
1166 kill_script(script_info_t *rsi) in kill_script() argument
1168 if (rsi->pid > 1) { in kill_script()
1169 (void) kill_pid(rsi->pid); in kill_script()
1170 script_exited(rsi); in kill_script()
1171 remove_drreq_all(rsi); in kill_script()
1190 fill_argv(script_info_t *rsi, char *argv[], char *resource_name) in fill_argv() argument
1192 argv[0] = rsi->script_full_name; in fill_argv()
1193 argv[1] = script_cmd_name[rsi->cmd]; in fill_argv()
1207 read_stderr(script_info_t *rsi) in read_stderr() argument
1213 while ((get_line(rsi->pipe2[PARENT_END_OF_PIPE], "stderr", in read_stderr()
1215 log_msg(rsi, RCM_ERROR, buf); in read_stderr()
1219 log_msg(rsi, RCM_ERROR, buf); in read_stderr()
1226 process_dataitem(script_info_t *rsi, int token, char *value, char **errmsg) in process_dataitem() argument
1238 if (rsi->cmd != C_SCRIPTINFO) in process_dataitem()
1247 rsi->ver = atoi(value); in process_dataitem()
1254 if (rsi->cmd != C_SCRIPTINFO) in process_dataitem()
1257 rcmscript_snprintf(&rsi->func_info_buf, in process_dataitem()
1258 &rsi->func_info_buf_len, in process_dataitem()
1259 &rsi->func_info_buf_curptr, in process_dataitem()
1264 if (rsi->cmd != C_SCRIPTINFO) in process_dataitem()
1273 rsi->cmd_timeout = atoi(value); in process_dataitem()
1279 if (rsi->cmd != C_REGISTER) in process_dataitem()
1283 status = rcm_register_capacity(rsi->hdl, value, in process_dataitem()
1286 status = rcm_register_interest(rsi->hdl, value, 0, in process_dataitem()
1294 rsi->script_name, value); in process_dataitem()
1297 remove_from_unregister(rsi, value); in process_dataitem()
1301 if (rsi->cmd != C_RESOURCEINFO) in process_dataitem()
1304 rcmscript_snprintf(&rsi->resource_usage_info_buf, in process_dataitem()
1305 &rsi->resource_usage_info_buf_len, in process_dataitem()
1306 &rsi->resource_usage_info_buf_curptr, in process_dataitem()
1311 rcmscript_snprintf(&rsi->failure_reason_buf, in process_dataitem()
1312 &rsi->failure_reason_buf_len, in process_dataitem()
1313 &rsi->failure_reason_buf_curptr, in process_dataitem()
1324 *errmsg = dup_err(RCM_ERROR, MS_PROTOCOL_ERR, rsi->script_name); in process_dataitem()
1330 do_cmd(script_info_t *rsi, char *argv[], char *envp[], char **errmsg) in do_cmd() argument
1341 int cmd_timeout = rsi->cmd_timeout; in do_cmd()
1347 if (run_script(rsi, argv, envp, errmsg) == -1) { in do_cmd()
1352 (void) time(&rsi->lastrun); in do_cmd()
1353 deadline = rsi->lastrun + cmd_timeout; in do_cmd()
1355 if (thr_create(NULL, 0, (void *(*)(void *))read_stderr, rsi, in do_cmd()
1356 0, &rsi->tid) != 0) { in do_cmd()
1361 rsi->flags |= STDERR_THREAD_CREATED; in do_cmd()
1372 rval = get_line(rsi->pipe1[PARENT_END_OF_PIPE], in do_cmd()
1378 log_msg(rsi, loglevel, buf); in do_cmd()
1412 log_msg(rsi, loglevel, value); in do_cmd()
1422 if (process_dataitem(rsi, token, in do_cmd()
1432 if (waitpid(rsi->pid, &child_status, 0) in do_cmd()
1433 != rsi->pid) { in do_cmd()
1437 rsi->script_name, strerror(errno)); in do_cmd()
1442 script_exited(rsi); in do_cmd()
1443 rsi->exit_status = WEXITSTATUS(child_status); in do_cmd()
1447 MS_TIMEOUT_ERR, rsi->script_name); in do_cmd()
1450 MS_UNKNOWN_ERR, rsi->script_name); in do_cmd()
1453 (void) kill(-(rsi->pid), SIGKILL); in do_cmd()
1454 script_exited(rsi); in do_cmd()
1463 rsi->script_name, strerror(errno)); in do_cmd()
1471 (void) kill(rsi->pid, SIGABRT); in do_cmd()
1477 MS_TIMEOUT_ERR, rsi->script_name); in do_cmd()
1486 *errmsg = dup_err(RCM_ERROR, MS_PROTOCOL_ERR, rsi->script_name); in do_cmd()
1489 kill_script(rsi); in do_cmd()
1496 do_script_info(script_info_t *rsi) in do_script_info() argument
1504 rsi->script_name); in do_script_info()
1506 rsi->cmd = C_SCRIPTINFO; in do_script_info()
1507 rsi->func_info_buf = NULL; in do_script_info()
1508 rsi->failure_reason_buf = NULL; in do_script_info()
1509 fill_argv(rsi, argv, NULL); in do_script_info()
1511 if (do_cmd(rsi, argv, script_env, &errmsg) == 0) { in do_script_info()
1512 switch (rsi->exit_status) { in do_script_info()
1514 if (rsi->func_info_buf != NULL && in do_script_info()
1515 rsi->failure_reason_buf == NULL) { in do_script_info()
1517 if (rsi->ver >= SCRIPT_API_MIN_VER && in do_script_info()
1518 rsi->ver <= SCRIPT_API_MAX_VER) in do_script_info()
1522 MS_UNSUPPORTED_VER, rsi->script_name, in do_script_info()
1523 rsi->ver); in do_script_info()
1529 if (rsi->failure_reason_buf != NULL) { in do_script_info()
1531 rsi->script_name, in do_script_info()
1532 rsi->failure_reason_buf); in do_script_info()
1543 rsi->script_name); in do_script_info()
1547 if (status != RCM_SUCCESS && rsi->func_info_buf != NULL) in do_script_info()
1548 free(rsi->func_info_buf); in do_script_info()
1550 if (rsi->failure_reason_buf) in do_script_info()
1551 free(rsi->failure_reason_buf); in do_script_info()
1557 do_dr(script_info_t *rsi, char *argv[], char *envp[], char **info) in do_dr() argument
1562 rsi->failure_reason_buf = NULL; in do_dr()
1564 if (do_cmd(rsi, argv, envp, info) == 0) { in do_dr()
1565 switch (rsi->exit_status) { in do_dr()
1568 if (rsi->failure_reason_buf == NULL) in do_dr()
1576 if (rsi->failure_reason_buf != NULL) { in do_dr()
1577 *info = rsi->failure_reason_buf; in do_dr()
1578 rsi->failure_reason_buf = NULL; in do_dr()
1590 rsi->script_name); in do_dr()
1593 if (rsi->failure_reason_buf) in do_dr()
1594 free(rsi->failure_reason_buf); in do_dr()
1613 script_info_t *rsi = hdl->module->rsi; in script_get_info() local
1624 (void) mutex_lock(&rsi->channel_lock); in script_get_info()
1626 rsi->hdl = hdl; in script_get_info()
1627 rsi->cmd = C_RESOURCEINFO; in script_get_info()
1628 rsi->resource_usage_info_buf = NULL; in script_get_info()
1629 rsi->failure_reason_buf = NULL; in script_get_info()
1630 fill_argv(rsi, argv, resource_name); in script_get_info()
1632 if (do_cmd(rsi, argv, script_env, error) == 0) { in script_get_info()
1633 switch (rsi->exit_status) { in script_get_info()
1635 if (rsi->resource_usage_info_buf != NULL && in script_get_info()
1636 rsi->failure_reason_buf == NULL) { in script_get_info()
1638 *info = rsi->resource_usage_info_buf; in script_get_info()
1639 rsi->resource_usage_info_buf = NULL; in script_get_info()
1646 if (rsi->failure_reason_buf != NULL) { in script_get_info()
1647 *error = rsi->failure_reason_buf; in script_get_info()
1648 rsi->failure_reason_buf = NULL; in script_get_info()
1659 rsi->script_name); in script_get_info()
1662 if (rsi->resource_usage_info_buf) in script_get_info()
1663 free(rsi->resource_usage_info_buf); in script_get_info()
1665 if (rsi->failure_reason_buf) in script_get_info()
1666 free(rsi->failure_reason_buf); in script_get_info()
1668 (void) mutex_unlock(&rsi->channel_lock); in script_get_info()
1674 add_for_unregister(script_info_t *rsi) in add_for_unregister() argument
1676 module_t *module = rsi->module; in add_for_unregister()
1694 remove_from_unregister(script_info_t *rsi, char *resource_name) in remove_from_unregister() argument
1696 module_t *module = rsi->module; in remove_from_unregister()
1717 complete_unregister(script_info_t *rsi) in complete_unregister() argument
1719 module_t *module = rsi->module; in complete_unregister()
1745 script_info_t *rsi = hdl->module->rsi; in script_register_interest() local
1753 rsi->script_name); in script_register_interest()
1755 (void) mutex_lock(&rsi->channel_lock); in script_register_interest()
1757 if (rsi->drreq_q.next != &rsi->drreq_q) { in script_register_interest()
1759 (void) mutex_unlock(&rsi->channel_lock); in script_register_interest()
1763 rsi->hdl = hdl; in script_register_interest()
1764 rsi->cmd = C_REGISTER; in script_register_interest()
1765 rsi->failure_reason_buf = NULL; in script_register_interest()
1766 fill_argv(rsi, argv, NULL); in script_register_interest()
1768 add_for_unregister(rsi); in script_register_interest()
1770 if (do_cmd(rsi, argv, script_env, &errmsg) == 0) { in script_register_interest()
1771 switch (rsi->exit_status) { in script_register_interest()
1777 if (rsi->failure_reason_buf != NULL) { in script_register_interest()
1779 rsi->script_name, in script_register_interest()
1780 rsi->failure_reason_buf); in script_register_interest()
1791 rsi->script_name); in script_register_interest()
1795 complete_unregister(rsi); in script_register_interest()
1797 if (rsi->failure_reason_buf) in script_register_interest()
1798 free(rsi->failure_reason_buf); in script_register_interest()
1800 (void) mutex_unlock(&rsi->channel_lock); in script_register_interest()
1809 add_drreq(script_info_t *rsi, char *resource_name) in add_drreq() argument
1811 rcm_queue_t *head = &rsi->drreq_q; in add_drreq()
1826 rcm_enqueue_tail(&rsi->drreq_q, &drreq->queue); in add_drreq()
1833 remove_drreq(script_info_t *rsi, char *resource_name) in remove_drreq() argument
1835 rcm_queue_t *head = &rsi->drreq_q; in remove_drreq()
1858 remove_drreq_all(script_info_t *rsi) in remove_drreq_all() argument
1862 while (rsi->drreq_q.next != &rsi->drreq_q) { in remove_drreq_all()
1864 rsi->drreq_q.next, queue); in remove_drreq_all()
1865 remove_drreq(rsi, drreq->resource_name); in remove_drreq_all()
1881 script_info_t *rsi = hdl->module->rsi; in script_request_offline() local
1895 (void) mutex_lock(&rsi->channel_lock); in script_request_offline()
1897 rsi->hdl = hdl; in script_request_offline()
1898 rsi->cmd = (flag & RCM_QUERY) ? C_QUERYREMOVE : C_PREREMOVE; in script_request_offline()
1900 if (rsi->cmd == C_PREREMOVE) in script_request_offline()
1901 add_drreq(rsi, resource_name); in script_request_offline()
1903 fill_argv(rsi, argv, resource_name); in script_request_offline()
1910 status = do_dr(rsi, argv, envp, info); in script_request_offline()
1912 (void) mutex_unlock(&rsi->channel_lock); in script_request_offline()
1928 script_info_t *rsi = hdl->module->rsi; in script_notify_online() local
1937 (void) mutex_lock(&rsi->channel_lock); in script_notify_online()
1939 rsi->hdl = hdl; in script_notify_online()
1940 rsi->cmd = C_UNDOREMOVE; in script_notify_online()
1941 fill_argv(rsi, argv, resource_name); in script_notify_online()
1943 status = do_dr(rsi, argv, script_env, info); in script_notify_online()
1945 remove_drreq(rsi, resource_name); in script_notify_online()
1947 (void) mutex_unlock(&rsi->channel_lock); in script_notify_online()
1963 script_info_t *rsi = hdl->module->rsi; in script_notify_remove() local
1972 (void) mutex_lock(&rsi->channel_lock); in script_notify_remove()
1974 rsi->hdl = hdl; in script_notify_remove()
1975 rsi->cmd = C_POSTREMOVE; in script_notify_remove()
1976 fill_argv(rsi, argv, resource_name); in script_notify_remove()
1978 status = do_dr(rsi, argv, script_env, info); in script_notify_remove()
1980 remove_drreq(rsi, resource_name); in script_notify_remove()
1982 (void) mutex_unlock(&rsi->channel_lock); in script_notify_remove()
1999 script_info_t *rsi = hdl->module->rsi; in script_request_suspend() local
2016 (void) mutex_lock(&rsi->channel_lock); in script_request_suspend()
2018 rsi->hdl = hdl; in script_request_suspend()
2019 rsi->cmd = (flag & RCM_QUERY) ? C_QUERYSUSPEND : C_PRESUSPEND; in script_request_suspend()
2021 if (rsi->cmd == C_PRESUSPEND) in script_request_suspend()
2022 add_drreq(rsi, resource_name); in script_request_suspend()
2024 fill_argv(rsi, argv, resource_name); in script_request_suspend()
2046 status = do_dr(rsi, argv, envp, info); in script_request_suspend()
2048 (void) mutex_unlock(&rsi->channel_lock); in script_request_suspend()
2066 script_info_t *rsi = hdl->module->rsi; in script_notify_resume() local
2075 (void) mutex_lock(&rsi->channel_lock); in script_notify_resume()
2077 rsi->hdl = hdl; in script_notify_resume()
2078 rsi->cmd = (flag & RCM_SUSPENDED) ? C_POSTRESUME : C_CANCELSUSPEND; in script_notify_resume()
2079 fill_argv(rsi, argv, resource_name); in script_notify_resume()
2081 status = do_dr(rsi, argv, script_env, info); in script_notify_resume()
2083 remove_drreq(rsi, resource_name); in script_notify_resume()
2085 (void) mutex_unlock(&rsi->channel_lock); in script_notify_resume()
2126 build_env_for_capacity(script_info_t *rsi, in build_env_for_capacity() argument
2147 if (rsi->cmd == C_QUERYCAPACITY || rsi->cmd == C_PRECAPACITY) in build_env_for_capacity()
2156 resource_name, rsi->script_name); in build_env_for_capacity()
2171 rsi->script_name); in build_env_for_capacity()
2381 rsi->script_name); in build_env_for_capacity()
2404 script_info_t *rsi = hdl->module->rsi; in script_request_capacity_change() local
2418 (void) mutex_lock(&rsi->channel_lock); in script_request_capacity_change()
2420 rsi->hdl = hdl; in script_request_capacity_change()
2421 rsi->cmd = (flag & RCM_QUERY) ? C_QUERYCAPACITY : C_PRECAPACITY; in script_request_capacity_change()
2422 fill_argv(rsi, argv, resource_name); in script_request_capacity_change()
2424 if (build_env_for_capacity(rsi, resource_name, flag, in script_request_capacity_change()
2427 status = do_dr(rsi, argv, envp, info); in script_request_capacity_change()
2436 (void) mutex_unlock(&rsi->channel_lock); in script_request_capacity_change()
2453 script_info_t *rsi = hdl->module->rsi; in script_notify_capacity_change() local
2464 (void) mutex_lock(&rsi->channel_lock); in script_notify_capacity_change()
2466 rsi->hdl = hdl; in script_notify_capacity_change()
2467 rsi->cmd = C_POSTCAPACITY; in script_notify_capacity_change()
2468 fill_argv(rsi, argv, resource_name); in script_notify_capacity_change()
2470 if (build_env_for_capacity(rsi, resource_name, flag, in script_notify_capacity_change()
2473 status = do_dr(rsi, argv, envp, info); in script_notify_capacity_change()
2482 (void) mutex_unlock(&rsi->channel_lock); in script_notify_capacity_change()
2488 log_msg(script_info_t *rsi, int level, char *msg) in log_msg() argument
2490 rcm_log_msg(level, MS_LOG_MSG, rsi->script_name, msg); in log_msg()