libmemif: set data offset for memif buffer
Update descriptor offset based on data pointer in memif_buffer_t. Slave only, master will not modify the descriptor. Type: feature Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com> Change-Id: Ice1e94cec366face650c58df81795f4dea727010
This commit is contained in:

committed by
Damjan Marion

parent
f48de88527
commit
1421748e3c
@ -2492,7 +2492,10 @@ memif_tx_burst (memif_conn_handle_t conn, uint16_t qid,
|
||||
memif_queue_t *mq = &c->tx_queues[qid];
|
||||
memif_ring_t *ring = mq->ring;
|
||||
uint16_t mask = (1 << mq->log2_ring_size) - 1;
|
||||
uint32_t offset_mask = c->run_args.buffer_size - 1;
|
||||
memif_buffer_t *b0;
|
||||
memif_desc_t *d;
|
||||
int64_t data_offset;
|
||||
*tx = 0;
|
||||
int err = MEMIF_ERR_SUCCESS;
|
||||
|
||||
@ -2515,7 +2518,27 @@ memif_tx_burst (memif_conn_handle_t conn, uint16_t qid,
|
||||
err = MEMIF_ERR_INVAL_ARG;
|
||||
goto done;
|
||||
}
|
||||
ring->desc[b0->desc_index & mask].length = b0->len;
|
||||
d = &ring->desc[b0->desc_index & mask];
|
||||
d->length = b0->len;
|
||||
if (!c->args.is_master)
|
||||
{
|
||||
// reset headroom
|
||||
d->offset = d->offset - (d->offset & offset_mask);
|
||||
// calculate offset from user data
|
||||
data_offset = b0->data - (d->offset + c->regions[d->region].addr);
|
||||
if (data_offset != 0)
|
||||
{
|
||||
/* verify data offset */
|
||||
if ((data_offset < 0) ||
|
||||
(data_offset > (d->offset + offset_mask)))
|
||||
{
|
||||
printf ("%ld\n", data_offset);
|
||||
err = MEMIF_ERR_INVAL_ARG;
|
||||
goto done;
|
||||
}
|
||||
d->offset += data_offset;
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef MEMIF_DBG_SHM
|
||||
printf ("offset: %-6d\n", ring->desc[b0->desc_index & mask].offset);
|
||||
@ -2608,7 +2631,7 @@ memif_rx_burst (memif_conn_handle_t conn, uint16_t qid,
|
||||
b0->flags |= MEMIF_BUFFER_FLAG_NEXT;
|
||||
ring->desc[cur_slot & mask].flags &= ~MEMIF_DESC_FLAG_NEXT;
|
||||
}
|
||||
/* b0->offset = ring->desc[cur_slot & mask].offset;*/
|
||||
|
||||
b0->queue = mq;
|
||||
#ifdef MEMIF_DBG_SHM
|
||||
printf ("data: %p\n", b0->data);
|
||||
|
Reference in New Issue
Block a user