void ARMCIX_DCMF_RecvRMWRequest (void * clientdata, const DCQuad * msginfo, unsigned count, unsigned peer, const char * src, unsigned bytes) { ARMCIX_DCMF_RMWRequest_t * info = (ARMCIX_DCMF_RMWRequest_t *) msginfo; /* Initialize the RMW response data */ ARMCIX_DCMF_RMWResponse_t response; response.op = info->op; response.ploc = info->ploc; response.active = info->active; //fprintf (stderr, "ARMCIX_DCMF_RecvRMWRequest() - info->op == %d, info->ploc == %p, info->prem == %p, info->extra == %d, peer == %d\n", info->op, info->ploc, info->prem, info->extra, peer); switch (info->op) { case ARMCI_FETCH_AND_ADD: case ARMCI_SWAP: response.ival = *((int *) info->prem); break; case ARMCI_FETCH_AND_ADD_LONG: case ARMCI_SWAP_LONG: response.lval = *((long *) info->prem); break; default: armci_die("rmw: operation not supported",info->op); break; } /* Send the rmw response. */ DCMF_Control (&__rmw_response_protocol, DCMF_SEQUENTIAL_CONSISTENCY, peer, (DCMF_Control_t *) &response); /* Perform the swap or add */ switch (info->op) { case ARMCI_FETCH_AND_ADD: *((int *) info->prem) += info->extra; break; case ARMCI_FETCH_AND_ADD_LONG: *((long *) info->prem) += info->extra; break; case ARMCI_SWAP: *((int *) info->prem) = info->extra; break; case ARMCI_SWAP_LONG: *((long *) info->prem) = info->extra; break; default: armci_die("rmw: operation not supported",info->op); break; } }
/** * \brief DCMF ARMCI Extention receive short fence request callback * * \see ARMCIX_Fence * \see ARMCIX_AllFence * \see ARMCIX_DCMF_ReceiveFenceAck * \see DCMF_RecvSendShort */ void ARMCIX_DCMF_ReceiveFenceRequest (void * clientdata, const DCQuad * msginfo, unsigned count, unsigned peer, const char * src, unsigned bytes) { DCMF_Callback_t * cb = (DCMF_Callback_t *) msginfo; DCMF_Control_t info; DCMF_Callback_t * ack = (DCMF_Callback_t *) &info; *ack = *cb; DCMF_Control (&__fence_ack_protocol, DCMF_SEQUENTIAL_CONSISTENCY, peer, &info); }