|
1 | 1 | /* |
2 | 2 | * Copyright (c) 2013 Mellanox Technologies, Inc. |
3 | 3 | * All rights reserved. |
| 4 | + * Copyright (c) 2017 ARM, Inc. All rights reserved. |
4 | 5 | * $COPYRIGHT$ |
5 | 6 | * |
6 | 7 | * Additional copyrights may follow |
|
20 | 21 | #include "oshmem/mca/spml/yoda/spml_yoda_getreq.h" |
21 | 22 | #include "opal/mca/btl/btl.h" |
22 | 23 |
|
23 | | -#define SPML_BASE_DO_CMP(res, addr, op, val) \ |
24 | | - switch((op)) { \ |
| 24 | +#define SPML_BASE_DO_CMP(_res, _addr, _op, _val) \ |
| 25 | + switch((_op)) { \ |
25 | 26 | case SHMEM_CMP_EQ: \ |
26 | | - res = *(addr) == (val) ? 1 : 0; \ |
| 27 | + _res = *(_addr) == (_val) ? 1 : 0; \ |
27 | 28 | break; \ |
28 | 29 | case SHMEM_CMP_NE: \ |
29 | | - res = *(addr) != (val) ? 1 : 0; \ |
| 30 | + _res = *(_addr) != (_val) ? 1 : 0; \ |
30 | 31 | break; \ |
31 | 32 | case SHMEM_CMP_GT: \ |
32 | | - res = *(addr) > (val) ? 1 : 0; \ |
| 33 | + _res = *(_addr) > (_val) ? 1 : 0; \ |
33 | 34 | break; \ |
34 | 35 | case SHMEM_CMP_LE: \ |
35 | | - res = *(addr) <= (val) ? 1 : 0; \ |
| 36 | + _res = *(_addr) <= (_val) ? 1 : 0; \ |
36 | 37 | break; \ |
37 | 38 | case SHMEM_CMP_LT: \ |
38 | | - res = *(addr) < (val) ? 1: 0; \ |
| 39 | + _res = *(_addr) < (_val) ? 1 : 0; \ |
39 | 40 | break; \ |
40 | 41 | case SHMEM_CMP_GE: \ |
41 | | - res = *(addr) >= (val) ? 1 : 0; \ |
| 42 | + _res = *(_addr) >= (_val) ? 1 : 0; \ |
42 | 43 | break; \ |
43 | 44 | } |
44 | 45 |
|
45 | | -#define SPML_BASE_DO_WAIT(cond, val, addr, op) \ |
46 | | - do { \ |
47 | | - SPML_BASE_DO_CMP(cond, val,addr,op); \ |
48 | | - opal_progress(); \ |
49 | | - } while (cond == 0) ; |
| 46 | +#define SPML_BASE_DO_WAIT(_res, _addr, _op, _val) \ |
| 47 | + do { \ |
| 48 | + SPML_BASE_DO_CMP(_res, _addr, _op, _val); \ |
| 49 | + if (_res == 0) { \ |
| 50 | + opal_progress(); \ |
| 51 | + } \ |
| 52 | + } while (_res == 0); |
50 | 53 |
|
51 | 54 | /** |
52 | 55 | * Wait for data delivery. |
53 | 56 | * Pool on a variable given in addr until it is not equal to value. |
54 | 57 | */ |
55 | 58 | int mca_spml_base_wait(void* addr, int cmp, void* value, int datatype) |
56 | 59 | { |
57 | | - int *int_addr, int_value; |
58 | | - long *long_addr, long_value; |
59 | | - short *short_addr, short_value; |
60 | | - long long *longlong_addr, longlong_value; |
61 | | - int32_t *int32_addr, int32_value; |
62 | | - int64_t *int64_addr, int64_value; |
| 60 | + volatile int *int_addr; |
| 61 | + volatile long *long_addr; |
| 62 | + volatile short *short_addr; |
| 63 | + volatile long long *longlong_addr; |
| 64 | + volatile int32_t *int32_addr; |
| 65 | + volatile int64_t *int64_addr; |
| 66 | + |
| 67 | + int int_value; |
| 68 | + long long_value; |
| 69 | + short short_value; |
| 70 | + long long longlong_value; |
| 71 | + int32_t int32_value; |
| 72 | + int64_t int64_value; |
| 73 | + |
63 | 74 | ompi_fortran_integer_t *fint_addr, fint_value; |
64 | 75 | ompi_fortran_integer4_t *fint4_addr, fint4_value; |
65 | 76 | ompi_fortran_integer8_t *fint8_addr, fint8_value; |
| 77 | + |
66 | 78 | int res = 0; |
67 | 79 |
|
68 | 80 | switch (datatype) { |
|
0 commit comments