Brian Demsky [Wed, 19 Sep 2012 07:35:54 +0000 (00:35 -0700)]
fix
Merge branch 'master' of ssh://demsky.eecs.uci.edu/home/git/model-checker
Conflicts:
model.cc
Brian Norris [Wed, 19 Sep 2012 02:29:05 +0000 (19:29 -0700)]
model: replace list type with action_list_t
Brian Norris [Wed, 19 Sep 2012 01:54:40 +0000 (18:54 -0700)]
model: add typedef for list of release sequence heads
Brian Norris [Wed, 19 Sep 2012 01:45:17 +0000 (18:45 -0700)]
model: THREAD_JOIN synchronizes with THREAD_FINISH
Brian Norris [Wed, 19 Sep 2012 01:37:22 +0000 (18:37 -0700)]
action: THREAD_JOIN can synchronize against execution order
synchronize_with() had an assertion to ensure that synchronization never
occurred opposite the execution trace ordering. But THREAD_JOIN is a special
case, where this ordering won't break the rest of the model-checker.
Brian Norris [Tue, 18 Sep 2012 23:42:09 +0000 (16:42 -0700)]
model: add curr to action lists early
The current action should be added to the ModelChecker lists early within
check_current_action, so that we can have consistency throughout the function.
We only allow an isolated piece of initialization (initialize_curr_action) to
occur before this step.
Brian Norris [Tue, 18 Sep 2012 23:35:46 +0000 (16:35 -0700)]
model: document behavior of ModelChecker::initialize_curr_action
Brian Norris [Tue, 18 Sep 2012 23:26:52 +0000 (16:26 -0700)]
model: pull "may_read_from set" calculation out of initialization
The build_reads_from_past calculation shouldn't be part of the action
initialization. It requires more information from the ModelChecker.
In the future, we will assume that all check_curren_action code (after
initialization) may include the current action in the model-checker lists. So
this also fixes up the build_reads_from_past code so that it skips the current
action.
Brian Norris [Tue, 18 Sep 2012 23:16:38 +0000 (16:16 -0700)]
model: refactor ModelChecker::initialize_curr_action
Rewrite some logic for simplification. Just refactorization.
Brian Norris [Tue, 18 Sep 2012 22:51:37 +0000 (15:51 -0700)]
model: move init code to ModelChecker::initialize_curr_action
Refactoring
Brian Norris [Tue, 18 Sep 2012 22:39:35 +0000 (15:39 -0700)]
model: pull computation out of conditional
Brian Norris [Fri, 14 Sep 2012 20:12:42 +0000 (13:12 -0700)]
tests: add releaseseq test
Very simple release/acquire test, with some relaxed writes thrown in. The test
is semi-useful and can certainly be tweaked a bit.
Brian Norris [Fri, 14 Sep 2012 20:11:08 +0000 (13:11 -0700)]
model: add some mo_graph fixup code to work_queue
The work queue has all its work items implemented now. But I haven't fully
verified that this is complete yet.
Brian Norris [Tue, 18 Sep 2012 20:26:55 +0000 (13:26 -0700)]
Merge branch 'norris'
Primary change: push 'add_action_to_lists()' before main work in
'check_current_action()'
Brian Norris [Tue, 18 Sep 2012 20:24:47 +0000 (13:24 -0700)]
cyclegraph: add ASSERT() for reflexive edges
Brian Norris [Tue, 18 Sep 2012 19:00:30 +0000 (12:00 -0700)]
model: add infeasibility debugging
Brian Norris [Fri, 14 Sep 2012 19:58:05 +0000 (12:58 -0700)]
common: print tracing info for ASSERT() failures
This adds a global model_print_summary() function, so we can view the current
ModelChecker summary info when we hit an assertion.
Brian Norris [Tue, 18 Sep 2012 17:40:33 +0000 (10:40 -0700)]
model: bugfix - w_modification_order handling current action
The current action should be skipped when iterating lists in
w_modification_order.
Bugfix thanks to Brian D.
Brian Norris [Tue, 18 Sep 2012 17:39:44 +0000 (10:39 -0700)]
model: fixup r_modification_order
Bugfix thanks to Brian D.
Brian Norris [Tue, 18 Sep 2012 17:36:06 +0000 (10:36 -0700)]
model: check_recency - "already_added" always true
The current action is always part of the lists now.
Bugfix thanks to Brian D.
Brian Norris [Tue, 18 Sep 2012 17:29:04 +0000 (10:29 -0700)]
model: bugfix get_last_seq_action()
The action lists may include the current action, which we don't want to
consider for 'get_last_seq_action()'.
Also, rewrite some of the comments for this function.
Bugfix thanks to Brian D.
Brian Demsky [Tue, 18 Sep 2012 05:15:55 +0000 (22:15 -0700)]
add mutex files
Brian Demsky [Tue, 18 Sep 2012 05:15:35 +0000 (22:15 -0700)]
start towards adding support for mutexes
Brian Norris [Fri, 14 Sep 2012 19:43:25 +0000 (12:43 -0700)]
model: fixup happens_before/reflexivity, add 'curr' to lists earlier
Some code under 'check_current_action' assumes that the current action is not
added to the ModelChecker trace/list data structures yet. However, some
features I need to add will require the current action to be in these
data structures already. So there are a few spots I need to fixup so that the
code can handle "happens_before" reflexivity properly.
This commit moves the "add_action_to_lists()" call as well as fixes up
reflexivity.
Brian Norris [Fri, 14 Sep 2012 18:25:59 +0000 (11:25 -0700)]
Merge branch 'norris'
Brian Norris [Fri, 14 Sep 2012 18:07:22 +0000 (11:07 -0700)]
model: release_seq synchronization generates mo_graph edge "work entries"
Now, when the synchronization for a ModelAction is updated while resolving
release sequences, the affected ModelAction(s) can be queued to the work_queue
for later processing (i.e., checking for mo_graph edge additions).
Note that the MOEdgeWorkEntry is not yet handled in the work_queue loop.
Brian Norris [Fri, 14 Sep 2012 17:33:53 +0000 (10:33 -0700)]
.gitignore: ignore .dot graph files
Brian Norris [Fri, 14 Sep 2012 17:24:24 +0000 (10:24 -0700)]
model: record the number of feasible executions
The 'num_executions' statistic isn't quite as useful now. We want to compare
total executions to the number of feasible executions.
Brian Norris [Fri, 14 Sep 2012 17:29:35 +0000 (10:29 -0700)]
config: don't enable graph dumping in master repo
Brian Norris [Fri, 14 Sep 2012 16:52:49 +0000 (09:52 -0700)]
model: add work queue loop
This commit does not change the actual computations performed yet. It only
prepares a loop structure in which we could perform many different Work items,
queueing them up as they are generated.
Brian Norris [Fri, 14 Sep 2012 16:46:56 +0000 (09:46 -0700)]
workqueue: add work queue structures
Brian Demsky [Fri, 14 Sep 2012 08:33:48 +0000 (01:33 -0700)]
tabbing
Brian Demsky [Fri, 14 Sep 2012 08:31:09 +0000 (01:31 -0700)]
(1) add actions for the fence
(2) a little more support for cyclegraph -- show rmw edges
(3) add extra documentation for norris
Brian Demsky [Fri, 14 Sep 2012 05:04:45 +0000 (22:04 -0700)]
add support for dumping cyclegraphs as dot files... also eliminate redundant edges to make them easier to view
Brian Norris [Thu, 13 Sep 2012 23:16:30 +0000 (16:16 -0700)]
model: more restructuring of read/write processing
Make a ModelChecker::process_write function, for symmetry and to shorten the
code portions where the main control flow happens.
Brian Norris [Thu, 13 Sep 2012 23:08:04 +0000 (16:08 -0700)]
model: remove unnecessary parameter to ModelChecker::process_read
The current Thread can be generated later.
Brian Norris [Thu, 13 Sep 2012 23:03:23 +0000 (16:03 -0700)]
Makefile: add PHONY targets
Just in case there ever are files named clean, mrclean, etc.
Brian Norris [Thu, 13 Sep 2012 22:42:21 +0000 (15:42 -0700)]
bugfix: straighten out STL vector allocation (snapshotted vs. persistent)
When using a STL data structure allocated on the stack, we must make sure its
elements are allocated with the same allocator as the structure. For instance,
in a model-checking context, the stack is persistent (non-snapshotting), so any
stack-allocated std::vector should use the non-snapshotting allocator (i.e.,
MyAlloc).
At the same time, clarify CycleGraph and CycleNode classes by labelling them as
SNAPSHOTALLOC.
Brian Norris [Thu, 13 Sep 2012 21:58:36 +0000 (14:58 -0700)]
model: bugfix - don't clobber 'updated'
The 'updated' variable should stay 'true' even if modification orders and
promises aren't updated by the "write" checks. This could be a RMW which made
updates via the "read" checks.
Brian Norris [Thu, 13 Sep 2012 21:56:16 +0000 (14:56 -0700)]
Revert "Makefile: don't always rebuild make.deps"
The Makefile wasn't using its dependency generation correctly. Revert this for
now.
This reverts commit
870ba814eceb1afee4eefb17dab3980549ca73e2.
Brian Norris [Thu, 13 Sep 2012 21:47:44 +0000 (14:47 -0700)]
snapshot: print stack trace on segfault
Brian Norris [Thu, 13 Sep 2012 21:47:23 +0000 (14:47 -0700)]
common: add print_trace() for backtracing
Brian Norris [Thu, 13 Sep 2012 18:45:42 +0000 (11:45 -0700)]
model: trivial fixups
Brian Norris [Thu, 13 Sep 2012 18:35:48 +0000 (11:35 -0700)]
Makefile: don't always rebuild make.deps
The dependencies don't need to be regenerated for "make tags", "make docs",
etc.
Brian Norris [Thu, 13 Sep 2012 17:16:37 +0000 (10:16 -0700)]
model: simple ASSERT() bug
Don't ASSERT(rf->is_write()) until we're sure that rf is non-NULL.
Brian Norris [Thu, 13 Sep 2012 17:04:28 +0000 (10:04 -0700)]
main: wrap help message
Brian Norris [Thu, 13 Sep 2012 16:53:59 +0000 (09:53 -0700)]
model: kill unneeded local variable
The "Thread *th" variable is used only on a few control paths, and it is never
reused. Might as well just calculate it on the fly. Also, it's recalculated and
masked by another local variable at a deeper level of nesting.
Brian Norris [Thu, 13 Sep 2012 16:42:54 +0000 (09:42 -0700)]
spacing
Brian Norris [Thu, 13 Sep 2012 16:21:08 +0000 (09:21 -0700)]
Merge remote-tracking branch 'origin/makefile'
Brian Demsky [Thu, 13 Sep 2012 08:33:24 +0000 (01:33 -0700)]
lots of debugging here... finally working with my rmw example...
Brian Norris [Thu, 13 Sep 2012 07:22:55 +0000 (00:22 -0700)]
Makefile: fixup Mac dependencies
Now, Mac OSX builds can just use "make", not "make mac". (This also allows
"make debug" for Mac OSX)
Brian Norris [Thu, 13 Sep 2012 07:01:01 +0000 (00:01 -0700)]
cleanup style
Brian Demsky [Thu, 13 Sep 2012 05:59:03 +0000 (22:59 -0700)]
commit new test case
Brian Demsky [Thu, 13 Sep 2012 05:57:00 +0000 (22:57 -0700)]
fix for horrible bug... turns out that we could generate an infinite set of bad executions due to future values...
fix--don't send future values backwards until all of your promises are resolved...
Brian Demsky [Thu, 13 Sep 2012 05:08:22 +0000 (22:08 -0700)]
missing changes
Brian Demsky [Thu, 13 Sep 2012 05:06:51 +0000 (22:06 -0700)]
right fix for avoid rmw cycles... bad assumption in the cyclegraph
Brian Demsky [Thu, 13 Sep 2012 04:03:37 +0000 (21:03 -0700)]
another bug fix...
Brian Demsky [Thu, 13 Sep 2012 03:35:47 +0000 (20:35 -0700)]
separate out rmw actions
make sure we don't insert promises twice for a node
Brian Demsky [Wed, 12 Sep 2012 23:24:07 +0000 (16:24 -0700)]
(1) structure code a little better
(2) add startChanges to cyclegraph... This is just to check some assertions that rollback is being used correctly and doesn't rollback unintended changes
Brian Demsky [Wed, 12 Sep 2012 22:12:31 +0000 (15:12 -0700)]
deal with looping due to bogus future value via promise expiration
fix promise bug
Brian Demsky [Wed, 12 Sep 2012 09:52:34 +0000 (02:52 -0700)]
fun issues...
(1) need to compute promises for rmw nodes...they could satisfy them
(2) don't call rmwedge if you don't know where you are reading from yet
(3) miscopied commit from big merge (already_added -> !already_added)
(4) avoid adding rmw edges back to itself
(5) probably worth adding a check that the execution isfeasible before sending future values
(6) resolve promises should add rmwedges when appropriate
(7) fix seq_cst to mask earlier writes..
Brian Norris [Wed, 12 Sep 2012 02:48:38 +0000 (19:48 -0700)]
threads, model, schedule: refactor thread joining
The Thread can hold a list of ModelAction (instead of Threads) that are waiting
for its completion. This will give the exiting Thread a better ability to
handle the event.
This also deletes Scheduler::wait, since it is no superceded by Scheduler::sleep.
Brian Norris [Wed, 12 Sep 2012 02:45:57 +0000 (19:45 -0700)]
model: add ModelChecker::get_thread(ModelAction *act)
Many times, I need to convert ModelAction to a Thread. Overload get_thread() to
make it easier to use.
Brian Norris [Wed, 12 Sep 2012 02:38:50 +0000 (19:38 -0700)]
schedule: add sleep() function
The wait() and wake() functions are not very complementary. I will be removing
wait() in favor of a simpler sleep() function, which is introduced here.
Brian Norris [Wed, 12 Sep 2012 00:54:29 +0000 (17:54 -0700)]
cyclegraph: add non-NULL assertions
Brian Norris [Wed, 12 Sep 2012 00:52:02 +0000 (17:52 -0700)]
Merge branch 'demsky'
Branch cleaned up by Brian Norris
Brian Demsky [Tue, 11 Sep 2012 03:17:10 +0000 (20:17 -0700)]
model: cleaning up some code
Brian Norris [Tue, 11 Sep 2012 18:43:18 +0000 (11:43 -0700)]
model: handle RMW, unresolved reads in w_modification_order checks
Brian Demsky [Mon, 10 Sep 2012 00:43:20 +0000 (17:43 -0700)]
model: fix the maxreads support
Brian Demsky [Sun, 9 Sep 2012 09:25:47 +0000 (02:25 -0700)]
model: some bug fixes to the model checker
Brian Demsky [Sun, 9 Sep 2012 09:25:47 +0000 (02:25 -0700)]
linuxrwlocks: two bug fixes; guess the model checker helps find bugs
Brian Demsky [Sun, 9 Sep 2012 02:37:11 +0000 (19:37 -0700)]
model: bug fixes to new code
Brian Demsky [Sun, 9 Sep 2012 02:37:11 +0000 (19:37 -0700)]
cyclegraph: support rolling back changes
Brian Norris [Tue, 11 Sep 2012 19:24:15 +0000 (12:24 -0700)]
model: replace action conditions with switch block
Brian Norris [Tue, 11 Sep 2012 17:20:06 +0000 (10:20 -0700)]
model: add check_recency()
Note the weaknesses of the code, as documented in @todo.
Brian Norris [Tue, 11 Sep 2012 18:19:50 +0000 (11:19 -0700)]
model: refactor "get next thread" code
get_next_replay_thread() might as well handle all the Thread decisions for the
model-checker. Refactor, and rename to get_next_thread().
Brian Norris [Tue, 11 Sep 2012 17:19:46 +0000 (10:19 -0700)]
model: add too_many_reads flag
Brian Norris [Tue, 11 Sep 2012 17:19:10 +0000 (10:19 -0700)]
nodestack: add get_read_from_size()
Brian Norris [Tue, 11 Sep 2012 17:10:39 +0000 (10:10 -0700)]
main: add "maxreads" parameter
Brian Norris [Sat, 8 Sep 2012 07:38:03 +0000 (00:38 -0700)]
main: add parameter parsing
Only has a help message for now.
Brian Norris [Sat, 8 Sep 2012 06:36:00 +0000 (23:36 -0700)]
model: fix release sequence with RMW, acq vs. acq/rel
Check in a bugfix from Brian D
Brian Norris [Fri, 7 Sep 2012 20:12:46 +0000 (13:12 -0700)]
model: maintain a count of the pending lazy synchronizations
lazy_sync_size should be the sum of the size of all the lists in
lazy_sync_with_release.
Brian Norris [Fri, 7 Sep 2012 19:58:06 +0000 (12:58 -0700)]
model: group snapshottable ModelChecker members in struct
These items shouldn't be reset individually, but rather should be grouped
together and allocated on the snapshotting heap. This puts us a step closer to
utilizing partial rollback within executions.
Brian Norris [Fri, 7 Sep 2012 18:25:25 +0000 (11:25 -0700)]
model: force THREAD_START to immediately follow THREAD_CREATE
Note that on the current userprog.c test case, this change causes more
infeasible executions to appear. This is somewhat unexpected but probably just
a result of sub-optimal scheduling.
Brian Norris [Fri, 7 Sep 2012 17:38:58 +0000 (10:38 -0700)]
model: fix release_seq for open-ended synchronization
This fix handles the case where a thread may not yet have synchronized in a way
that ensures no future writes may break a release sequence. If we encounter
such a thread, we can return false (uncertain) and re-check this potential
release sequence later in the execution.
Brian Norris [Fri, 7 Sep 2012 17:31:08 +0000 (10:31 -0700)]
model: use std::find for release sequence search
Brian Norris [Fri, 7 Sep 2012 17:16:41 +0000 (10:16 -0700)]
model: don't use global 'model' unnecessarily
Brian Demsky [Fri, 7 Sep 2012 06:48:25 +0000 (23:48 -0700)]
changes
Brian Demsky [Fri, 7 Sep 2012 01:56:39 +0000 (18:56 -0700)]
Merge branch 'master' of ssh://demsky.eecs.uci.edu/home/git/model-checker
check in my stuff...
Conflicts:
model.cc
threads.h
Brian Demsky [Fri, 7 Sep 2012 01:32:56 +0000 (18:32 -0700)]
changes
Brian Norris [Thu, 6 Sep 2012 23:16:51 +0000 (16:16 -0700)]
Merge branch 'norris'
Fixes up some THREAD_JOIN behavior, cleaning up a little bit of general model-checker structure.
Brian Norris [Thu, 6 Sep 2012 21:07:44 +0000 (14:07 -0700)]
model: complete the Thread teardown during THREAD_FINISH
Brian Norris [Thu, 6 Sep 2012 21:04:09 +0000 (14:04 -0700)]
model: enforce rule: current_action != NULL
Now that I've fixed THREAD_JOIN, modify the comments and safety checks.
Brian Norris [Thu, 6 Sep 2012 20:55:05 +0000 (13:55 -0700)]
libthreads: don't spin on THREAD_JOIN
THREAD_JOIN can now be implemented properly here. We shouldn't have to spin,
waiting for another thread to complete. This may help improve the ModelChecker
architecture, since we will never have NULL actions passed to the ModelChecker.
Brian Norris [Thu, 6 Sep 2012 20:54:06 +0000 (13:54 -0700)]
model: hook up THREAD_JOIN and THREAD_FINISH actions
Brian Norris [Thu, 6 Sep 2012 20:37:35 +0000 (13:37 -0700)]
schedule: add wait and wake functions
These functions will be used to prevent execution of threads that should be
waiting for another event (e.g., a THREAD_JOIN should cause a thread to wait
for another thread's exit).
Brian Norris [Thu, 6 Sep 2012 20:47:12 +0000 (13:47 -0700)]
threads: fixup THREAD_READY comment
This state will be used for more than just a context switch, so reword the
comment.
Brian Norris [Thu, 6 Sep 2012 20:41:12 +0000 (13:41 -0700)]
threads: add THREAD_BLOCKED state
To signal that a Thread cannot yet be added back to the Scheduler's ready list.
Brian Norris [Thu, 6 Sep 2012 20:17:06 +0000 (13:17 -0700)]
threads: add a wait_list
This list will contain all Threads that are waiting on the current Thread. Will
be used for Thread joins, in particular.
Brian Norris [Thu, 6 Sep 2012 20:10:11 +0000 (13:10 -0700)]
threads: add is_complete() helper function