From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f47.google.com (mail-wm0-f47.google.com [74.125.82.47]) by dpdk.org (Postfix) with ESMTP id D929858D1 for ; Fri, 30 Jun 2017 16:13:06 +0200 (CEST) Received: by mail-wm0-f47.google.com with SMTP id 62so111540454wmw.1 for ; Fri, 30 Jun 2017 07:13:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=6wind-com.20150623.gappssmtp.com; s=20150623; h=date:from:to:cc:subject:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=whvenEmJi6p/A4R+kNRo5udFdU65GIS3/cFnTf4Ru5o=; b=PvxARVlYRMnSGayqJPUIPbGKQtUg7XQQg5a4xxKdYTuNKE49elWl3EYNFuwviaU1HP CyS2w2Qao2u4CqC0hB7lWBoKfLXRG+T2zyajpeBNgjHSOGyoDEKl6L53uzV5yp4PVc0F OIXGcUXZPtI0FeNZ6UNqwlG6yr2RffLnIcORauNLVtl5T/2AafIpvJ4uYp4FpmdUu2wA 27mXT+SOBhb3O3ijyoafyqMB+20RSHgze6WGbMMeFQmbCZhHyc8IFkaWDEJK6Lkxc8YT DydYM3vKyQNA766rNmBaPtKyO6tXbmTmZXPnB4WteZsQHbsX8Ifgs7GAt/yaXAFMc62J wJxQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=whvenEmJi6p/A4R+kNRo5udFdU65GIS3/cFnTf4Ru5o=; b=UT+s3k/5XW4SOH5rK3YfHd+1XM4TidNZ7Y4sJgMYoYcW9cBfUVe6Ksn8FVUxMhnbxE nRFSBaGzUVvkZlhTfpAcNQRlhstibcHlrAjYTEDTyPXZ+IyaZsGMtRZ3tw86ETBVOVL2 +Y+NmtXCAlw/NGaLH5NGnGF6GKgrw7pasBT2rVRNeqjcP818wWZFuE80uG7ufPdSePPc /gudwqugBbB6xymTvtZVT5DEyaXj48kGWn/+BerSoTHN+caEYgUlMm7vTmhp2s0GdUIE nEbA8aeuXwY2YB34V6JmfW9GSD97NcHGihr+9XH1wSttOR+edDOQk0IEFebrTA9v/CeH OFuA== X-Gm-Message-State: AKS2vOweFIO3USL6kj35110xGXPvHSFgVIQSAfPp+BzZLou0Ex9/mrCf 7iUa/7WMSu+lRMcg X-Received: by 10.28.35.201 with SMTP id j192mr15128868wmj.26.1498831985236; Fri, 30 Jun 2017 07:13:05 -0700 (PDT) Received: from platinum (2a01cb0c03c651000226b0fffeed02fc.ipv6.abo.wanadoo.fr. [2a01:cb0c:3c6:5100:226:b0ff:feed:2fc]) by smtp.gmail.com with ESMTPSA id c55sm7730230wrc.7.2017.06.30.07.13.04 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Fri, 30 Jun 2017 07:13:05 -0700 (PDT) Date: Fri, 30 Jun 2017 16:13:02 +0200 From: Olivier Matz To: Santosh Shukla Cc: dev@dpdk.org, hemant.agrawal@nxp.com, jerin.jacob@caviumnetworks.com Message-ID: <20170630161302.1c11ca46@platinum> In-Reply-To: <20170601080559.10684-3-santosh.shukla@caviumnetworks.com> References: <20170601080559.10684-1-santosh.shukla@caviumnetworks.com> <20170601080559.10684-3-santosh.shukla@caviumnetworks.com> X-Mailer: Claws Mail 3.14.1 (GTK+ 2.24.31; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Subject: Re: [dpdk-dev] [PATCH 2/2] ether/ethdev: Allow pmd to advertise preferred pool capability X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.15 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 30 Jun 2017 14:13:07 -0000 On Thu, 1 Jun 2017 13:35:59 +0530, Santosh Shukla wrote: > Platform with two different NICs like external PCI NIC and > Integrated NIC, May want to use their preferred pool handle. > Right now there is no way that two different NICs on same board, > Could use their choice of a pool. > Both NICs forced to use same pool, Which is statically configured > by setting CONFIG_RTE_MEMPOOL_DEFAULT_OPS=. > > So Introducing get_preferred_pool() API. Which allows PMD driver > to advertise their pool capability to Application. > Based on that hint, Application creates separate pool for > That driver. > > Signed-off-by: Santosh Shukla > --- > lib/librte_ether/rte_ethdev.c | 16 ++++++++++++++++ > lib/librte_ether/rte_ethdev.h | 21 +++++++++++++++++++++ > lib/librte_ether/rte_ether_version.map | 7 +++++++ > 3 files changed, 44 insertions(+) > > diff --git a/lib/librte_ether/rte_ethdev.c b/lib/librte_ether/rte_ethdev.c > index 83898a8f7..4068a05b1 100644 > --- a/lib/librte_ether/rte_ethdev.c > +++ b/lib/librte_ether/rte_ethdev.c > @@ -3472,3 +3472,19 @@ rte_eth_dev_l2_tunnel_offload_set(uint8_t port_id, > -ENOTSUP); > return (*dev->dev_ops->l2_tunnel_offload_set)(dev, l2_tunnel, mask, en); > } > + > +int > +rte_eth_dev_get_preferred_pool(uint8_t port_id, const char *pool) > +{ > + struct rte_eth_dev *dev; > + > + RTE_ETH_VALID_PORTID_OR_ERR_RET(port_id, -ENODEV); > + > + dev = &rte_eth_devices[port_id]; > + > + if (*dev->dev_ops->get_preferred_pool == NULL) { > + pool = RTE_MBUF_DEFAULT_MEMPOOL_OPS; > + return 0; > + } > + return (*dev->dev_ops->get_preferred_pool)(dev, pool); > +} Instead of this, what about: /* * Return values: * - -ENOTSUP: error, pool type is not supported * - on success, return the priority of the mempool (0 = highest) */ int rte_eth_dev_pool_ops_supported(uint8_t port_id, const char *pool) By default, always return 0 (i.e. all pools are supported). With this API, we can announce several supported pools (not only one preferred), and order them by preference. I also wonder if we should use a ops_index instead of a pool name for the second argument. > diff --git a/lib/librte_ether/rte_ethdev.h b/lib/librte_ether/rte_ethdev.h > index 0f38b45f8..8e5b06af7 100644 > --- a/lib/librte_ether/rte_ethdev.h > +++ b/lib/librte_ether/rte_ethdev.h > @@ -1381,6 +1381,10 @@ typedef int (*eth_l2_tunnel_offload_set_t) > uint8_t en); > /**< @internal enable/disable the l2 tunnel offload functions */ > > +typedef int (*eth_get_preferred_pool_t)(struct rte_eth_dev *dev, > + const char *pool); > +/**< @internal Get preferred pool handler for a device */ > + > #ifdef RTE_NIC_BYPASS > > enum { > @@ -1573,6 +1577,8 @@ struct eth_dev_ops { > /**< Get extended device statistic values by ID. */ > eth_xstats_get_names_by_id_t xstats_get_names_by_id; > /**< Get name of extended device statistics by ID. */ > + eth_get_preferred_pool_t get_preferred_pool; > + /**< Get preferred pool handler for a device */ > }; > > /** > @@ -4607,6 +4613,21 @@ rte_eth_dev_get_port_by_name(const char *name, uint8_t *port_id); > int > rte_eth_dev_get_name_by_port(uint8_t port_id, char *name); > > +/** > + * Get preferred pool handle for a device > + * > + * @param port_id > + * port identifier of the device > + * @param [out] pool > + * Preferred pool handle for this device. > + * Pool len shouldn't more than 256B. Allocated by pmd driver. [out] ?? I don't get why it is allocated by the driver > + * @return > + * - (0) if successful. > + * - (-EINVAL) on failure. > + */ > +int > +rte_eth_dev_get_preferred_pool(uint8_t port_id, const char *pool); > + > #ifdef __cplusplus > } > #endif > diff --git a/lib/librte_ether/rte_ether_version.map b/lib/librte_ether/rte_ether_version.map > index d6726bb1b..819fe800e 100644 > --- a/lib/librte_ether/rte_ether_version.map > +++ b/lib/librte_ether/rte_ether_version.map > @@ -156,3 +156,10 @@ DPDK_17.05 { > rte_eth_xstats_get_names_by_id; > > } DPDK_17.02; > + > +DPDK_17.08 { > + global: > + > + rte_eth_dev_get_preferred_pool; > + > +} DPDK_17.05;