static int verbose = 0;
static int counters = 0;
static int counters_ok = 0;
+static int fetch_and_add_cap = 0;
+static int cmp_and_swap_cap = 0;
static int query_only = 0;
static int ucm = 0;
static DAT_SOCK_ADDR6 remote;
DAT_IB_EXTENSION_EVENT_DATA *ext_event =
(DAT_IB_EXTENSION_EVENT_DATA *) & event.event_extension_data[0];
+ if (!cmp_and_swap_cap) {
+ printf("\nSkipping CMP and SWAP as it is not supported by HW\n");
+ return 0;
+ }
+
printf("\nDoing CMP and SWAP\n");
/* RMR info already swapped back to host order in connect_ep */
DAT_IB_EXTENSION_EVENT_DATA *ext_event =
(DAT_IB_EXTENSION_EVENT_DATA *) & event.event_extension_data[0];
+ if (!fetch_and_add_cap) {
+ printf("\nSkipping FETCH and ADD as it is not supported by HW\n");
+ return 0;
+ }
+
printf("\nDoing FETCH and ADD\n");
/* RMR info already swapped back to host order in connect_ep */
i, prov_attrs.provider_specific_attr[i].name,
prov_attrs.provider_specific_attr[i].value);
+ if (!strcmp(prov_attrs.provider_specific_attr[i].name, "DAT_IB_CMP_AND_SWAP"))
+ cmp_and_swap_cap = !(strcmp(prov_attrs.provider_specific_attr[i].value, "TRUE"));
+
+ if (!strcmp(prov_attrs.provider_specific_attr[i].name, "DAT_IB_FETCH_AND_ADD"))
+ fetch_and_add_cap = !(strcmp(prov_attrs.provider_specific_attr[i].value, "TRUE"));
+
rc = strcmp(prov_attrs.provider_specific_attr[i].name,
"DAT_COUNTERS");
if (!rc)