summary |
shortlog |
log |
commit | commitdiff |
review |
tree
raw |
patch |
inline | side by side (from parent 1:
47e68de)
Fix arithmetic error in memif_refill_queue., where
some of the buffers didn't get properly refilled.
Type: fix
Signed-off-by: Jakub Grajciar <jgrajcia@cisco.com>
Change-Id: I9815a8ac9b899216581452c352e75e2a0454cbce
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_ring_t *ring = mq->ring;
uint16_t mask = (1 << mq->log2_ring_size) - 1;
uint32_t offset_mask = c->run_args.buffer_size - 1;
+ uint16_t slot, counter = 0;
}
uint16_t head = ring->head;
}
uint16_t head = ring->head;
uint16_t ns = (1 << mq->log2_ring_size) - head + mq->last_tail;
uint16_t ns = (1 << mq->log2_ring_size) - head + mq->last_tail;
- head += (count < ns) ? count : ns;
+ count = (count < ns) ? count : ns;
+ while (counter < count)
{
d = &ring->desc[slot & mask];
d->region = 1;
{
d = &ring->desc[slot & mask];
d->region = 1;
else
d->offset = d->offset - (d->offset & offset_mask) + headroom;
slot++;
else
d->offset = d->offset - (d->offset & offset_mask) + headroom;
slot++;
}
MEMIF_MEMORY_BARRIER ();
}
MEMIF_MEMORY_BARRIER ();
return MEMIF_ERR_SUCCESS; /* 0 */
}
return MEMIF_ERR_SUCCESS; /* 0 */
}