Lines Matching refs:dp

368 fmd_create(fmd_t *dp, const char *arg0, const char *root, const char *conf)  in fmd_create()  argument
414 bzero(dp, sizeof (fmd_t)); in fmd_create()
416 dp->d_version = _fmd_version; in fmd_create()
417 dp->d_pname = fmd_strbasename(arg0); in fmd_create()
418 dp->d_pid = getpid(); in fmd_create()
420 if (pthread_key_create(&dp->d_key, NULL) != 0) in fmd_create()
423 (void) pthread_mutex_init(&dp->d_xprt_lock, NULL); in fmd_create()
424 (void) pthread_mutex_init(&dp->d_err_lock, NULL); in fmd_create()
425 (void) pthread_mutex_init(&dp->d_thr_lock, NULL); in fmd_create()
426 (void) pthread_mutex_init(&dp->d_mod_lock, NULL); in fmd_create()
427 (void) pthread_mutex_init(&dp->d_stats_lock, NULL); in fmd_create()
428 (void) pthread_mutex_init(&dp->d_topo_lock, NULL); in fmd_create()
429 (void) pthread_rwlock_init(&dp->d_log_lock, NULL); in fmd_create()
430 (void) pthread_rwlock_init(&dp->d_hvilog_lock, NULL); in fmd_create()
431 (void) pthread_rwlock_init(&dp->d_ilog_lock, NULL); in fmd_create()
432 (void) pthread_mutex_init(&dp->d_fmd_lock, NULL); in fmd_create()
433 (void) pthread_cond_init(&dp->d_fmd_cv, NULL); in fmd_create()
443 dp->d_alloc_msecs = 10; in fmd_create()
444 dp->d_alloc_tries = 3; in fmd_create()
445 dp->d_str_buckets = 211; in fmd_create()
447 dp->d_rootdir = root ? root : ""; in fmd_create()
448 dp->d_platform = _fmd_plat; in fmd_create()
449 dp->d_machine = _fmd_uts.machine; in fmd_create()
450 dp->d_isaname = _fmd_isa; in fmd_create()
452 dp->d_conf = fmd_conf_open(conf, sizeof (_fmd_conf) / in fmd_create()
455 if (dp->d_conf == NULL) { in fmd_create()
460 (void) fmd_conf_getprop(dp->d_conf, "alloc.msecs", &dp->d_alloc_msecs); in fmd_create()
461 (void) fmd_conf_getprop(dp->d_conf, "alloc.tries", &dp->d_alloc_tries); in fmd_create()
462 (void) fmd_conf_getprop(dp->d_conf, "strbuckets", &dp->d_str_buckets); in fmd_create()
464 (void) fmd_conf_getprop(dp->d_conf, "platform", &dp->d_platform); in fmd_create()
465 (void) fmd_conf_getprop(dp->d_conf, "machine", &dp->d_machine); in fmd_create()
466 (void) fmd_conf_getprop(dp->d_conf, "isaname", &dp->d_isaname); in fmd_create()
473 (void) fmd_conf_getprop(dp->d_conf, "rootdir", &dp->d_rootdir); in fmd_create()
475 (void) fmd_conf_setprop(dp->d_conf, "rootdir", dp->d_rootdir); in fmd_create()
481 (void) fmd_conf_getprop(dp->d_conf, "conf_path", &pap); in fmd_create()
482 (void) fmd_conf_getprop(dp->d_conf, "conf_file", &name); in fmd_create()
488 fmd_conf_merge(dp->d_conf, file); in fmd_create()
503 (void) nv_alloc_init(&dp->d_nva, &fmd_nv_alloc_ops); in fmd_create()
504 dp->d_auth = fmd_protocol_authority(); in fmd_create()
510 dp->d_rmod = fmd_zalloc(sizeof (fmd_module_t), FMD_SLEEP); in fmd_create()
511 dp->d_rmod->mod_name = fmd_strdup(dp->d_pname, FMD_SLEEP); in fmd_create()
512 dp->d_rmod->mod_fmri = fmd_protocol_fmri_module(dp->d_rmod); in fmd_create()
514 fmd_list_append(&dp->d_mod_list, dp->d_rmod); in fmd_create()
515 fmd_module_hold(dp->d_rmod); in fmd_create()
517 (void) pthread_mutex_init(&dp->d_rmod->mod_lock, NULL); in fmd_create()
518 (void) pthread_cond_init(&dp->d_rmod->mod_cv, NULL); in fmd_create()
519 (void) pthread_mutex_init(&dp->d_rmod->mod_stats_lock, NULL); in fmd_create()
521 dp->d_rmod->mod_thread = fmd_thread_xcreate(dp->d_rmod, pthread_self()); in fmd_create()
522 dp->d_rmod->mod_stats = fmd_zalloc(sizeof (fmd_modstat_t), FMD_SLEEP); in fmd_create()
523 dp->d_rmod->mod_ustat = fmd_ustat_create(); in fmd_create()
525 if (pthread_setspecific(dp->d_key, dp->d_rmod->mod_thread) != 0) in fmd_create()
528 if ((dp->d_stats = (fmd_statistics_t *)fmd_ustat_insert( in fmd_create()
529 dp->d_rmod->mod_ustat, FMD_USTAT_NOALLOC, sizeof (_fmd_stats) / in fmd_create()
533 (void) pthread_mutex_lock(&dp->d_rmod->mod_lock); in fmd_create()
534 dp->d_rmod->mod_flags |= FMD_MOD_INIT; in fmd_create()
535 (void) pthread_mutex_unlock(&dp->d_rmod->mod_lock); in fmd_create()
542 dp->d_errstats = sp = fmd_zalloc(sizeof (fmd_stat_t) * in fmd_create()
551 (void) fmd_ustat_insert(dp->d_rmod->mod_ustat, FMD_USTAT_NOALLOC, in fmd_create()
552 EFMD_END - EFMD_UNKNOWN, dp->d_errstats, NULL); in fmd_create()
556 fmd_destroy(fmd_t *dp) in fmd_destroy() argument
566 if (dp->d_xprt_ids != NULL) in fmd_destroy()
574 if (dp->d_self != NULL) { in fmd_destroy()
577 (void) pthread_rwlock_wrlock(&dp->d_disp->dq_lock); in fmd_destroy()
578 self = dp->d_self; in fmd_destroy()
579 dp->d_self = NULL; in fmd_destroy()
580 (void) pthread_rwlock_unlock(&dp->d_disp->dq_lock); in fmd_destroy()
590 for (mp = fmd_list_prev(&dp->d_mod_list); mp != dp->d_rmod; ) { in fmd_destroy()
595 if (dp->d_mod_hash != NULL) { in fmd_destroy()
596 fmd_modhash_destroy(dp->d_mod_hash); in fmd_destroy()
597 dp->d_mod_hash = NULL; in fmd_destroy()
604 if (dp->d_errlog != NULL) { in fmd_destroy()
605 fmd_log_rele(dp->d_errlog); in fmd_destroy()
606 dp->d_errlog = NULL; in fmd_destroy()
609 if (dp->d_fltlog != NULL) { in fmd_destroy()
610 fmd_log_rele(dp->d_fltlog); in fmd_destroy()
611 dp->d_fltlog = NULL; in fmd_destroy()
618 if (dp->d_asrus != NULL) { in fmd_destroy()
619 fmd_asru_hash_destroy(dp->d_asrus); in fmd_destroy()
620 dp->d_asrus = NULL; in fmd_destroy()
628 ASSERT(fmd_list_prev(&dp->d_mod_list) == dp->d_rmod); in fmd_destroy()
629 ASSERT(fmd_list_next(&dp->d_mod_list) == dp->d_rmod); in fmd_destroy()
635 (void) pthread_setspecific(dp->d_key, NULL); in fmd_destroy()
636 fmd_module_lock(dp->d_rmod); in fmd_destroy()
638 while ((cp = fmd_list_next(&dp->d_rmod->mod_cases)) != NULL) in fmd_destroy()
641 fmd_module_unlock(dp->d_rmod); in fmd_destroy()
642 fmd_free(dp->d_rmod->mod_stats, sizeof (fmd_modstat_t)); in fmd_destroy()
643 dp->d_rmod->mod_stats = NULL; in fmd_destroy()
645 (void) pthread_mutex_lock(&dp->d_rmod->mod_lock); in fmd_destroy()
646 dp->d_rmod->mod_flags |= FMD_MOD_FINI; in fmd_destroy()
647 (void) pthread_mutex_unlock(&dp->d_rmod->mod_lock); in fmd_destroy()
649 fmd_module_rele(dp->d_rmod); in fmd_destroy()
650 ASSERT(fmd_list_next(&dp->d_mod_list) == NULL); in fmd_destroy()
656 if (dp->d_cases != NULL) in fmd_destroy()
657 fmd_case_hash_destroy(dp->d_cases); in fmd_destroy()
658 if (dp->d_disp != NULL) in fmd_destroy()
659 fmd_dispq_destroy(dp->d_disp); in fmd_destroy()
660 if (dp->d_timers != NULL) in fmd_destroy()
661 fmd_timerq_destroy(dp->d_timers); in fmd_destroy()
662 if (dp->d_schemes != NULL) in fmd_destroy()
663 fmd_scheme_hash_destroy(dp->d_schemes); in fmd_destroy()
664 if (dp->d_xprt_ids != NULL) in fmd_destroy()
665 fmd_idspace_destroy(dp->d_xprt_ids); in fmd_destroy()
667 if (dp->d_errstats != NULL) { in fmd_destroy()
668 fmd_free(dp->d_errstats, in fmd_destroy()
672 if (dp->d_conf != NULL) in fmd_destroy()
673 fmd_conf_close(dp->d_conf); in fmd_destroy()
677 nvlist_free(dp->d_auth); in fmd_destroy()
678 (void) nv_alloc_fini(&dp->d_nva); in fmd_destroy()
679 dp->d_clockops->fto_fini(dp->d_clockptr); in fmd_destroy()
681 (void) pthread_key_delete(dp->d_key); in fmd_destroy()
682 bzero(dp, sizeof (fmd_t)); in fmd_destroy()
690 fmd_gc(fmd_t *dp, id_t id, hrtime_t hrt) in fmd_gc() argument
696 fmd_modhash_apply(dp->d_mod_hash, fmd_module_gc); in fmd_gc()
699 (void) pthread_rwlock_rdlock(&dp->d_log_lock); in fmd_gc()
700 fmd_log_update(dp->d_errlog); in fmd_gc()
701 (void) pthread_rwlock_unlock(&dp->d_log_lock); in fmd_gc()
703 (void) pthread_rwlock_rdlock(&dp->d_hvilog_lock); in fmd_gc()
704 fmd_log_update(dp->d_hvilog); in fmd_gc()
705 (void) pthread_rwlock_unlock(&dp->d_hvilog_lock); in fmd_gc()
707 (void) pthread_rwlock_rdlock(&dp->d_ilog_lock); in fmd_gc()
708 fmd_log_update(dp->d_ilog); in fmd_gc()
709 (void) pthread_rwlock_unlock(&dp->d_ilog_lock); in fmd_gc()
712 (void) fmd_conf_getprop(dp->d_conf, "gc_interval", &delta); in fmd_gc()
713 (void) fmd_timerq_install(dp->d_timers, dp->d_rmod->mod_timerids, in fmd_gc()
714 (fmd_timer_f *)fmd_gc, dp, NULL, delta); in fmd_gc()
719 fmd_clear_aged_rsrcs(fmd_t *dp, id_t id, hrtime_t hrt) in fmd_clear_aged_rsrcs() argument
724 (void) fmd_conf_getprop(dp->d_conf, "rsrc.pollperiod", &period); in fmd_clear_aged_rsrcs()
725 (void) fmd_timerq_install(dp->d_timers, dp->d_rmod->mod_timerids, in fmd_clear_aged_rsrcs()
726 (fmd_timer_f *)fmd_clear_aged_rsrcs, dp, NULL, period); in fmd_clear_aged_rsrcs()
744 fmd_err_replay(fmd_log_t *lp, fmd_event_t *ep, fmd_t *dp) in fmd_err_replay() argument
749 (void) pthread_mutex_lock(&dp->d_mod_lock); in fmd_err_replay()
751 for (mp = fmd_list_next(&dp->d_mod_list); in fmd_err_replay()
759 (void) pthread_mutex_unlock(&dp->d_mod_lock); in fmd_err_replay()
764 sp = &dp->d_stats->ds_log_partials; in fmd_err_replay()
766 fmd_dispq_dispatch(dp->d_disp, ep, FMD_EVENT_DATA(ep)); in fmd_err_replay()
767 sp = &dp->d_stats->ds_log_replayed; in fmd_err_replay()
770 (void) pthread_mutex_lock(&dp->d_stats_lock); in fmd_err_replay()
772 (void) pthread_mutex_unlock(&dp->d_stats_lock); in fmd_err_replay()
809 fmd_run(fmd_t *dp, int pfd) in fmd_run() argument
830 (void) fmd_conf_getprop(dp->d_conf, "dbout", &dbout); in fmd_run()
832 if (dp->d_fmd_debug != 0 && dbout == 0) in fmd_run()
833 dp->d_fmd_dbout = dp->d_fg? FMD_DBOUT_STDERR : FMD_DBOUT_SYSLOG; in fmd_run()
835 dp->d_fmd_dbout = dbout; in fmd_run()
837 (void) fmd_conf_getprop(dp->d_conf, "client.debug", &dp->d_hdl_debug); in fmd_run()
838 (void) fmd_conf_getprop(dp->d_conf, "client.dbout", &dbout); in fmd_run()
840 if (dp->d_hdl_debug != 0 && dbout == 0) in fmd_run()
841 dp->d_hdl_dbout = dp->d_fg? FMD_DBOUT_STDERR : FMD_DBOUT_SYSLOG; in fmd_run()
843 dp->d_hdl_dbout = dbout; in fmd_run()
851 name = dp->d_rootdir != NULL && in fmd_run()
852 *dp->d_rootdir != '\0' ? dp->d_rootdir : NULL; in fmd_run()
858 dp->d_clockptr = dp->d_clockops->fto_init(); in fmd_run()
862 dp->d_xprt_ids = fmd_idspace_create("xprt_ids", 1, INT_MAX); in fmd_run()
867 dp->d_rmod->mod_timerids = fmd_idspace_create(dp->d_pname, 1, 16); in fmd_run()
868 dp->d_timers = fmd_timerq_create(); in fmd_run()
869 dp->d_disp = fmd_dispq_create(); in fmd_run()
870 dp->d_cases = fmd_case_hash_create(); in fmd_run()
876 dp->d_rmod->mod_queue = fmd_eventq_create(dp->d_rmod, in fmd_run()
877 &dp->d_rmod->mod_stats->ms_evqstat, &dp->d_rmod->mod_stats_lock, 0); in fmd_run()
884 (void) fmd_conf_getprop(dp->d_conf, "client.thrsig", &dp->d_thr_sig); in fmd_run()
886 if (sigaction(dp->d_thr_sig, NULL, &act) != 0) { in fmd_run()
888 "client.thrsig property: %d\n", dp->d_thr_sig); in fmd_run()
893 "property is already in use: %d\n", dp->d_thr_sig); in fmd_run()
900 (void) sigaction(dp->d_thr_sig, &act, NULL); in fmd_run()
902 (void) fmd_conf_getprop(dp->d_conf, "schemedir", &name); in fmd_run()
903 dp->d_schemes = fmd_scheme_hash_create(dp->d_rootdir, name); in fmd_run()
905 (void) fmd_conf_getprop(dp->d_conf, "log.rsrc", &name); in fmd_run()
906 dp->d_asrus = fmd_asru_hash_create(dp->d_rootdir, name); in fmd_run()
908 (void) fmd_conf_getprop(dp->d_conf, "log.error", &name); in fmd_run()
909 dp->d_errlog = fmd_log_open(dp->d_rootdir, name, FMD_LOG_ERROR); in fmd_run()
911 (void) fmd_conf_getprop(dp->d_conf, "log.fault", &name); in fmd_run()
912 dp->d_fltlog = fmd_log_open(dp->d_rootdir, name, FMD_LOG_FAULT); in fmd_run()
914 (void) fmd_conf_getprop(dp->d_conf, "log.info_hival", &name); in fmd_run()
915 dp->d_hvilog = fmd_log_open(dp->d_rootdir, name, FMD_LOG_INFO); in fmd_run()
917 (void) fmd_conf_getprop(dp->d_conf, "log.info", &name); in fmd_run()
918 dp->d_ilog = fmd_log_open(dp->d_rootdir, name, FMD_LOG_INFO); in fmd_run()
920 if (dp->d_asrus == NULL || dp->d_errlog == NULL || dp->d_fltlog == NULL) in fmd_run()
943 dp->d_mod_event = e = fmd_event_create(FMD_EVT_CTL, in fmd_run()
953 dp->d_mod_hash = fmd_modhash_create(); in fmd_run()
955 if (fmd_builtin_loadall(dp->d_mod_hash) != 0 && !dp->d_fg) in fmd_run()
958 (void) fmd_conf_getprop(dp->d_conf, "self.name", &name); in fmd_run()
959 dp->d_self = fmd_modhash_lookup(dp->d_mod_hash, name); in fmd_run()
961 if (dp->d_self != NULL) { in fmd_run()
962 if (fmd_module_dc_key2code(dp->d_self, nodc_key, code_str, in fmd_run()
964 (void) fmd_conf_setprop(dp->d_conf, "nodiagcode", in fmd_run()
966 if (fmd_module_dc_key2code(dp->d_self, repair_key, code_str, in fmd_run()
968 (void) fmd_conf_setprop(dp->d_conf, "repaircode", in fmd_run()
970 if (fmd_module_dc_key2code(dp->d_self, resolve_key, code_str, in fmd_run()
972 (void) fmd_conf_setprop(dp->d_conf, "resolvecode", in fmd_run()
974 if (fmd_module_dc_key2code(dp->d_self, update_key, code_str, in fmd_run()
976 (void) fmd_conf_setprop(dp->d_conf, "updatecode", in fmd_run()
981 dp->d_running = 1; /* we are now officially an active fmd */ in fmd_run()
996 fmd_asru_hash_refresh(dp->d_asrus); in fmd_run()
998 (void) fmd_conf_getprop(dp->d_conf, "plugin.path", &pap); in fmd_run()
999 fmd_modhash_loadall(dp->d_mod_hash, pap, &fmd_rtld_ops, ".so"); in fmd_run()
1001 (void) fmd_conf_getprop(dp->d_conf, "agent.path", &pap); in fmd_run()
1002 fmd_modhash_loadall(dp->d_mod_hash, pap, &fmd_proc_ops, NULL); in fmd_run()
1004 dp->d_loaded = 1; /* modules are now loaded */ in fmd_run()
1012 fmd_asru_hash_replay(dp->d_asrus); in fmd_run()
1014 (void) pthread_rwlock_rdlock(&dp->d_log_lock); in fmd_run()
1015 fmd_log_replay(dp->d_errlog, (fmd_log_f *)fmd_err_replay, dp); in fmd_run()
1016 fmd_log_update(dp->d_errlog); in fmd_run()
1017 (void) pthread_rwlock_unlock(&dp->d_log_lock); in fmd_run()
1019 dp->d_mod_event = NULL; in fmd_run()
1032 fmd_gc(dp, 0, 0); in fmd_run()
1033 fmd_clear_aged_rsrcs(dp, 0, 0); in fmd_run()
1035 (void) pthread_mutex_lock(&dp->d_fmd_lock); in fmd_run()
1036 dp->d_booted = 1; in fmd_run()
1037 (void) pthread_cond_broadcast(&dp->d_fmd_cv); in fmd_run()
1038 (void) pthread_mutex_unlock(&dp->d_fmd_lock); in fmd_run()
1042 fmd_help(fmd_t *dp) in fmd_help() argument
1046 (void) printf("Usage: %s -o debug=mode[,mode]\n", dp->d_pname); in fmd_help()