From owner-p4-projects@FreeBSD.ORG Mon Mar 18 21:35:29 2013 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 4B2CD7E4; Mon, 18 Mar 2013 21:35:29 +0000 (UTC) Delivered-To: perforce@freebsd.org Received: from mx1.freebsd.org (mx1.FreeBSD.org [8.8.178.115]) by hub.freebsd.org (Postfix) with ESMTP id 0D6907E2 for ; Mon, 18 Mar 2013 21:35:29 +0000 (UTC) (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: from skunkworks.freebsd.org (skunkworks.freebsd.org [IPv6:2001:1900:2254:2068::682:0]) by mx1.freebsd.org (Postfix) with ESMTP id D62E6D2E for ; Mon, 18 Mar 2013 21:35:28 +0000 (UTC) Received: from skunkworks.freebsd.org ([127.0.1.74]) by skunkworks.freebsd.org (8.14.6/8.14.6) with ESMTP id r2ILZSUJ042920 for ; Mon, 18 Mar 2013 21:35:28 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Received: (from perforce@localhost) by skunkworks.freebsd.org (8.14.6/8.14.6/Submit) id r2ILZSUn042917 for perforce@freebsd.org; Mon, 18 Mar 2013 21:35:28 GMT (envelope-from bb+lists.freebsd.perforce@cyrus.watson.org) Date: Mon, 18 Mar 2013 21:35:28 GMT Message-Id: <201303182135.r2ILZSUn042917@skunkworks.freebsd.org> X-Authentication-Warning: skunkworks.freebsd.org: perforce set sender to bb+lists.freebsd.perforce@cyrus.watson.org using -f From: Robert Watson Subject: PERFORCE change 223022 for review To: Perforce Change Reviews Precedence: bulk X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.14 List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 18 Mar 2013 21:35:29 -0000 http://p4web.freebsd.org/@@223022?ac=10 Change 223022 by rwatson@rwatson_cinnamon on 2013/03/18 21:35:01 Merge new libtesla parts -- specifically, loopback of (and enhancements to) events exposed via DTrace. Affected files ... .. //depot/projects/ctsrd/tesla/src/sys/libtesla/Makefile#2 integrate .. //depot/projects/ctsrd/tesla/src/sys/libtesla/state-perthread.c#8 integrate .. //depot/projects/ctsrd/tesla/src/sys/libtesla/state.c#6 integrate .. //depot/projects/ctsrd/tesla/src/sys/libtesla/tesla.h#4 integrate .. //depot/projects/ctsrd/tesla/src/sys/libtesla/tesla_dtrace.c#2 integrate .. //depot/projects/ctsrd/tesla/src/sys/libtesla/tesla_internal.h#9 integrate .. //depot/projects/ctsrd/tesla/src/sys/libtesla/tesla_notification.c#1 branch .. //depot/projects/ctsrd/tesla/src/sys/libtesla/update.c#6 integrate Differences ... ==== //depot/projects/ctsrd/tesla/src/sys/libtesla/Makefile#2 (text+ko) ==== @@ -7,8 +7,8 @@ CFLAGS+= -I${.CURDIR} INCS= tesla.h libtesla.h -SRCS= debug.c key.c state.c state-global.c state-perthread.c \ - store.c update.c util.c +SRCS= debug.c key.c tesla_dtrace.c tesla_notification.c state.c state-global.c + state-perthread.c store.c update.c util.c .include ==== //depot/projects/ctsrd/tesla/src/sys/libtesla/state-perthread.c#8 (text+ko) ==== ==== //depot/projects/ctsrd/tesla/src/sys/libtesla/state.c#6 (text+ko) ==== @@ -241,11 +241,9 @@ key_str, trans_str); break; -#ifdef NOTYET case TESLA_ACTION_DTRACE: - dtrace_probe(...); + tesla_assert_fail_dtrace(class, NULL, trans); return; -#endif case TESLA_ACTION_PRINTF: #if defined(_KERNEL) && defined(KDB) @@ -280,11 +278,11 @@ tsp->ts_name, tsp->ts_description, transition_matrix(trans), tip->ti_state); break; /* A bit gratuitous. */ -#ifdef NOTYET + case TESLA_ACTION_DTRACE: - dtrace_probe(...); + tesla_assert_fail_dtrace(tsp, tip, trans); return; -#endif + case TESLA_ACTION_PRINTF: #if defined(_KERNEL) && defined(KDB) kdb_backtrace(); ==== //depot/projects/ctsrd/tesla/src/sys/libtesla/tesla.h#4 (text+ko) ==== @@ -47,8 +47,11 @@ * * a counter to ensure uniqueness (__COUNTER__) * * the TESLA context (per-thread or global) */ -void __tesla_inline_assertion(const char *filename, int line, int count, - __tesla_locality*, ...); +inline void +__tesla_inline_assertion(const char *filename, int line, int count, + __tesla_locality *loc, ...) +{ +} /* Only define the following things if doing TESLA analysis, not compiling. */ ==== //depot/projects/ctsrd/tesla/src/sys/libtesla/tesla_dtrace.c#2 (text+ko) ==== ==== //depot/projects/ctsrd/tesla/src/sys/libtesla/tesla_internal.h#9 (text+ko) ==== @@ -287,12 +287,30 @@ void tesla_class_perthread_destroy(struct tesla_class*); /* + * Event notification: + */ +void tesla_state_notify_new_instance(struct tesla_class *, + struct tesla_instance *); + +void tesla_state_notify_transition(struct tesla_class *, + struct tesla_instance *, const struct tesla_transitions *, uint32_t index); + +void tesla_state_notify_clone(struct tesla_class *, struct tesla_instance *, + const struct tesla_transitions *, uint32_t index); + +void tesla_state_notify_fail(struct tesla_class *, struct tesla_instance *, + const struct tesla_transitions *); + +void tesla_state_notify_pass(struct tesla_class *, struct tesla_instance *); + +/* * DTrace notifications of various events. */ void tesla_state_transition_dtrace(struct tesla_class *, - struct tesla_instance *); + struct tesla_instance *, const struct tesla_transitions *, + uint32_t transition_index); void tesla_assert_fail_dtrace(struct tesla_class *, - struct tesla_instance *); + struct tesla_instance *, const struct tesla_transitions *); void tesla_assert_pass_dtrace(struct tesla_class *, struct tesla_instance *); ==== //depot/projects/ctsrd/tesla/src/sys/libtesla/update.c#6 (text+ko) ==== @@ -83,8 +83,6 @@ } tesla_table *table = class->ts_table; - tesla_instance *start = table->tt_instances; - assert(table->tt_length <= 32); // Did we match any instances? @@ -141,8 +139,8 @@ // instructed to fork), just update the state. if (!(t->flags & TESLA_TRANS_FORK) && key->tk_mask == k->tk_mask) { - VERBOSE_PRINT("update %td: %tx->%tx\n", - inst - start, t->from, t->to); + tesla_state_notify_transition(class, inst, + trans, j); inst->ti_state = t->to; break; @@ -150,14 +148,12 @@ // If the keys weren't an exact match, we need to fork // a new (more specific) automaton instance. + tesla_state_notify_clone(class, inst, trans, j); + struct tesla_instance *clone = clones + cloned++; *clone = *inst; clone->ti_state = t->to; - VERBOSE_PRINT("clone %td:%tx -> %tx\n", - inst - start, inst->ti_state, - t->to); - CHECK(tesla_key_union, &clone->ti_key, key); break; } @@ -184,8 +180,7 @@ assert(tesla_instance_active(inst)); matched_something = true; - VERBOSE_PRINT("new %td: %tx\n", - inst - start, inst->ti_state); + tesla_state_notify_new_instance(class, inst); } if (t->flags & TESLA_TRANS_CLEANUP) {