Lines Matching full:probe

120  * of tracepoints to enable. If a probe is activated, it adds its ID to
183 * Each time a probe is created, fasttrap_total is incremented by the number
184 * of tracepoints that may be associated with that probe; fasttrap_total is capped
754 fasttrap_tracepoint_enable(proc_t *p, fasttrap_probe_t *probe, uint_t index) in fasttrap_tracepoint_enable() argument
762 ASSERT(index < probe->ftp_ntps); in fasttrap_tracepoint_enable()
764 pid = probe->ftp_pid; in fasttrap_tracepoint_enable()
765 pc = probe->ftp_tps[index].fit_tp->ftt_pc; in fasttrap_tracepoint_enable()
766 id = &probe->ftp_tps[index].fit_id; in fasttrap_tracepoint_enable()
768 ASSERT(probe->ftp_tps[index].fit_tp->ftt_pid == pid); in fasttrap_tracepoint_enable()
776 * on the generation in which this probe was last modified. in fasttrap_tracepoint_enable()
778 fasttrap_mod_barrier(probe->ftp_gen); in fasttrap_tracepoint_enable()
812 * This can't be the first interested probe. We don't have in fasttrap_tracepoint_enable()
889 * Initialize the tracepoint that's been preallocated with the probe. in fasttrap_tracepoint_enable()
891 new_tp = probe->ftp_tps[index].fit_tp; in fasttrap_tracepoint_enable()
895 ASSERT(new_tp->ftt_proc == probe->ftp_prov->ftp_proc); in fasttrap_tracepoint_enable()
938 fasttrap_tracepoint_disable(proc_t *p, fasttrap_probe_t *probe, uint_t index) in fasttrap_tracepoint_disable() argument
941 fasttrap_provider_t *provider = probe->ftp_prov; in fasttrap_tracepoint_disable()
947 ASSERT(index < probe->ftp_ntps); in fasttrap_tracepoint_disable()
949 pid = probe->ftp_pid; in fasttrap_tracepoint_disable()
950 pc = probe->ftp_tps[index].fit_tp->ftt_pc; in fasttrap_tracepoint_disable()
951 id = &probe->ftp_tps[index].fit_id; in fasttrap_tracepoint_disable()
953 ASSERT(probe->ftp_tps[index].fit_tp->ftt_pid == pid); in fasttrap_tracepoint_disable()
990 while ((*idp)->fti_probe != probe) { in fasttrap_tracepoint_disable()
999 ASSERT(id->fti_probe == probe); in fasttrap_tracepoint_disable()
1003 * all done, but if this was the last probe assocated with this in fasttrap_tracepoint_disable()
1009 * If the current probe's tracepoint is in use, swap it in fasttrap_tracepoint_disable()
1012 if (tp == probe->ftp_tps[index].fit_tp) { in fasttrap_tracepoint_disable()
1030 ASSERT(*tmp_tp != probe->ftp_tps[index].fit_tp); in fasttrap_tracepoint_disable()
1034 probe->ftp_tps[index].fit_tp = *tmp_tp; in fasttrap_tracepoint_disable()
1041 * Tag the modified probe with the generation in which it was in fasttrap_tracepoint_disable()
1044 probe->ftp_gen = fasttrap_mod_gen; in fasttrap_tracepoint_disable()
1086 * Remove the probe from the hash table of active tracepoints. in fasttrap_tracepoint_disable()
1102 * Tag the modified probe with the generation in which it was changed. in fasttrap_tracepoint_disable()
1104 probe->ftp_gen = fasttrap_mod_gen; in fasttrap_tracepoint_disable()
1151 fasttrap_probe_t *probe = parg; in fasttrap_pid_enable() local
1155 ASSERT(probe != NULL); in fasttrap_pid_enable()
1156 ASSERT(!probe->ftp_enabled); in fasttrap_pid_enable()
1157 ASSERT(id == probe->ftp_id); in fasttrap_pid_enable()
1163 * Increment the count of enabled probes on this probe's provider; in fasttrap_pid_enable()
1164 * the provider can't go away while the probe still exists. We in fasttrap_pid_enable()
1166 * this probe. in fasttrap_pid_enable()
1168 mutex_enter(&probe->ftp_prov->ftp_mtx); in fasttrap_pid_enable()
1169 probe->ftp_prov->ftp_rcount++; in fasttrap_pid_enable()
1170 mutex_exit(&probe->ftp_prov->ftp_mtx); in fasttrap_pid_enable()
1173 * If this probe's provider is retired (meaning it was valid in a in fasttrap_pid_enable()
1177 if (probe->ftp_prov->ftp_retired) in fasttrap_pid_enable()
1186 if ((p = sprlock(probe->ftp_pid)) == NULL) { in fasttrap_pid_enable()
1191 p = prfind(probe->ftp_pid); in fasttrap_pid_enable()
1220 if (pget(probe->ftp_pid, PGET_HOLD | PGET_NOTWEXIT, &p) != 0) in fasttrap_pid_enable()
1232 * Enable all the tracepoints and add this probe's id to each in fasttrap_pid_enable()
1235 for (i = 0; i < probe->ftp_ntps; i++) { in fasttrap_pid_enable()
1236 if ((rc = fasttrap_tracepoint_enable(p, probe, i)) != 0) { in fasttrap_pid_enable()
1249 * created so far for this probe. in fasttrap_pid_enable()
1252 fasttrap_tracepoint_disable(p, probe, i); in fasttrap_pid_enable()
1264 * Since we're not actually enabling this probe, in fasttrap_pid_enable()
1278 probe->ftp_enabled = 1; in fasttrap_pid_enable()
1285 fasttrap_probe_t *probe = parg; in fasttrap_pid_disable() local
1286 fasttrap_provider_t *provider = probe->ftp_prov; in fasttrap_pid_disable()
1290 ASSERT(id == probe->ftp_id); in fasttrap_pid_disable()
1298 * DTrace consumers from disabling this probe. in fasttrap_pid_disable()
1300 if (pget(probe->ftp_pid, PGET_HOLD | PGET_NOTWEXIT, &p) != 0) in fasttrap_pid_disable()
1306 if (probe->ftp_enabled) { in fasttrap_pid_disable()
1307 for (i = 0; i < probe->ftp_ntps; i++) { in fasttrap_pid_disable()
1308 fasttrap_tracepoint_disable(p, probe, i); in fasttrap_pid_disable()
1327 * last probe to be disabled to be able to free it. in fasttrap_pid_disable()
1341 if (!probe->ftp_enabled) in fasttrap_pid_disable()
1344 probe->ftp_enabled = 0; in fasttrap_pid_disable()
1357 fasttrap_probe_t *probe = parg; in fasttrap_pid_getargdesc() local
1364 if (probe->ftp_prov->ftp_retired != 0 || in fasttrap_pid_getargdesc()
1365 desc->dtargd_ndx >= probe->ftp_nargs) { in fasttrap_pid_getargdesc()
1370 ndx = (probe->ftp_argmap != NULL) ? in fasttrap_pid_getargdesc()
1371 probe->ftp_argmap[desc->dtargd_ndx] : desc->dtargd_ndx; in fasttrap_pid_getargdesc()
1373 str = probe->ftp_ntypes; in fasttrap_pid_getargdesc()
1381 if (probe->ftp_xtypes == NULL) in fasttrap_pid_getargdesc()
1384 str = probe->ftp_xtypes; in fasttrap_pid_getargdesc()
1397 fasttrap_probe_t *probe = parg; in fasttrap_pid_destroy() local
1401 ASSERT(probe != NULL); in fasttrap_pid_destroy()
1402 ASSERT(!probe->ftp_enabled); in fasttrap_pid_destroy()
1403 ASSERT(fasttrap_total >= probe->ftp_ntps); in fasttrap_pid_destroy()
1405 atomic_add_32(&fasttrap_total, -probe->ftp_ntps); in fasttrap_pid_destroy()
1406 size = offsetof(fasttrap_probe_t, ftp_tps[probe->ftp_ntps]); in fasttrap_pid_destroy()
1408 if (probe->ftp_gen + 1 >= fasttrap_mod_gen) in fasttrap_pid_destroy()
1409 fasttrap_mod_barrier(probe->ftp_gen); in fasttrap_pid_destroy()
1411 for (i = 0; i < probe->ftp_ntps; i++) { in fasttrap_pid_destroy()
1412 kmem_free(probe->ftp_tps[i].fit_tp, in fasttrap_pid_destroy()
1416 kmem_free(probe, size); in fasttrap_pid_destroy()
1885 * actively adding a new probe associated with this provider. This in fasttrap_add_probe()
1954 * We later assume that each probe has exactly one tracepoint in fasttrap_add_probe()
2092 * We know a few things about our context here: we know that the probe being
2096 * this is a new probe and that there is no way for us to race with another
2098 * lookup a probe before adding it. Saving this lookup is important because
2194 * table. Later, when the probe fires, we only remap the arguments in fasttrap_meta_create_probe()
2205 * The probe is fully constructed -- register it with DTrace. in fasttrap_meta_create_probe()
2248 fasttrap_probe_spec_t *probe; in fasttrap_ioctl() local
2264 sizeof (probe->ftps_offs[0]) * (noffs - 1); in fasttrap_ioctl()
2269 probe = kmem_alloc(size, KM_SLEEP); in fasttrap_ioctl()
2271 if (copyin(uprobe, probe, size) != 0 || in fasttrap_ioctl()
2272 probe->ftps_noffs != noffs) { in fasttrap_ioctl()
2273 kmem_free(probe, size); in fasttrap_ioctl()
2281 if (u8_validate(probe->ftps_func, strlen(probe->ftps_func), in fasttrap_ioctl()
2287 if (u8_validate(probe->ftps_mod, strlen(probe->ftps_mod), in fasttrap_ioctl()
2296 pid_t pid = probe->ftps_pid; in fasttrap_ioctl()
2319 ret = fasttrap_add_probe(probe); in fasttrap_ioctl()
2321 kmem_free(probe, size); in fasttrap_ioctl()