DPDK patches and discussions
 help / color / mirror / Atom feed
From: David Marchand <david.marchand@6wind.com>
To: konstantin.ananyev@intel.com
Cc: "dev@dpdk.org" <dev@dpdk.org>
Subject: Re: [dpdk-dev] [PATCH] ixgbevf jumbo frame issue with DPDK VF] fix for jumbo frame issue with DPDK VF
Date: Thu, 24 Apr 2014 09:57:42 +0200	[thread overview]
Message-ID: <5358C3F6.10109@6wind.com> (raw)
In-Reply-To: <2601191342CEEE43887BDE71AB9772580EFA06D2@IRSMSX105.ger.corp.intel.com>

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 <konstantin.ananyev@intel.com>
> ---
>   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

      reply	other threads:[~2014-04-24  7:57 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-04-23 15:39 Ananyev, Konstantin
2014-04-24  7:57 ` David Marchand [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=5358C3F6.10109@6wind.com \
    --to=david.marchand@6wind.com \
    --cc=dev@dpdk.org \
    --cc=konstantin.ananyev@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).