55
55
} \
56
56
} while (0)
57
57
58
- static bool opal_datatype_is_accel (void * dest , const void * src ) {
59
- int dev_id ;
60
- uint64_t flags ;
61
- if (opal_accelerator .check_addr (dest , & dev_id , & flags )) {
62
- return true;
63
- }
64
- if (opal_accelerator .check_addr (src , & dev_id , & flags )) {
65
- return true;
66
- }
67
- return false;
68
- }
69
-
70
58
static void * opal_datatype_accelerator_memcpy (void * dest , const void * src , size_t size )
71
59
{
72
60
int res ;
73
- if (!opal_datatype_is_accel (dest , src )) {
61
+ int dev_id ;
62
+ uint64_t flags ;
63
+ /* If accelerator check addr returns an error, we can only
64
+ * assume it is a host buffer. If device buffer checking fails,
65
+ * it's also highly likely that a device copy will fail. The best
66
+ * we can do is fail as this is not a recoverable/ignorable failure
67
+ * and retries are also unlikely to succeed. We identify these
68
+ * buffers as host buffers as attempting a memcpy would provide
69
+ * a chance to succeed. */
70
+ if (0 >= opal_accelerator .check_addr (dest , & dev_id , & flags ) &&
71
+ 0 >= opal_accelerator .check_addr (src , & dev_id , & flags )) {
74
72
return memcpy (dest , src , size );
75
73
}
76
74
res = opal_accelerator .mem_copy (MCA_ACCELERATOR_NO_DEVICE_ID , MCA_ACCELERATOR_NO_DEVICE_ID ,
@@ -85,7 +83,17 @@ static void *opal_datatype_accelerator_memcpy(void *dest, const void *src, size_
85
83
static void * opal_datatype_accelerator_memmove (void * dest , const void * src , size_t size )
86
84
{
87
85
int res ;
88
- if (!opal_datatype_is_accel (dest , src )) {
86
+ int dev_id ;
87
+ uint64_t flags ;
88
+ /* If accelerator check addr returns an error, we can only
89
+ * assume it is a host buffer. If device buffer checking fails,
90
+ * it's also highly likely that a device copy will fail. The best
91
+ * we can do is fail as this is not a recoverable/ignorable failure
92
+ * and retries are also unlikely to succeed. We identify these
93
+ * buffers as host buffers as attempting a memmove would provide
94
+ * a chance to succeed. */
95
+ if (0 >= opal_accelerator .check_addr (dest , & dev_id , & flags ) &&
96
+ 0 >= opal_accelerator .check_addr (src , & dev_id , & flags )) {
89
97
return memmove (dest , src , size );
90
98
}
91
99
res = opal_accelerator .mem_move (MCA_ACCELERATOR_NO_DEVICE_ID , MCA_ACCELERATOR_NO_DEVICE_ID ,
0 commit comments