On Sat, 2011-07-09 at 16:30 +0200, Torvald Riegel wrote:
> The attached patch makes flat nesting the default, while still
> supporting closed nesting on demand (for user-controlled aborts via
> __transaction_cancel).
> Previously, a new transaction object was created for each nested
> transaction. The patch changes this to using one transaction object
> during the whole lifetime of a thread and keeping checkpoints of the
> transaction state when starting closed nested transactions. This allows
> us to easily use flat nesting and decreases the transaction start/commit
> overheads to some extent.
> 
> OK for branch?

I split the patch, as requested.

First three parts are smaller changes:

patch1: New erase method and placement new for aatree.
patch2: Change pr_hasElse to the value specified in the ABI.
patch3: Add information to dispatch about closed nesting and
uninstrumented code.

Then, in preparation for the following flat-transaction object design:
patch4: Use vector instead of list to store user actions.
patch5: Add closed nesting as restart reason.

And the actual core change:
patch6: Make flat nesting the default, use closed nesting on demand.

This last patch is still rather large, but it is one logical piece.
beginend.cc has most changes, but splitting this one up would rather
create incomplete intermediate steps than make the direction of this
whole patch clear.

As discussed offline, reducing the one extra copying of jmpbuf for
actual closed-nested transactions can be addressed in a future patch by
modifying _ITM_beginTransaction, which could additionally remove the
extra copying from stack to jmpbuf for all transactions as it existed
before this patch here.

Ok for branch, or is further splitting required?

Reply via email to