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:
John Barnard 2018-09-19 16:15:24 -07:00 committed by Jim Harris
parent ec1f425841
commit 9c8435b649
2 changed files with 8 additions and 4 deletions

View File

@ -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 */
}; };
/** /**

View File

@ -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
} }