Commit 9c8435b6 authored by John Barnard's avatar John Barnard Committed by Jim Harris
Browse files

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: default avatarJohn 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: default avatarSPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: default avatarJim Harris <james.r.harris@intel.com>
Reviewed-by: default avatarBen Walker <benjamin.walker@intel.com>
parent ec1f4258
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -516,6 +516,7 @@ struct spdk_ring;
enum spdk_ring_type {
	SPDK_RING_TYPE_SP_SC,		/* Single-producer, single-consumer */
	SPDK_RING_TYPE_MP_SC,		/* Multi-producer, single-consumer */
	SPDK_RING_TYPE_MP_MC,		/* Multi-producer, multi-consumer */
};

/**
+7 −4
Original line number Diff line number Diff line
@@ -366,6 +366,9 @@ spdk_ring_create(enum spdk_ring_type type, size_t count, int socket_id)
	case SPDK_RING_TYPE_MP_SC:
		flags = RING_F_SC_DEQ;
		break;
	case SPDK_RING_TYPE_MP_MC:
		flags = 0;
		break;
	default:
		return NULL;
	}
@@ -393,14 +396,14 @@ spdk_ring_enqueue(struct spdk_ring *ring, void **objs, size_t count)
{
	int rc;
#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) {
		return count;
	}

	return 0;
#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;
#endif
}
@@ -409,8 +412,8 @@ size_t
spdk_ring_dequeue(struct spdk_ring *ring, void **objs, size_t count)
{
#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
	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
}