Lines Matching defs:ktd
176 ktd_wakeup(struct ktr_desc *ktd)
179 callout_stop(&ktd->ktd_wakch);
180 cv_signal(&ktd->ktd_cv);
193 ktd_logerrl(struct ktr_desc *ktd, int error)
196 ktd->ktd_error |= error;
197 ktd->ktd_errcnt++;
204 struct ktr_desc *ktd;
208 ktd = p->p_tracep;
209 if (ktd == NULL)
212 ktd_logerrl(ktd, error);
268 ktdrel(struct ktr_desc *ktd)
273 KDASSERT(ktd->ktd_ref != 0);
274 KASSERT(ktd->ktd_ref > 0);
277 if (--ktd->ktd_ref <= 0) {
278 ktd->ktd_flags |= KTDF_DONE;
279 cv_signal(&ktd->ktd_cv);
284 ktdref(struct ktr_desc *ktd)
289 ktd->ktd_ref++;
296 struct ktr_desc *ktd;
300 for (ktd = TAILQ_FIRST(&ktdq); ktd != NULL;
301 ktd = TAILQ_NEXT(ktd, ktd_list)) {
302 if (ktrsamefile(ktd->ktd_fp, fp)) {
303 ktdref(ktd);
308 return (ktd);
315 struct ktr_desc *ktd;
333 ktd = p->p_tracep;
334 if (ktd == NULL)
342 ktdref(ktd);
344 if (ktd->ktd_flags & KTDF_DONE)
347 if (ktd->ktd_qcount > ktd_maxentry) {
348 ktd_logerrl(ktd, KTDE_ENOSPC);
351 TAILQ_INSERT_TAIL(&ktd->ktd_queue, kte, kte_list);
352 ktd->ktd_qcount++;
353 if (ktd->ktd_flags & KTDF_BLOCKING)
357 (/* flags & KTA_LARGE */0 || ktd->ktd_flags & KTDF_WAIT ||
358 ktd->ktd_qcount > ktd_maxentry >> 1))
364 ktd->ktd_flags |= KTDF_WAIT;
365 ktd_wakeup(ktd);
369 if (cv_timedwait(&ktd->ktd_sync_cv, &ktrace_lock,
371 ktd->ktd_flags |= KTDF_BLOCKING;
388 } while (p->p_tracep == ktd &&
389 (ktd->ktd_flags & (KTDF_WAIT | KTDF_DONE)) == KTDF_WAIT);
392 if (ktd->ktd_qcount > ktd->ktd_delayqcnt)
393 ktd_wakeup(ktd); /* Wakeup now */
394 else if (!callout_pending(&ktd->ktd_wakch))
395 callout_reset(&ktd->ktd_wakch,
396 ktd->ktd_flags & KTDF_INTERACTIVE ?
397 ktd->ktd_intrwakdl : ktd->ktd_wakedelay,
398 ktd_callout, ktd);
402 ktdrel(ktd);
408 ktdrel(ktd);
444 struct ktr_desc *ktd = p->p_tracep;
449 if (ktd == NULL)
453 cv_broadcast(&ktd->ktd_sync_cv);
454 ktdrel(ktd);
460 struct ktr_desc *ktd = p->p_tracep;
464 ktdref(ktd);
468 ktrderefall(struct ktr_desc *ktd, int auth)
476 if (p->p_tracep != ktd)
480 if (p->p_tracep == ktd) {
996 struct ktr_desc *ktd = NULL, *nktd;
1014 ktd = ktd_lookup(fp);
1016 if (ktd == NULL)
1018 error = ktrderefall(ktd, 1);
1023 ktd = ktd_lookup(fp);
1025 if (ktd == NULL) {
1066 ktd = ktd_lookup(fp);
1067 if (ktd != NULL) {
1072 ktd = nktd;
1109 facs, ktd);
1112 ktd);
1124 ret |= ktrsetchildren(curl, p, ops, facs, ktd);
1126 ret |= ktrops(curl, p, ops, facs, ktd);
1133 if (ktd != NULL) {
1140 ktd_wakeup(ktd);
1143 ktdrel(ktd);
1181 struct ktr_desc *ktd)
1203 if (p->p_tracep != ktd) {
1208 p->p_tracep = ktd;
1247 struct ktr_desc *ktd)
1256 ret |= ktrops(curl, p, ops, facs, ktd);
1280 ktrwrite(struct ktr_desc *ktd, struct ktrace_entry *kte)
1287 file_t *fp = ktd->ktd_fp;
1364 (void)ktrderefall(ktd, 0);
1376 struct ktr_desc *ktd = arg;
1377 file_t *fp = ktd->ktd_fp;
1383 kte = TAILQ_FIRST(&ktd->ktd_queue);
1385 if (ktd->ktd_flags & KTDF_WAIT) {
1386 ktd->ktd_flags &= ~(KTDF_WAIT | KTDF_BLOCKING);
1387 cv_broadcast(&ktd->ktd_sync_cv);
1389 if (ktd->ktd_ref == 0)
1391 cv_wait(&ktd->ktd_cv, &ktrace_lock);
1394 TAILQ_INIT(&ktd->ktd_queue);
1395 ktd->ktd_qcount = 0;
1396 ktrerr = ktd->ktd_error;
1397 errcnt = ktd->ktd_errcnt;
1398 ktd->ktd_error = ktd->ktd_errcnt = 0;
1406 ktrwrite(ktd, kte);
1410 if (ktd_lookup(ktd->ktd_fp) == ktd) {
1411 TAILQ_REMOVE(&ktdq, ktd, ktd_list);
1416 callout_halt(&ktd->ktd_wakch, &ktrace_lock);
1417 callout_destroy(&ktd->ktd_wakch);
1428 cv_destroy(&ktd->ktd_sync_cv);
1429 cv_destroy(&ktd->ktd_cv);
1431 kmem_free(ktd, sizeof(*ktd));