]> git.openfabrics.org - ~shefty/librdmacm.git/commitdiff
rsocket: Reserve bits in data transfer message
authorSean Hefty <sean.hefty@intel.com>
Sat, 20 Oct 2012 16:19:22 +0000 (09:19 -0700)
committerSean Hefty <sean.hefty@intel.com>
Sat, 20 Oct 2012 16:19:22 +0000 (09:19 -0700)
rsockets includes the length of a data transfer in the
immediate data.  Currently 29 bits are reserved for the
length, but the maximum transfer is currently capped
at 64K.  For future expansion, limit the length field
to 17 bits and reserve the other 12.

The interpretation of the 17 bits is modified as follows.
The lower 16 bits indicate a length.  If the upper bit is
0, then the lower 16 bits indicate a transfer size in bytes.
If the upper bit is 1, the the total transfer size is
calculated as (size carried in bits 0-15 + 1) * 64 KB.

This is backwards compatible with the current implementation,
allows for transfers up to 4 GB, and provides us some
additional bits for future use.

Signed-off-by: Sean Hefty <sean.hefty@intel.com>
src/rsocket.c

index cc5effe1aba45a9b560cf786c5272055ee8e51d1..fc21ce9154349e3ae57c5b13a8ca65647963843c 100644 (file)
@@ -54,6 +54,7 @@
 #include "indexer.h"
 
 #define RS_OLAP_START_SIZE 2048
+/* Data transfers over 64 KB not supported at this time */
 #define RS_MAX_TRANSFER 65536
 #define RS_QP_MAX_SIZE 0xFFFE
 #define RS_QP_CTRL_SIZE 4
@@ -76,7 +77,11 @@ static uint32_t polling_time = 10;
  * bit 29: more data, 0 - end of transfer, 1 - more data available
  *
  * for data transfers:
- * bits [28:0]: bytes transfered, 0 = 1 GB
+ * bits [28:17]: reserved
+ * bit  [16]: scaling factor for lower 16 bits
+ *            0 - length is in bytes, total transfer = length bytes
+ *            1 - length is in 64KB increments, transfer = (length + 1) & 64 KB
+ * bits [15:0] length of transfered
  * for control messages:
  * bits [28-0]: receive credits granted
  */