From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by dpdk.org (Postfix) with ESMTP id 1FF0E5927 for ; Mon, 20 Apr 2015 12:32:07 +0200 (CEST) Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga101.fm.intel.com with ESMTP; 20 Apr 2015 03:32:06 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.11,609,1422950400"; d="scan'208";a="716223208" Received: from irsmsx106.ger.corp.intel.com ([163.33.3.31]) by orsmga002.jf.intel.com with ESMTP; 20 Apr 2015 03:32:06 -0700 Received: from irsmsx105.ger.corp.intel.com ([169.254.7.2]) by IRSMSX106.ger.corp.intel.com ([169.254.8.140]) with mapi id 14.03.0224.002; Mon, 20 Apr 2015 11:32:05 +0100 From: "Ananyev, Konstantin" To: "Richardson, Bruce" , "dev@dpdk.org" , "Wiles, Keith" Thread-Topic: [dpdk-dev] [RFC PATCH 3/4] add support for a ring to be a pktdev Thread-Index: AQHQeSGaDEunHdzry0qUOqEiiAHOV51VtvMw Date: Mon, 20 Apr 2015 10:32:04 +0000 Message-ID: <2601191342CEEE43887BDE71AB97725821416F06@irsmsx105.ger.corp.intel.com> References: <1428954274-26944-1-git-send-email-keith.wiles@intel.com> <1429283804-28087-1-git-send-email-bruce.richardson@intel.com> <1429283804-28087-4-git-send-email-bruce.richardson@intel.com> In-Reply-To: <1429283804-28087-4-git-send-email-bruce.richardson@intel.com> Accept-Language: en-IE, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [163.33.239.181] Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Subject: Re: [dpdk-dev] [RFC PATCH 3/4] add support for a ring to be a pktdev X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: patches and discussions about DPDK List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 20 Apr 2015 10:32:08 -0000 Hi Bruce, > -----Original Message----- > From: dev [mailto:dev-bounces@dpdk.org] On Behalf Of Bruce Richardson > Sent: Friday, April 17, 2015 4:17 PM > To: dev@dpdk.org; Wiles, Keith > Subject: [dpdk-dev] [RFC PATCH 3/4] add support for a ring to be a pktdev >=20 > Add a new public API function, and two internal wrapper functions so we > can use ring as a pktdev. > --- > lib/librte_ring/rte_ring.c | 41 ++++++++++++++++++++++++++++++++++++++++= + > lib/librte_ring/rte_ring.h | 3 +++ > 2 files changed, 44 insertions(+) >=20 > diff --git a/lib/librte_ring/Makefile b/lib/librte_ring/Makefile > index 84ad3d3..bc5dd09 100644 > --- a/lib/librte_ring/Makefile > +++ b/lib/librte_ring/Makefile > @@ -47,6 +47,6 @@ SRCS-$(CONFIG_RTE_LIBRTE_RING) :=3D rte_ring.c > SYMLINK-$(CONFIG_RTE_LIBRTE_RING)-include :=3D rte_ring.h >=20 > # this lib needs eal and rte_malloc > -DEPDIRS-$(CONFIG_RTE_LIBRTE_RING) +=3D lib/librte_eal lib/librte_malloc > +DEPDIRS-$(CONFIG_RTE_LIBRTE_RING) +=3D lib/librte_eal lib/librte_malloc = lib/librte_pktdev >=20 > include $(RTE_SDK)/mk/rte.lib.mk > diff --git a/lib/librte_ring/rte_ring.c b/lib/librte_ring/rte_ring.c > index c9e59d4..424da20 100644 > --- a/lib/librte_ring/rte_ring.c > +++ b/lib/librte_ring/rte_ring.c > @@ -86,6 +86,7 @@ > #include > #include > #include > +#include I don't think it is a good idea to make rte_ring dependent on rte_pktdev (o= r rte_ethdev). =20 If we'd like to have pkt (or eth) device based on rte_ring, why not to crea= te librte_pmd_ring and put all that stuff there? =20 Konstantin >=20 > #include "rte_ring.h" >=20 > @@ -208,6 +208,47 @@ rte_ring_create(const char *name, unsigned count, in= t socket_id, > return r; > } >=20 > +static uint16_t > +dev_rx(void *r, struct rte_mbuf **pkts, uint16_t max_pkts) > +{ > + return rte_ring_dequeue_burst(r, (void *)pkts, max_pkts); > +} > + > +static uint16_t > +dev_tx(void *r, struct rte_mbuf **pkts, uint16_t max_pkts) > +{ > + return rte_ring_enqueue_burst(r, (void *)pkts, max_pkts); > +} > + > +#define rte_ring_dev_data rte_pkt_dev_data > + > +struct rte_pkt_dev * > +rte_ring_get_dev(struct rte_ring *r) > +{ > + struct ring_as_pktdev { > + RTE_PKT_DEV_HDR(rte_ring_dev); > + struct rte_ring_dev_data dev_data; > + void *ring; > + } *p; > + if (r =3D=3D NULL || > + (p =3D rte_zmalloc(NULL, sizeof(*p), 0)) =3D=3D NULL) > + return NULL; > + > + p->ring =3D r; > + p->rx_pkt_burst =3D dev_rx; > + p->tx_pkt_burst =3D dev_tx; > + p->data =3D &p->dev_data; > + > + snprintf(p->dev_data.name, sizeof(p->dev_data.name), "%s", r->name); > + p->dev_data.nb_rx_queues =3D 1; > + p->dev_data.nb_tx_queues =3D 1; > + p->dev_data.rx_queues =3D &p->ring; > + p->dev_data.tx_queues =3D &p->ring; > + > + return (void *)p; > +} > + > + > /* > * change the high water mark. If *count* is 0, water marking is > * disabled > diff --git a/lib/librte_ring/rte_ring.h b/lib/librte_ring/rte_ring.h > index af68888..c2f28be 100644 > --- a/lib/librte_ring/rte_ring.h > +++ b/lib/librte_ring/rte_ring.h > @@ -301,6 +302,10 @@ int rte_ring_init(struct rte_ring *r, const char *na= me, unsigned count, > struct rte_ring *rte_ring_create(const char *name, unsigned count, > int socket_id, unsigned flags); >=20 > +struct rte_pkt_dev; > + > +struct rte_pkt_dev *rte_ring_get_dev(struct rte_ring *r); > + > /** > * Change the high water mark. > * > -- > 2.1.0