Use an enum for registration modes used in the Zerocopy API 46/4646/2
authorNitin Bhat <nbhat4@illinois.edu>
Tue, 2 Oct 2018 18:54:11 +0000 (14:54 -0400)
committerNitin Bhat <nbhat4@illinois.edu>
Mon, 3 Dec 2018 20:33:02 +0000 (14:33 -0600)
Previously, the registration modes in Converse/Machine layers
were defined as preprocessor directives (macros). Implementing
them as enums is cleaner and more maintainable. The enum could
be converted to a typed enum following the C->C++ conversion.

Change-Id: Ib01272eb863b36444ba63a02778d80fc65157f77

src/arch/common/conv-mach-common.h

index 40b70da937fe4e8bcbb048a2c258f4aef41090be..ac1644664ff01bc519e2c1b8da10d44a95eb3a59 100644 (file)
@@ -4,33 +4,37 @@
  * converse.h.
  */
 
-/* CMK_BUFFER_REG always registers the buffer by treating network and non-network transfers
- * equally. It avoids an extra small message to register, as done in the case of CMK_BUFFER_UNREG
- */
-#define CMK_BUFFER_REG                 0
+// Enum for registration modes used in the Zerocopy API
+// TODO:Convert to typed enum post C++ conversion
+enum ncpyRegModes {
+  /* CMK_BUFFER_REG always registers the buffer by treating network and non-network transfers
+   * equally. It avoids an extra small message to register, as done in the case of CMK_BUFFER_UNREG
+   */
+  CMK_BUFFER_REG      = 0,
 
-/* CMK_BUFFER_UNREG is the default mode which doesn't register the buffer and avoids
- * non-network registration by registering only when required i.e only when this buffer
- * is involved in an RDMA operation using the network. (either as a source or destination).
- * The registeration on demand is performed by sending a small message to the remote process
- * in order to register the remote buffer. Zerocopy operations using this mode use the inverse
- * operation mechanism, where along with the remote registration, the RDMA operation is performed
- * by the remote process (which is not the initiator) to avoid sending another small message back to
- * the initiator.
- */
-#define CMK_BUFFER_UNREG               1
+  /* CMK_BUFFER_UNREG is the default mode which doesn't register the buffer and avoids
  * non-network registration by registering only when required i.e only when this buffer
  * is involved in an RDMA operation using the network. (either as a source or destination).
  * The registeration on demand is performed by sending a small message to the remote process
  * in order to register the remote buffer. Zerocopy operations using this mode use the inverse
  * operation mechanism, where along with the remote registration, the RDMA operation is performed
  * by the remote process (which is not the initiator) to avoid sending another small message back to
  * the initiator.
  */
+  CMK_BUFFER_UNREG    = 1,
 
-/* CMK_BUFFER_PREREG is a mode that is to be supported in the future. It is intended to allow users
- * to pass buffers allocated through CmiAlloc (which uses mempools on networks requiring explicit
- * registration).
- */
-#define CMK_BUFFER_PREREG              2
+  /* CMK_BUFFER_PREREG is a mode that is to be supported in the future. It is intended to allow users
  * to pass buffers allocated through CmiAlloc (which uses mempools on networks requiring explicit
  * registration).
  */
+  CMK_BUFFER_PREREG   = 2,
 
-/* CMK_BUFFER_NOREG is used in those cases where there is no registration or setting of machine specific
- * information required. It is intended for use cases where the Ncpy objects are created on remote processes
- * to just store basic information about remote buffers without registering them.
- */
-#define CMK_BUFFER_NOREG               3
+  /* CMK_BUFFER_NOREG is used in those cases where there is no registration or setting of machine specific
+   * information required. It is intended for use cases where the Ncpy objects are created on remote processes
+   * to just store basic information about remote buffers without registering them.
+   */
+  CMK_BUFFER_NOREG    = 3
+};
 
 // default of CMK_COMMON_NOCOPY_DIRECT_BYTES assumes no CMA support
 // Refined for lrts layers with CMA support inside lrts-common.h