diff --git a/include/villas/nodes/infiniband.h b/include/villas/nodes/infiniband.h index cb7c92555..3061cd727 100644 --- a/include/villas/nodes/infiniband.h +++ b/include/villas/nodes/infiniband.h @@ -36,7 +36,7 @@ #include /* Constants */ -#define META_SIZE 32 +#define META_SIZE 24 #define GRH_SIZE 40 #define META_GRH_SIZE META_SIZE + GRH_SIZE #define CHK_PER_ITER 2048 diff --git a/include/villas/sample.h b/include/villas/sample.h index 0fc8f9b38..0bba02137 100644 --- a/include/villas/sample.h +++ b/include/villas/sample.h @@ -44,6 +44,9 @@ struct pool; /** The length of a sample data portion of a sample datastructure with \p values values in bytes. */ #define SAMPLE_DATA_LENGTH(len) ((len) * sizeof(double)) +/** The number of values in a sample datastructure. */ +#define SAMPLE_NUMBER_OF_VALUES(len) ((len) / sizeof(double)) + /** The offset to the beginning of the data section. */ #define SAMPLE_DATA_OFFSET(smp) ((char *) (smp) + offsetof(struct sample, data)) diff --git a/lib/nodes/infiniband.c b/lib/nodes/infiniband.c index 62b2d7d68..9c6633db0 100644 --- a/lib/nodes/infiniband.c +++ b/lib/nodes/infiniband.c @@ -852,7 +852,7 @@ int ib_read(struct node *n, struct sample *smps[], unsigned cnt, unsigned *relea debug(LOG_IB | 10, "Succesfully posted receive Work Requests"); - // Doesn't start, if wcs == 0 + // Doesn't start if wcs == 0 for (int j = 0; j < wcs; j++) { if ( !( (wc[j].opcode & IBV_WC_RECV) && wc[j].status == IBV_WC_SUCCESS) ) { // Drop all values, we don't know where the error occured @@ -872,11 +872,11 @@ int ib_read(struct node *n, struct sample *smps[], unsigned cnt, unsigned *relea smps[j] = (struct sample *) (wc[j].wr_id); - smps[j]->length = (wc[j].byte_len - correction) / sizeof(double); - + smps[j]->length = SAMPLE_NUMBER_OF_VALUES(wc[j].byte_len - correction); smps[j]->ts.received = ts_receive; smps[j]->flags = (SAMPLE_HAS_TS_ORIGIN | SAMPLE_HAS_TS_RECEIVED | SAMPLE_HAS_SEQUENCE); } + } return read_values; } @@ -922,7 +922,7 @@ int ib_write(struct node *n, struct sample *smps[], unsigned cnt, unsigned *rele // Actual Payload sge[sent][j].addr = (uint64_t) &smps[sent]->data; - sge[sent][j].length = smps[sent]->length*sizeof(double); + sge[sent][j].length = SAMPLE_DATA_LENGTH(smps[sent]->length); sge[sent][j].lkey = mr->lkey; j++;