From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-we0-f177.google.com (mail-we0-f177.google.com [74.125.82.177]) by dpdk.org (Postfix) with ESMTP id 3DF731025 for ; Thu, 24 Apr 2014 09:57:44 +0200 (CEST) Received: by mail-we0-f177.google.com with SMTP id t60so101663wes.22 for ; Thu, 24 Apr 2014 00:57:46 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:message-id:date:from:user-agent:mime-version:to :cc:subject:references:in-reply-to:content-type :content-transfer-encoding; bh=wDTP/L+pJbPRCI7DCDc3zJPm2p/tK+M2R72F47K9pcs=; b=YkDBldc+wG3D+etAqpgXTFrP5gvrnTqR6lKZBuRYujp4vfhgSV2VXXAWmxwhM1YQRN o34K+nW6s1BedTD2qw9YO5Gzz1R6hwaZ5EjDuuBMD+PFW+nUaa5T4HRI0ITN80nTV1ao hrfCiSyYAOys4c08sWKXKVdNAB/I/rfA4d+xisGT77MYTaweuGTxSoIlk8ipn6eGTM4S tVwUNACUe+ctLrppjRLLyrLiC9zYCvZm7KEo7O95fbeoZXbDNn61Cj6Or80RwJzmpptk ZYkTXNMY3y6GeY9bZyaerttxxKJom5oK4CwbOOI77/q9ePqidOxFVtC2moMYU5rgyGW/ Y5Eg== X-Gm-Message-State: ALoCoQm3VjZZrhmOdDD/PvY42Q/K+5xiBmLACwyEjEvOP3cxZ8bF9+X9Mra9a8hZDRXF6ls4ZG4x X-Received: by 10.194.92.177 with SMTP id cn17mr366847wjb.18.1398326266364; Thu, 24 Apr 2014 00:57:46 -0700 (PDT) Received: from alcyon.dev.6wind.com (6wind.net2.nerim.net. [213.41.180.237]) by mx.google.com with ESMTPSA id co9sm5032874wjb.22.2014.04.24.00.57.44 for (version=TLSv1 cipher=ECDHE-RSA-RC4-SHA bits=128/128); Thu, 24 Apr 2014 00:57:45 -0700 (PDT) Message-ID: <5358C3F6.10109@6wind.com> Date: Thu, 24 Apr 2014 09:57:42 +0200 From: David Marchand User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:24.0) Gecko/20100101 Icedove/24.4.0 MIME-Version: 1.0 To: konstantin.ananyev@intel.com References: <2601191342CEEE43887BDE71AB9772580EFA06D2@IRSMSX105.ger.corp.intel.com> In-Reply-To: <2601191342CEEE43887BDE71AB9772580EFA06D2@IRSMSX105.ger.corp.intel.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: "dev@dpdk.org" Subject: Re: [dpdk-dev] [PATCH] ixgbevf jumbo frame issue with DPDK VF] fix for jumbo frame issue with DPDK VF 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: Thu, 24 Apr 2014 07:57:44 -0000 Hello Konstantin, I wanted to have a look at your patch but I can't apply it. It looks like the patch content is broken (see below). Plus the mail subject looks odd to me. Can you resend a fixed patch ? Thanks. -- David Marchand On 04/23/2014 05:39 PM, Ananyev, Konstantin wrote: > When latest Linux ixgbe PF is used, and DPDK VF is used in DPDK application, jumbo frames are not received. > Also - if Linux ixgbe PF has MTU set to 1500 (default), then normal sized packets can be received by DPDK VF. > However, if Linux PF has MTU > 1500, then DPDK VF receives no packets (normal or jumbo). > With ixgbe_mbox_api_10 ixgbe simply didn't allow set VF MTU > 1514 for 82599. > With ixgbe_mbox_ajpi_11 it does, though now, if PF uses jumbo frames, it simply disables RX for all VFs. > So to work with PF ithat using jumbo frames, at startup each VF has to: > 1. negotiate with PF mbox_api_11. > 2. Send to PF SET_LPE message with desired MTU. > Note, that if PF already uses MTU bigger then asked by the VF, then PF wouldn't take any action. > > Signed-off-by: Konstantin Ananyev > --- > lib/librte_pmd_e1000/igb_rxtx.c | 7 ++++- > lib/librte_pmd_ixgbe/ixgbe_ethdev.c | 47 ++++++++++++++++++++++++---------- > lib/librte_pmd_ixgbe/ixgbe_rxtx.c | 4 +++ > 3 files changed, 43 insertions(+), 15 deletions(-) > > diff --git a/lib/librte_pmd_e1000/igb_rxtx.c b/lib/librte_pmd_e1000/igb_rxtx.c index 4608595..1ebe2f5 100644 > --- a/lib/librte_pmd_e1000/igb_rxtx.c > +++ b/lib/librte_pmd_e1000/igb_rxtx.c > @@ -2077,6 +2077,11 @@ eth_igbvf_rx_init(struct rte_eth_dev *dev) > > hw = E1000_DEV_PRIVATE_TO_HW(dev->data->dev_private); > > + /* setup MTU */ > + e1000_rlpml_set_vf(hw, > + (uint16_t)(dev->data->dev_conf.rxmode.max_rx_pkt_len + > + VLAN_TAG_SIZE)); > + > /* Configure and enable each RX queue. */ > rctl_bsize = 0; Here. > dev->rx_pkt_burst = eth_igb_recv_pkts; @@ -2149,7 +2154,7 @@ eth_igbvf_rx_init(struct rte_eth_dev *dev) > rxdctl &= 0xFFF00000; > rxdctl |= (rxq->pthresh & 0x1F); > rxdctl |= ((rxq->hthresh & 0x1F) << 8); > - if (hw->mac.type == e1000_82576) { > + if (hw->mac.type == e1000_vfadapt) { > /* > * Workaround of 82576 VF Erratum > * force set WTHRESH to 1 > diff --git a/lib/librte_pmd_ixgbe/ixgbe_ethdev.c b/lib/librte_pmd_ixgbe/ixgbe_ethdev.c > index a5a7f9a..6dd52d7 100644 > --- a/lib/librte_pmd_ixgbe/ixgbe_ethdev.c > +++ b/lib/librte_pmd_ixgbe/ixgbe_ethdev.c > @@ -808,19 +808,30 @@ eth_ixgbe_dev_init(__attribute__((unused)) struct eth_driver *eth_drv, > return 0; > } > > -static void ixgbevf_get_queue_num(struct ixgbe_hw *hw) > + > +/* > + * Negotiate mailbox API version with the PF. > + * After reset API version is always set to the basic one (ixgbe_mbox_api_10). > + * Then we try to negotiate starting with the most recent one. > + * If all negotiation attempts fail, then we will proceed with > + * the default one (ixgbe_mbox_api_10). > + */ > +static void > +ixgbevf_negotiate_api(struct ixgbe_hw *hw) > { > - /* Traffic classes are not supported by now */ > - unsigned int tcs, tc; > + int32_t i; > > - /* > - * Must let PF know we are at mailbox API version 1.1. > - * Otherwise PF won't answer properly. > - * In case that PF fails to provide Rx/Tx queue number, > - * max_tx_queues and max_rx_queues remain to be 1. > - */ > - if (!ixgbevf_negotiate_api_version(hw, ixgbe_mbox_api_11)) > - ixgbevf_get_queues(hw, &tcs, &tc); > + /* start with highest supported, proceed down */ > + static const enum ixgbe_pfvf_api_rev sup_ver[] = { > + ixgbe_mbox_api_11, > + ixgbe_mbox_api_10, > + }; > + > + for (i = 0; > + i != RTE_DIM(sup_ver) && > + ixgbevf_negotiate_api_version(hw, sup_ver[i]) != 0; > + i++) > + ; > } > > /* > @@ -830,9 +841,11 @@ static int > eth_ixgbevf_dev_init(__attribute__((unused)) struct eth_driver *eth_drv, > struct rte_eth_dev *eth_dev) > { > - struct rte_pci_device *pci_dev; > - struct ixgbe_hw *hw = IXGBE_DEV_PRIVATE_TO_HW(eth_dev->data->dev_private); > int diag; > + uint32_t tc, tcs; > + struct rte_pci_device *pci_dev; > + struct ixgbe_hw *hw = > + IXGBE_DEV_PRIVATE_TO_HW(eth_dev->data->dev_private); > struct ixgbe_vfta * shadow_vfta = > IXGBE_DEV_PRIVATE_TO_VFTA(eth_dev->data->dev_private); > struct ixgbe_hwstrip *hwstrip = > @@ -891,8 +904,11 @@ eth_ixgbevf_dev_init(__attribute__((unused)) struct eth_driver *eth_drv, > return (diag); > } > > + /* negotiate mailbox API version to use with the PF. */ > + ixgbevf_negotiate_api(hw); > + > /* Get Rx/Tx queue count via mailbox, which is ready after reset_hw */ > - ixgbevf_get_queue_num(hw); > + ixgbevf_get_queues(hw, &tcs, &tc); > > /* Allocate memory for storing MAC addresses */ > eth_dev->data->mac_addrs = rte_zmalloc("ixgbevf", ETHER_ADDR_LEN * @@ -2518,6 +2534,9 @@ ixgbevf_dev_start(struct rte_eth_dev *dev) > > hw->mac.ops.reset_hw(hw); > > + /* negotiate mailbox API version to use with the PF. */ > + ixgbevf_negotiate_api(hw); > + > ixgbevf_dev_tx_init(dev); > > /* This can fail when allocating mbufs for descriptor rings */ diff --git a/lib/librte_pmd_ixgbe/ixgbe_rxtx.c b/lib/librte_pmd_ixgbe/ixgbe_rxtx.c > index 55414b9..7930dbd 100644 > --- a/lib/librte_pmd_ixgbe/ixgbe_rxtx.c > +++ b/lib/librte_pmd_ixgbe/ixgbe_rxtx.c > @@ -3594,6 +3594,10 @@ ixgbevf_dev_rx_init(struct rte_eth_dev *dev) > PMD_INIT_FUNC_TRACE(); > hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private); > > + /* setup MTU */ > + ixgbevf_rlpml_set_vf(hw, > + (uint16_t)dev->data->dev_conf.rxmode.max_rx_pkt_len); > + > /* Setup RX queues */ > dev->rx_pkt_burst = ixgbe_recv_pkts; > for (i = 0; i < dev->data->nb_rx_queues; i++) { > -- > 1.7.7 > -- David Marchand