env: Fix spdk_ring creation and access.
The spdk_ring creation does not support "multi-producer/multi-consumer" type and does not honor all of the types during enqueue/dequeue operations. - Add SPDK_RING_TYPE_MC and update spdk_ring_create() to support it. - Update spdk_ring_enqueue() to call rte_ring_enqueue_bulk() instead of rte_ring_mp_enqueue_bulk(). - Update spdk_ring_dequeue() to call rte_ring_dequeue_burst() instead of rte_ring_mp_dequeue_burst(). Change-Id: I15219513f9c45a8ec8a0af19cdc35428ba728454 Signed-off-by: John Barnard <john.barnard@broadcom.com> Reviewed-on: https://review.gerrithub.io/426143 Chandler-Test-Pool: SPDK Automated Test System <sys_sgsw@intel.com> Tested-by: SPDK CI Jenkins <sys_sgci@intel.com> Reviewed-by: Jim Harris <james.r.harris@intel.com> Reviewed-by: Ben Walker <benjamin.walker@intel.com>
This commit is contained in:
parent
ec1f425841
commit
9c8435b649
@ -516,6 +516,7 @@ struct spdk_ring;
|
|||||||
enum spdk_ring_type {
|
enum spdk_ring_type {
|
||||||
SPDK_RING_TYPE_SP_SC, /* Single-producer, single-consumer */
|
SPDK_RING_TYPE_SP_SC, /* Single-producer, single-consumer */
|
||||||
SPDK_RING_TYPE_MP_SC, /* Multi-producer, single-consumer */
|
SPDK_RING_TYPE_MP_SC, /* Multi-producer, single-consumer */
|
||||||
|
SPDK_RING_TYPE_MP_MC, /* Multi-producer, multi-consumer */
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -366,6 +366,9 @@ spdk_ring_create(enum spdk_ring_type type, size_t count, int socket_id)
|
|||||||
case SPDK_RING_TYPE_MP_SC:
|
case SPDK_RING_TYPE_MP_SC:
|
||||||
flags = RING_F_SC_DEQ;
|
flags = RING_F_SC_DEQ;
|
||||||
break;
|
break;
|
||||||
|
case SPDK_RING_TYPE_MP_MC:
|
||||||
|
flags = 0;
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
@ -393,14 +396,14 @@ spdk_ring_enqueue(struct spdk_ring *ring, void **objs, size_t count)
|
|||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
#if RTE_VERSION < RTE_VERSION_NUM(17, 5, 0, 0)
|
#if RTE_VERSION < RTE_VERSION_NUM(17, 5, 0, 0)
|
||||||
rc = rte_ring_mp_enqueue_bulk((struct rte_ring *)ring, objs, count);
|
rc = rte_ring_enqueue_bulk((struct rte_ring *)ring, objs, count);
|
||||||
if (rc == 0) {
|
if (rc == 0) {
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
#else
|
#else
|
||||||
rc = rte_ring_mp_enqueue_bulk((struct rte_ring *)ring, objs, count, NULL);
|
rc = rte_ring_enqueue_bulk((struct rte_ring *)ring, objs, count, NULL);
|
||||||
return rc;
|
return rc;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
@ -409,8 +412,8 @@ size_t
|
|||||||
spdk_ring_dequeue(struct spdk_ring *ring, void **objs, size_t count)
|
spdk_ring_dequeue(struct spdk_ring *ring, void **objs, size_t count)
|
||||||
{
|
{
|
||||||
#if RTE_VERSION < RTE_VERSION_NUM(17, 5, 0, 0)
|
#if RTE_VERSION < RTE_VERSION_NUM(17, 5, 0, 0)
|
||||||
return rte_ring_sc_dequeue_burst((struct rte_ring *)ring, objs, count);
|
return rte_ring_dequeue_burst((struct rte_ring *)ring, objs, count);
|
||||||
#else
|
#else
|
||||||
return rte_ring_sc_dequeue_burst((struct rte_ring *)ring, objs, count, NULL);
|
return rte_ring_dequeue_burst((struct rte_ring *)ring, objs, count, NULL);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user