* [PATCH V4 1/2] IB/core: Add support for enhanced atomic operations
@ 2010-04-14 14:23 Vladimir Sokolovsky
2010-04-19 8:18 ` Håkon Bugge
0 siblings, 1 reply; 3+ messages in thread
From: Vladimir Sokolovsky @ 2010-04-14 14:23 UTC (permalink / raw)
To: rdreier-FYB4Gu1CFyUAvxtiuMwx3w; +Cc: linux-rdma-u79uwXL29TY76Z2rM5mHXA
- Add a new IB_WR_MASKED_ATOMIC_CMP_AND_SWP and IB_WR_MASKED_ATOMIC_FETCH_AND_ADD send
opcodes that can be used to mark a "masked atomic compare and swap" and
"masked atomic fetch and add" work request correspondingly.
- Add masked_atomic_cap capability.
- Add mask fields to atomic struct of ib_send_wr
- Add new opcodes to ib_wc_opcode
Masked Compare and Swap (MskCmpSwap)
The MskCmpSwap atomic operation is an extension to the CmpSwap operation
defined in the IB spec. MskCmpSwap allows the user to select a portion of the
64 bit target data for the “compare” check as well as to restrict the swap to a
(possibly different) portion. The pseudo code below describes the operation:
| atomic_response = *va
| if (!((compare_add ^ *va) & compare_add_mask)) then
| *va = (*va & ~(swap_mask)) | (swap & swap_mask)
|
| return atomic_response
The additional operands are carried in the Extended Transport Header. Atomic
response generation and packet format for MskCmpSwap is as for standard IB
Atomic operations.
Masked Fetch and Add (MFetchAdd)
The MFetchAdd Atomic operation extends the functionality of the standard IB
FetchAdd by allowing the user to split the target into multiple fields of
selectable length. The atomic add is done independently on each one of this
fields. A bit set in the field_boundary parameter specifies the field
boundaries. The pseudo code below describes the operation:
| bit_adder(ci, b1, b2, *co)
| {
| value = ci + b1 + b2
| *co = !!(value & 2)
|
| return value & 1
| }
|
| #define MASK_IS_SET(mask, attr) (!!((mask)&(attr)))
| bit_position = 1
| carry = 0
| atomic_response = 0
|
| for i = 0 to 63
| {
| if ( i != 0 )
| bit_position = bit_position << 1
|
| bit_add_res = bit_adder(carry, MASK_IS_SET(*va, bit_position), MASK_IS_SET(compare_add, bit_position), &new_carry)
| if (bit_add_res)
| atomic_response |= bit_position
|
| carry = ((new_carry) && (!MASK_IS_SET(compare_add_mask, bit_position)))
| }
|
| return atomic_response
Signed-off-by: Vladimir Sokolovsky <vlad-VPRAkNaXOzVS1MOuV/RT9w@public.gmane.org>
---
include/rdma/ib_verbs.h | 7 +++++++
1 files changed, 7 insertions(+), 0 deletions(-)
diff --git a/include/rdma/ib_verbs.h b/include/rdma/ib_verbs.h
index 09509ed..8ef6858 100644
--- a/include/rdma/ib_verbs.h
+++ b/include/rdma/ib_verbs.h
@@ -136,6 +136,7 @@ struct ib_device_attr {
int max_qp_init_rd_atom;
int max_ee_init_rd_atom;
enum ib_atomic_cap atomic_cap;
+ enum ib_atomic_cap masked_atomic_cap;
int max_ee;
int max_rdd;
int max_mw;
@@ -467,6 +468,8 @@ enum ib_wc_opcode {
IB_WC_LSO,
IB_WC_LOCAL_INV,
IB_WC_FAST_REG_MR,
+ IB_WC_MASKED_COMP_SWAP,
+ IB_WC_MASKED_FETCH_ADD,
/*
* Set value of IB_WC_RECV so consumers can test if a completion is a
* receive by testing (opcode & IB_WC_RECV).
@@ -689,6 +692,8 @@ enum ib_wr_opcode {
IB_WR_RDMA_READ_WITH_INV,
IB_WR_LOCAL_INV,
IB_WR_FAST_REG_MR,
+ IB_WR_MASKED_ATOMIC_CMP_AND_SWP,
+ IB_WR_MASKED_ATOMIC_FETCH_AND_ADD,
};
enum ib_send_flags {
@@ -731,6 +736,8 @@ struct ib_send_wr {
u64 remote_addr;
u64 compare_add;
u64 swap;
+ u64 compare_add_mask;
+ u64 swap_mask;
u32 rkey;
} atomic;
struct {
--
1.7.0.3
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH V4 1/2] IB/core: Add support for enhanced atomic operations
2010-04-14 14:23 [PATCH V4 1/2] IB/core: Add support for enhanced atomic operations Vladimir Sokolovsky
@ 2010-04-19 8:18 ` Håkon Bugge
[not found] ` <BE945405-03B6-4D5F-8DC8-A7424250BDEC-U0mLk4xYmo8@public.gmane.org>
0 siblings, 1 reply; 3+ messages in thread
From: Håkon Bugge @ 2010-04-19 8:18 UTC (permalink / raw)
To: vlad-LDSdmyG8hGV8YrgS2mwiifqBs+8SCbDb
Cc: rdreier-FYB4Gu1CFyUAvxtiuMwx3w, linux-rdma-u79uwXL29TY76Z2rM5mHXA
On Apr 14, 2010, at 16:23 , Vladimir Sokolovsky wrote:
> The additional operands are carried in the Extended Transport Header
Is this a newly defined ETH which follows the AETH on the wire?
Thanks, Håkon
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH V4 1/2] IB/core: Add support for enhanced atomic operations
[not found] ` <BE945405-03B6-4D5F-8DC8-A7424250BDEC-U0mLk4xYmo8@public.gmane.org>
@ 2010-04-20 13:36 ` Vladimir Sokolovsky
0 siblings, 0 replies; 3+ messages in thread
From: Vladimir Sokolovsky @ 2010-04-20 13:36 UTC (permalink / raw)
To: Håkon Bugge
Cc: rdreier-FYB4Gu1CFyUAvxtiuMwx3w, linux-rdma-u79uwXL29TY76Z2rM5mHXA
Håkon Bugge wrote:
> On Apr 14, 2010, at 16:23 , Vladimir Sokolovsky wrote:
>
>> The additional operands are carried in the Extended Transport Header
>
> Is this a newly defined ETH which follows the AETH on the wire?
>
>
>
> Thanks, Håkon
>
Yes,
Atomic masked Fetch and Add uses first 64 bits to provide the date to add,
and the second 64 bits provide the field boundary:
Swap (or Add) data high [63:32]
Swap (or Add) data low [31:0]
Compare data (or Field boundary) high [63:32]
Compare data (or Field boundary) high [31:0]
Atomic masked Compare and Swap uses:
Swap (or Add) data high [63:32]
Swap (or Add) data low [31:0]
Compare data high [63:32]
Compare data high [31:0]
Swap mask high [63:32]
Swap mask low [31:0]
Compare mask high [63:32]
Compare mask low [31:0]
Regards,
Vladimir
--
To unsubscribe from this list: send the line "unsubscribe linux-rdma" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2010-04-20 13:36 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-04-14 14:23 [PATCH V4 1/2] IB/core: Add support for enhanced atomic operations Vladimir Sokolovsky
2010-04-19 8:18 ` Håkon Bugge
[not found] ` <BE945405-03B6-4D5F-8DC8-A7424250BDEC-U0mLk4xYmo8@public.gmane.org>
2010-04-20 13:36 ` Vladimir Sokolovsky
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox