/*ARGSUSED*/ static int sdt_attach(dev_info_t *devi, ddi_attach_cmd_t cmd) { #pragma unused(cmd) sdt_provider_t *prov; if (ddi_create_minor_node(devi, "sdt", S_IFCHR, 0, DDI_PSEUDO, 0) == DDI_FAILURE) { cmn_err(CE_NOTE, "/dev/sdt couldn't create minor node"); ddi_remove_minor_node(devi, NULL); return (DDI_FAILURE); } ddi_report_dev(devi); sdt_devi = devi; if (sdt_probetab_size == 0) sdt_probetab_size = SDT_PROBETAB_SIZE; sdt_probetab_mask = sdt_probetab_size - 1; sdt_probetab = kmem_zalloc(sdt_probetab_size * sizeof (sdt_probe_t *), KM_SLEEP); dtrace_invop_add(sdt_invop); for (prov = sdt_providers; prov->sdtp_name != NULL; prov++) { if (dtrace_register(prov->sdtp_name, prov->sdtp_attr, DTRACE_PRIV_KERNEL, NULL, &sdt_pops, prov, &prov->sdtp_id) != 0) { cmn_err(CE_WARN, "failed to register sdt provider %s", prov->sdtp_name); } } return (DDI_SUCCESS); }
static int fbt_attach(dev_info_t *devi, ddi_attach_cmd_t cmd) { switch (cmd) { case DDI_ATTACH: break; case DDI_RESUME: return (DDI_SUCCESS); default: return (DDI_FAILURE); } if (fbt_probetab_size == 0) fbt_probetab_size = FBT_PROBETAB_SIZE; fbt_probetab_mask = fbt_probetab_size - 1; fbt_probetab = kmem_zalloc(fbt_probetab_size * sizeof (fbt_probe_t *), KM_SLEEP); dtrace_invop_add(fbt_invop); if (ddi_create_minor_node(devi, "fbt", S_IFCHR, 0, DDI_PSEUDO, 0) == DDI_FAILURE || dtrace_register("fbt", &fbt_attr, DTRACE_PRIV_KERNEL, NULL, &fbt_pops, NULL, &fbt_id) != 0) { fbt_cleanup(devi); return (DDI_FAILURE); } ddi_report_dev(devi); fbt_devi = devi; return (DDI_SUCCESS); }
int instr_init(void) { int ret; struct proc_dir_entry *ent; ret = misc_register(&instr_dev); if (ret) { printk(KERN_WARNING "instr: Unable to register misc device\n"); return ret; } /***********************************************/ /* Helper not presently implemented :-( */ /***********************************************/ printk(KERN_WARNING "instr loaded: /dev/instr now available\n"); if (instr_probetab_size == 0) instr_probetab_size = INSTR_PROBETAB_SIZE; instr_probetab_mask = instr_probetab_size - 1; instr_probetab = kmem_zalloc(instr_probetab_size * sizeof (instr_probe_t *), KM_SLEEP); dtrace_invop_add(instr_invop); ent = create_proc_entry("dtrace/instr", 0444, NULL); if (ent) ent->proc_fops = &instr_proc_fops; if (dtrace_register("instr", &instr_attr, DTRACE_PRIV_KERNEL, 0, &instr_pops, NULL, &instr_id)) { printk("Failed to register instr - insufficient privilege\n"); } initted = 1; return 0; }
int fbt_init(void) { int ret; struct proc_dir_entry *ent; ret = misc_register(&fbt_dev); if (ret) { printk(KERN_WARNING "fbt: Unable to register misc device\n"); return ret; } /***********************************************/ /* Helper not presently implemented :-( */ /***********************************************/ printk(KERN_WARNING "fbt loaded: /dev/fbt now available\n"); if (fbt_probetab_size == 0) fbt_probetab_size = FBT_PROBETAB_SIZE; fbt_probetab_mask = fbt_probetab_size - 1; fbt_probetab = kmem_zalloc(fbt_probetab_size * sizeof (fbt_probe_t *), KM_SLEEP); dtrace_invop_add(fbt_invop); ent = create_proc_entry("dtrace/fbt", 0444, NULL); if (ent) ent->proc_fops = &fbt_proc_fops; if (dtrace_register("fbt", &fbt_attr, DTRACE_PRIV_KERNEL, 0, &fbt_pops, NULL, &fbt_id)) { printk("Failed to register fbt - insufficient priviledge\n"); } initted = 1; return 0; }
void fbt_init2(void) { invop_loaded = TRUE; dtrace_invop_add(fbt_invop); }