Lines Matching refs:dp

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