.\" .\" Copyright 2013 Samy Al Bahra. .\" All rights reserved. .\" .\" Redistribution and use in source and binary forms, with or without .\" modification, are permitted provided that the following conditions .\" are met: .\" 1. Redistributions of source code must retain the above copyright .\" notice, this list of conditions and the following disclaimer. .\" 2. Redistributions in binary form must reproduce the above copyright .\" notice, this list of conditions and the following disclaimer in the .\" documentation and/or other materials provided with the distribution. .\" .\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND .\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE .\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE .\" ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE .\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL .\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS .\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) .\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT .\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF .\" SUCH DAMAGE. .\" .\" .Dd December 17, 2013 .Dt ck_pr_rtm 3 .Sh NAME .Nm ck_pr_rtm_begin , .Nm ck_pr_rtm_end , .Nm ck_pr_rtm_abort , .Nm ck_pr_rtm_test .Nd restricted transactional memory .Sh LIBRARY Concurrency Kit (libck, \-lck) .Sh SYNOPSIS .In ck_pr.h .Ft unsigned int .Fn ck_pr_rtm_begin "void" .Ft void .Fn ck_pr_rtm_end "void" .Ft void .Fn ck_pr_rtm_abort "const unsigned int status" .Ft bool .Fn ck_pr_rtm_test "void" .Sh DESCRIPTION These family of functions implement support for restricted transactional memory, if available on the underlying platform. Currently, support is only provided for Intel Haswell and newer x86 microarchitectures that have the TSX-NI feature. .Pp The .Fn ck_pr_rtm_begin function returns CK_PR_RTM_STARTED if a transaction was successfully started. In case of an abort, either internal (through a ck_pr_rtm_abort) or external, program flow will return to the point which the function was called except the return value will consist of a bitmap with one or more of the following bits set: .Bl -tag -width indent .It CK_PR_RTM_EXPLICIT Set if the transactionally was explicitly aborted through .Fn ck_pr_rtm_abort . .It CK_PR_RTM_RETRY Set if the transaction failed but can still succeed if retried. .It CK_PR_RTM_CONFLICT The transaction failed due to a conflict in one of the memory addresses that are part of the working set of the transaction. .It CK_PR_RTM_CAPACITY Set if the architecture-defined transaction size limit was exceeded. .It CK_PR_RTM_DEBUG Set if a hardware breakpoint was triggered. .It CK_PR_RTM_NESTED Set if a nested transaction failed. .El .Pp The user is also able to specify a one byte abort status by calling .Fn ck_pr_rtm_abort . This status byte can be extracted by calling the .Fn CK_PR_RTM_CODE function with the return value of .Fn ck_pr_rtm_begin as an argument. The return value of .Fn CK_PR_RTM_CODE will be the value of this status byte. For additional information, please see the Intel instruction set manuals. .Sh SEE ALSO .Xr ck_pr_fence_load 3 , .Xr ck_pr_fence_load_depends 3 , .Xr ck_pr_fence_store 3 , .Xr ck_pr_fence_memory 3 , .Xr ck_pr_load 3 , .Xr ck_pr_store 3 , .Xr ck_pr_fas 3 , .Xr ck_pr_faa 3 , .Xr ck_pr_inc 3 , .Xr ck_pr_dec 3 , .Xr ck_pr_neg 3 , .Xr ck_pr_not 3 , .Xr ck_pr_sub 3 , .Xr ck_pr_and 3 , .Xr ck_pr_or 3 , .Xr ck_pr_xor 3 , .Xr ck_pr_add 3 , .Xr ck_pr_btc 3 , .Xr ck_pr_bts 3 , .Xr ck_pr_btr 3 .Pp Additional information available at http://concurrencykit.org/