DPDK patches and discussions
 help / color / mirror / Atom feed
From: Ferruh Yigit <ferruh.yigit@intel.com>
To: Xiao Wang <xiao.w.wang@intel.com>, wenzhuo.lu@intel.com
Cc: dev@dpdk.org
Subject: Re: [dpdk-dev] [PATCH 35/39] net/ixgbe/base: hold semaphore for shadow RAM access
Date: Mon, 19 Sep 2016 18:08:27 +0100	[thread overview]
Message-ID: <8b69e0e1-f080-a0fc-a302-744e12e78745@intel.com> (raw)
In-Reply-To: <1472312902-16963-36-git-send-email-xiao.w.wang@intel.com>

On 8/27/2016 4:48 PM, Xiao Wang wrote:
> The semaphore is not being held for complete shadow RAM accesses
> which could result in corruption. Refactor the code so that it is
> possible to hold the semaphore around ixgbe_host_interface_command
> by introducing an unlocked form. This patch also eliminates the
> function ixgbe_read_ee_hostif_data_X550 in favor of the function
> ixgbe_read_ee_hostif_X550 and it now gets both semaphore bits
> at once instead of nesting them. The new arrangement is able to
> get both the management interface and the EEPROM semaphores at the
> same time instead of separately.
> 
> Signed-off-by: Xiao Wang <xiao.w.wang@intel.com>
> ---
>  drivers/net/ixgbe/base/ixgbe_common.c | 106 ++++++++++++++++++++++------------
>  drivers/net/ixgbe/base/ixgbe_common.h |   3 +-
>  drivers/net/ixgbe/base/ixgbe_x550.c   |  57 +++++-------------
>  drivers/net/ixgbe/base/ixgbe_x550.h   |   2 -
>  4 files changed, 88 insertions(+), 80 deletions(-)
> 
> diff --git a/drivers/net/ixgbe/base/ixgbe_common.c b/drivers/net/ixgbe/base/ixgbe_common.c
> index 9776ab9..d31fb81 100644
> --- a/drivers/net/ixgbe/base/ixgbe_common.c
> +++ b/drivers/net/ixgbe/base/ixgbe_common.c
> @@ -1066,7 +1066,7 @@ void ixgbe_set_lan_id_multi_port_pcie(struct ixgbe_hw *hw)
>  	if (hw->device_id == IXGBE_DEV_ID_X550EM_A_SFP) {
>  		hw->eeprom.ops.read(hw, IXGBE_EEPROM_CTRL_4, &ee_ctrl_4);
>  		bus->instance_id = (ee_ctrl_4 & IXGBE_EE_CTRL_4_INST_ID) >>
> -			IXGBE_EE_CTRL_4_INST_ID_SHIFT;
> +				   IXGBE_EE_CTRL_4_INST_ID_SHIFT;
>  	}
>  }
>  
> @@ -2877,7 +2877,7 @@ out:
>   *  advertised settings
>   **/
>  s32 ixgbe_negotiate_fc(struct ixgbe_hw *hw, u32 adv_reg, u32 lp_reg,
> -			      u32 adv_sym, u32 adv_asm, u32 lp_sym, u32 lp_asm)
> +		       u32 adv_sym, u32 adv_asm, u32 lp_sym, u32 lp_asm)
>  {
>  	if ((!(adv_reg)) ||  (!(lp_reg))) {
>  		ERROR_REPORT3(IXGBE_ERROR_UNSUPPORTED,
> @@ -3920,7 +3920,8 @@ s32 ixgbe_set_vfta_generic(struct ixgbe_hw *hw, u32 vlan, u32 vind,
>  	vfta_delta = 1 << (vlan % 32);
>  	vfta = IXGBE_READ_REG(hw, IXGBE_VFTA(regidx));
>  
> -	/* vfta_delta represents the difference between the current value
> +	/*
> +	 * vfta_delta represents the difference between the current value

These whitespace fixes not belong to this patch.
It is good to make cleanups, but these are making noise for real patch,
there are a few more of these in previous patches, perhaps all can be
merged into a cleanup patch?

>  	 * of vfta and the value we want in the register.  Since the diff
>  	 * is an XOR mask we can just update the vfta using an XOR
>  	 */
> @@ -3953,7 +3954,7 @@ vfta_update:
>   *  @vind: VMDq output index that maps queue to VLAN id in VLVFB
>   *  @vlan_on: boolean flag to turn on/off VLAN in VLVF
>   *  @vfta_delta: pointer to the difference between the current value of VFTA
> - * and the desired value
> + *		 and the desired value
>   *  @vfta: the desired value of the VFTA
>   *  @vlvf_bypass: boolean flag indicating updating default pool is okay
>   *
> @@ -3980,6 +3981,7 @@ s32 ixgbe_set_vlvf_generic(struct ixgbe_hw *hw, u32 vlan, u32 vind,
>  	 */
>  	if (!(IXGBE_READ_REG(hw, IXGBE_VT_CTL) & IXGBE_VT_CTL_VT_ENABLE))
>  		return IXGBE_SUCCESS;
> +
>  	vlvf_index = ixgbe_find_vlvf_slot(hw, vlan, vlvf_bypass);
>  	if (vlvf_index < 0)
>  		return vlvf_index;
> @@ -4009,6 +4011,7 @@ s32 ixgbe_set_vlvf_generic(struct ixgbe_hw *hw, u32 vlan, u32 vind,
>  
>  		return IXGBE_SUCCESS;
>  	}
> +
>  	/* If there are still bits set in the VLVFB registers
>  	 * for the VLAN ID indicated we need to see if the
>  	 * caller is requesting that we clear the VFTA entry bit.
> @@ -4413,43 +4416,31 @@ u8 ixgbe_calculate_checksum(u8 *buffer, u32 length)
>  }
>  
>  /**
> - *  ixgbe_host_interface_command - Issue command to manageability block
> + *  ixgbe_hic_unlocked - Issue command to manageability block unlocked
>   *  @hw: pointer to the HW structure
> - *  @buffer: contains the command to write and where the return status will
> - *   be placed
> + *  @buffer: command to write and where the return status will be placed
>   *  @length: length of buffer, must be multiple of 4 bytes
>   *  @timeout: time in ms to wait for command completion
> - *  @return_data: read and return data from the buffer (true) or not (false)
> - *   Needed because FW structures are big endian and decoding of
> - *   these fields can be 8 bit or 16 bit based on command. Decoding
> - *   is not easily understood without making a table of commands.
> - *   So we will leave this up to the caller to read back the data
> - *   in these cases.
>   *
>   *  Communicates with the manageability block. On success return IXGBE_SUCCESS
>   *  else returns semaphore error when encountering an error acquiring
>   *  semaphore or IXGBE_ERR_HOST_INTERFACE_COMMAND when command fails.
> + *
> + *  This function assumes that the IXGBE_GSSR_SW_MNG_SM semaphore is held
> + *  by the caller.
>   **/
> -s32 ixgbe_host_interface_command(struct ixgbe_hw *hw, u32 *buffer,
> -				 u32 length, u32 timeout, bool return_data)
> +s32 ixgbe_hic_unlocked(struct ixgbe_hw *hw, u32 *buffer, u32 length,
> +		       u32 timeout)
>  {
> -	u32 hicr, i, bi, fwsts;
> -	u32 hdr_size = sizeof(struct ixgbe_hic_hdr);
> -	u16 buf_len;
> +	u32 hicr, i, fwsts;
>  	u16 dword_len;
> -	s32 status;
>  
> -	DEBUGFUNC("ixgbe_host_interface_command");
> +	DEBUGFUNC("ixgbe_hic_unlocked");
>  
> -	if (length == 0 || length > IXGBE_HI_MAX_BLOCK_BYTE_LENGTH) {
> +	if (!length || length > IXGBE_HI_MAX_BLOCK_BYTE_LENGTH) {
>  		DEBUGOUT1("Buffer length failure buffersize=%d.\n", length);
>  		return IXGBE_ERR_HOST_INTERFACE_COMMAND;
>  	}
> -	/* Take management host interface semaphore */
> -	status = hw->mac.ops.acquire_swfw_sync(hw, IXGBE_GSSR_SW_MNG_SM);
> -
> -	if (status)
> -		return status;
>  
>  	/* Set bit 9 of FWSTS clearing FW reset indication */
>  	fwsts = IXGBE_READ_REG(hw, IXGBE_FWSTS);
> @@ -4457,17 +4448,15 @@ s32 ixgbe_host_interface_command(struct ixgbe_hw *hw, u32 *buffer,
>  
>  	/* Check that the host interface is enabled. */
>  	hicr = IXGBE_READ_REG(hw, IXGBE_HICR);
> -	if ((hicr & IXGBE_HICR_EN) == 0) {
> +	if (!(hicr & IXGBE_HICR_EN)) {
>  		DEBUGOUT("IXGBE_HOST_EN bit disabled.\n");
> -		status = IXGBE_ERR_HOST_INTERFACE_COMMAND;
> -		goto rel_out;
> +		return IXGBE_ERR_HOST_INTERFACE_COMMAND;
>  	}
>  
>  	/* Calculate length in DWORDs. We must be DWORD aligned */
> -	if ((length % (sizeof(u32))) != 0) {
> +	if (length % sizeof(u32)) {
>  		DEBUGOUT("Buffer length failure, not aligned to dword");
> -		status = IXGBE_ERR_INVALID_ARGUMENT;
> -		goto rel_out;
> +		return IXGBE_ERR_INVALID_ARGUMENT;
>  	}
>  
>  	dword_len = length >> 2;
> @@ -4490,14 +4479,59 @@ s32 ixgbe_host_interface_command(struct ixgbe_hw *hw, u32 *buffer,
>  	}
>  
>  	/* Check command completion */
> -	if ((timeout != 0 && i == timeout) ||
> +	if ((timeout && i == timeout) ||
>  	    !(IXGBE_READ_REG(hw, IXGBE_HICR) & IXGBE_HICR_SV)) {
>  		ERROR_REPORT1(IXGBE_ERROR_CAUTION,
>  			     "Command has failed with no status valid.\n");
> -		status = IXGBE_ERR_HOST_INTERFACE_COMMAND;
> -		goto rel_out;
> +		return IXGBE_ERR_HOST_INTERFACE_COMMAND;
> +	}
> +
> +	return IXGBE_SUCCESS;
> +}
> +
> +/**
> + *  ixgbe_host_interface_command - Issue command to manageability block
> + *  @hw: pointer to the HW structure
> + *  @buffer: contains the command to write and where the return status will
> + *   be placed
> + *  @length: length of buffer, must be multiple of 4 bytes
> + *  @timeout: time in ms to wait for command completion
> + *  @return_data: read and return data from the buffer (true) or not (false)
> + *   Needed because FW structures are big endian and decoding of
> + *   these fields can be 8 bit or 16 bit based on command. Decoding
> + *   is not easily understood without making a table of commands.
> + *   So we will leave this up to the caller to read back the data
> + *   in these cases.
> + *
> + *  Communicates with the manageability block. On success return IXGBE_SUCCESS
> + *  else returns semaphore error when encountering an error acquiring
> + *  semaphore or IXGBE_ERR_HOST_INTERFACE_COMMAND when command fails.
> + **/
> +s32 ixgbe_host_interface_command(struct ixgbe_hw *hw, u32 *buffer,
> +				 u32 length, u32 timeout, bool return_data)
> +{
> +	u32 hdr_size = sizeof(struct ixgbe_hic_hdr);
> +	u16 dword_len;
> +	u16 buf_len;
> +	s32 status;
> +	u32 bi;
> +
> +	DEBUGFUNC("ixgbe_host_interface_command");
> +
> +	if (length == 0 || length > IXGBE_HI_MAX_BLOCK_BYTE_LENGTH) {
> +		DEBUGOUT1("Buffer length failure buffersize=%d.\n", length);
> +		return IXGBE_ERR_HOST_INTERFACE_COMMAND;
>  	}
>  
> +	/* Take management host interface semaphore */
> +	status = hw->mac.ops.acquire_swfw_sync(hw, IXGBE_GSSR_SW_MNG_SM);
> +	if (status)
> +		return status;
> +
> +	status = ixgbe_hic_unlocked(hw, buffer, length, timeout);
> +	if (status)
> +		goto rel_out;
> +
>  	if (!return_data)
>  		goto rel_out;
>  
> @@ -4512,7 +4546,7 @@ s32 ixgbe_host_interface_command(struct ixgbe_hw *hw, u32 *buffer,
>  
>  	/* If there is any thing in data position pull it in */
>  	buf_len = ((struct ixgbe_hic_hdr *)buffer)->buf_len;
> -	if (buf_len == 0)
> +	if (!buf_len)
>  		goto rel_out;
>  
>  	if (length < buf_len + hdr_size) {
> diff --git a/drivers/net/ixgbe/base/ixgbe_common.h b/drivers/net/ixgbe/base/ixgbe_common.h
> index 0545f85..66dd565 100644
> --- a/drivers/net/ixgbe/base/ixgbe_common.h
> +++ b/drivers/net/ixgbe/base/ixgbe_common.h
> @@ -133,7 +133,7 @@ s32 ixgbe_clear_vmdq_generic(struct ixgbe_hw *hw, u32 rar, u32 vmdq);
>  s32 ixgbe_insert_mac_addr_generic(struct ixgbe_hw *hw, u8 *addr, u32 vmdq);
>  s32 ixgbe_init_uta_tables_generic(struct ixgbe_hw *hw);
>  s32 ixgbe_set_vfta_generic(struct ixgbe_hw *hw, u32 vlan,
> -			   u32 vind, bool vlan_on, bool vlvf_bypass);
> +			 u32 vind, bool vlan_on, bool vlvf_bypass);
>  s32 ixgbe_set_vlvf_generic(struct ixgbe_hw *hw, u32 vlan, u32 vind,
>  			   bool vlan_on, u32 *vfta_delta, u32 vfta,
>  			   bool vlvf_bypass);
> @@ -159,6 +159,7 @@ s32 ixgbe_set_fw_drv_ver_generic(struct ixgbe_hw *hw, u8 maj, u8 min,
>  u8 ixgbe_calculate_checksum(u8 *buffer, u32 length);
>  s32 ixgbe_host_interface_command(struct ixgbe_hw *hw, u32 *buffer,
>  				 u32 length, u32 timeout, bool return_data);
> +s32 ixgbe_hic_unlocked(struct ixgbe_hw *, u32 *buffer, u32 length, u32 timeout);
>  
>  void ixgbe_clear_tx_pending(struct ixgbe_hw *hw);
>  
> diff --git a/drivers/net/ixgbe/base/ixgbe_x550.c b/drivers/net/ixgbe/base/ixgbe_x550.c
> index 0cc7a3f..6f4dfd9 100644
> --- a/drivers/net/ixgbe/base/ixgbe_x550.c
> +++ b/drivers/net/ixgbe/base/ixgbe_x550.c
> @@ -3192,13 +3192,13 @@ s32 ixgbe_setup_phy_loopback_x550em(struct ixgbe_hw *hw)
>   *
>   *  Reads a 16 bit word from the EEPROM using the hostif.
>   **/
> -s32 ixgbe_read_ee_hostif_data_X550(struct ixgbe_hw *hw, u16 offset,
> -				   u16 *data)
> +s32 ixgbe_read_ee_hostif_X550(struct ixgbe_hw *hw, u16 offset, u16 *data)
>  {
> -	s32 status;
> +	const u32 mask = IXGBE_GSSR_SW_MNG_SM | IXGBE_GSSR_EEP_SM;
>  	struct ixgbe_hic_read_shadow_ram buffer;
> +	s32 status;
>  
> -	DEBUGFUNC("ixgbe_read_ee_hostif_data_X550");
> +	DEBUGFUNC("ixgbe_read_ee_hostif_X550");
>  	buffer.hdr.req.cmd = FW_READ_SHADOW_RAM_CMD;
>  	buffer.hdr.req.buf_lenh = 0;
>  	buffer.hdr.req.buf_lenl = FW_READ_SHADOW_RAM_LEN;
> @@ -3209,42 +3209,18 @@ s32 ixgbe_read_ee_hostif_data_X550(struct ixgbe_hw *hw, u16 offset,
>  	/* one word */
>  	buffer.length = IXGBE_CPU_TO_BE16(sizeof(u16));
>  
> -	status = ixgbe_host_interface_command(hw, (u32 *)&buffer,
> -					      sizeof(buffer),
> -					      IXGBE_HI_COMMAND_TIMEOUT, false);
> -
> +	status = hw->mac.ops.acquire_swfw_sync(hw, mask);
>  	if (status)
>  		return status;
>  
> -	*data = (u16)IXGBE_READ_REG_ARRAY(hw, IXGBE_FLEX_MNG,
> -					  FW_NVM_DATA_OFFSET);
> -
> -	return 0;
> -}
> -
> -/**
> - *  ixgbe_read_ee_hostif_X550 - Read EEPROM word using a host interface command
> - *  @hw: pointer to hardware structure
> - *  @offset: offset of  word in the EEPROM to read
> - *  @data: word read from the EEPROM
> - *
> - *  Reads a 16 bit word from the EEPROM using the hostif.
> - **/
> -s32 ixgbe_read_ee_hostif_X550(struct ixgbe_hw *hw, u16 offset,
> -			      u16 *data)
> -{
> -	s32 status = IXGBE_SUCCESS;
> -
> -	DEBUGFUNC("ixgbe_read_ee_hostif_X550");
> -
> -	if (hw->mac.ops.acquire_swfw_sync(hw, IXGBE_GSSR_EEP_SM) ==
> -	    IXGBE_SUCCESS) {
> -		status = ixgbe_read_ee_hostif_data_X550(hw, offset, data);
> -		hw->mac.ops.release_swfw_sync(hw, IXGBE_GSSR_EEP_SM);
> -	} else {
> -		status = IXGBE_ERR_SWFW_SYNC;
> +	status = ixgbe_hic_unlocked(hw, (u32 *)&buffer, sizeof(buffer),
> +				    IXGBE_HI_COMMAND_TIMEOUT);
> +	if (!status) {
> +		*data = (u16)IXGBE_READ_REG_ARRAY(hw, IXGBE_FLEX_MNG,
> +						  FW_NVM_DATA_OFFSET);
>  	}
>  
> +	hw->mac.ops.release_swfw_sync(hw, mask);
>  	return status;
>  }
>  
> @@ -3260,6 +3236,7 @@ s32 ixgbe_read_ee_hostif_X550(struct ixgbe_hw *hw, u16 offset,
>  s32 ixgbe_read_ee_hostif_buffer_X550(struct ixgbe_hw *hw,
>  				     u16 offset, u16 words, u16 *data)
>  {
> +	const u32 mask = IXGBE_GSSR_SW_MNG_SM | IXGBE_GSSR_EEP_SM;
>  	struct ixgbe_hic_read_shadow_ram buffer;
>  	u32 current_word = 0;
>  	u16 words_to_read;
> @@ -3269,7 +3246,7 @@ s32 ixgbe_read_ee_hostif_buffer_X550(struct ixgbe_hw *hw,
>  	DEBUGFUNC("ixgbe_read_ee_hostif_buffer_X550");
>  
>  	/* Take semaphore for the entire operation. */
> -	status = hw->mac.ops.acquire_swfw_sync(hw, IXGBE_GSSR_EEP_SM);
> +	status = hw->mac.ops.acquire_swfw_sync(hw, mask);
>  	if (status) {
>  		DEBUGOUT("EEPROM read buffer - semaphore failed\n");
>  		return status;
> @@ -3289,10 +3266,8 @@ s32 ixgbe_read_ee_hostif_buffer_X550(struct ixgbe_hw *hw,
>  		buffer.address = IXGBE_CPU_TO_BE32((offset + current_word) * 2);
>  		buffer.length = IXGBE_CPU_TO_BE16(words_to_read * 2);
>  
> -		status = ixgbe_host_interface_command(hw, (u32 *)&buffer,
> -						      sizeof(buffer),
> -						      IXGBE_HI_COMMAND_TIMEOUT,
> -						      false);
> +		status = ixgbe_hic_unlocked(hw, (u32 *)&buffer, sizeof(buffer),
> +					    IXGBE_HI_COMMAND_TIMEOUT);
>  
>  		if (status) {
>  			DEBUGOUT("Host interface command failed\n");
> @@ -3317,7 +3292,7 @@ s32 ixgbe_read_ee_hostif_buffer_X550(struct ixgbe_hw *hw,
>  	}
>  
>  out:
> -	hw->mac.ops.release_swfw_sync(hw, IXGBE_GSSR_EEP_SM);
> +	hw->mac.ops.release_swfw_sync(hw, mask);
>  	return status;
>  }
>  
> diff --git a/drivers/net/ixgbe/base/ixgbe_x550.h b/drivers/net/ixgbe/base/ixgbe_x550.h
> index c7253f0..36b36f6 100644
> --- a/drivers/net/ixgbe/base/ixgbe_x550.h
> +++ b/drivers/net/ixgbe/base/ixgbe_x550.h
> @@ -55,8 +55,6 @@ s32 ixgbe_read_ee_hostif_buffer_X550(struct ixgbe_hw *hw,
>  				     u16 offset, u16 words, u16 *data);
>  s32 ixgbe_read_ee_hostif_X550(struct ixgbe_hw *hw, u16 offset,
>  u16				*data);
> -s32 ixgbe_read_ee_hostif_data_X550(struct ixgbe_hw *hw, u16 offset,
> -				   u16 *data);
>  s32 ixgbe_write_ee_hostif_data_X550(struct ixgbe_hw *hw, u16 offset,
>  				    u16 data);
>  s32 ixgbe_set_eee_X550(struct ixgbe_hw *hw, bool enable_eee);
> 

  reply	other threads:[~2016-09-19 17:08 UTC|newest]

Thread overview: 107+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-08-27 15:47 [dpdk-dev] [PATCH 00/39] net/ixgbe: base code update Xiao Wang
2016-08-27 15:47 ` [dpdk-dev] [PATCH 01/39] net/ixgbe/base: fix delta check for setting VFTA Xiao Wang
2016-09-19 17:00   ` Ferruh Yigit
2016-09-22 15:58     ` Wang, Xiao W
2016-09-25  8:59   ` [dpdk-dev] [PATCH v2 00/40] net/ixgbe: base code update Xiao Wang
2016-09-25  8:59     ` [dpdk-dev] [PATCH v2 01/40] net/ixgbe/base: fix delta check for setting VFTA Xiao Wang
2016-09-25  8:59     ` [dpdk-dev] [PATCH v2 02/40] net/ixgbe/base: remove X550em SFP iXFI setup Xiao Wang
2016-09-25  8:59     ` [dpdk-dev] [PATCH v2 03/40] net/ixgbe/base: change endianness of PHY data Xiao Wang
2016-09-25  8:59     ` [dpdk-dev] [PATCH v2 04/40] net/ixgbe/base: add X550em_a 10G PHY support Xiao Wang
2016-09-25  8:59     ` [dpdk-dev] [PATCH v2 05/40] net/ixgbe/base: move vf_update_xcast_mode to base code Xiao Wang
2016-09-25  8:59     ` [dpdk-dev] [PATCH v2 06/40] net/ixgbe/base: introduce new ops init functions Xiao Wang
2016-09-25  8:59     ` [dpdk-dev] [PATCH v2 07/40] net/ixgbe/base: separate PHY probe code Xiao Wang
2016-09-25  8:59     ` [dpdk-dev] [PATCH v2 08/40] net/ixgbe/base: fully initialize X550em_a 1G PHYs Xiao Wang
2016-09-25  8:59     ` [dpdk-dev] [PATCH v2 09/40] net/ixgbe/base: add macros for VF promiscuous mode Xiao Wang
2016-09-25  8:59     ` [dpdk-dev] [PATCH v2 10/40] net/ixgbe/base: add FC setup for X550em_a fiber Xiao Wang
2016-09-25  8:59     ` [dpdk-dev] [PATCH v2 11/40] net/ixgbe/base: add FC autoneg " Xiao Wang
2016-09-25  8:59     ` [dpdk-dev] [PATCH v2 12/40] net/ixgbe/base: clear page register in error path Xiao Wang
2016-09-25  8:59     ` [dpdk-dev] [PATCH v2 13/40] net/ixgbe/base: configure DMAC for 10Mb operation Xiao Wang
2016-09-25  8:59     ` [dpdk-dev] [PATCH v2 14/40] net/ixgbe/base: fix function comments about X550 Xiao Wang
2016-09-25  8:59     ` [dpdk-dev] [PATCH v2 15/40] net/ixgbe/base: report setting LPE register error Xiao Wang
2016-09-25  8:59     ` [dpdk-dev] [PATCH v2 16/40] net/ixgbe/base: bump mailbox version Xiao Wang
2016-09-25  8:59     ` [dpdk-dev] [PATCH v2 17/40] net/ixgbe/base: access IOSF by host interface Xiao Wang
2016-09-25  8:59     ` [dpdk-dev] [PATCH v2 18/40] net/ixgbe/base: fix check on NACK Xiao Wang
2016-09-25  8:59     ` [dpdk-dev] [PATCH v2 19/40] net/ixgbe/base: define X550 PCIe serial MAC addr Xiao Wang
2016-09-25  8:59     ` [dpdk-dev] [PATCH v2 20/40] net/ixgbe/base: bypass checking link for crosstalk Xiao Wang
2016-09-25  8:59     ` [dpdk-dev] [PATCH v2 21/40] net/ixgbe/base: support X550em_a SGMII FC autoneg Xiao Wang
2016-09-25  8:59     ` [dpdk-dev] [PATCH v2 22/40] net/ixgbe/base: add macros for GENEVE UDP port Xiao Wang
2016-09-25  9:00     ` [dpdk-dev] [PATCH v2 23/40] net/ixgbe/base: add bound check in LED functions Xiao Wang
2016-09-25  9:00     ` [dpdk-dev] [PATCH v2 24/40] net/ixgbe/base: use default check link function Xiao Wang
2016-09-25  9:00     ` [dpdk-dev] [PATCH v2 25/40] net/ixgbe/base: set default autoneg speed at reset Xiao Wang
2016-09-25  9:00     ` [dpdk-dev] [PATCH v2 26/40] net/ixgbe/base: add missing FDIRSCTPM mask setting Xiao Wang
2016-09-25  9:00     ` [dpdk-dev] [PATCH v2 27/40] net/ixgbe/base: commonize mailbox write and read Xiao Wang
2016-09-25  9:00     ` [dpdk-dev] [PATCH v2 28/40] net/ixgbe/base: reduce delay for SWFW semaphore Xiao Wang
2016-09-25  9:00     ` [dpdk-dev] [PATCH v2 29/40] net/ixgbe/base: report autoneg supported for X550 Xiao Wang
2016-09-25  9:00     ` [dpdk-dev] [PATCH v2 30/40] net/ixgbe/base: remove X550em_a 100Mbps support Xiao Wang
2016-09-25  9:00     ` [dpdk-dev] [PATCH v2 31/40] net/ixgbe/base: unify link speed value Xiao Wang
2016-09-25  9:00     ` [dpdk-dev] [PATCH v2 32/40] net/ixgbe/base: separate ops init from PHY init Xiao Wang
2016-09-25  9:00     ` [dpdk-dev] [PATCH v2 33/40] net/ixgbe/base: add X550em_a FW ALEF support Xiao Wang
2016-09-25  9:00     ` [dpdk-dev] [PATCH v2 34/40] net/ixgbe/base: add two MAC ops for Hyper-V Xiao Wang
2016-09-25  9:00     ` [dpdk-dev] [PATCH v2 35/40] net/ixgbe/base: hold semaphore for shadow RAM access Xiao Wang
2016-09-25  9:00     ` [dpdk-dev] [PATCH v2 36/40] net/ixgbe/base: update X550em_a backplane speed Xiao Wang
2016-09-25  9:00     ` [dpdk-dev] [PATCH v2 37/40] net/ixgbe/base: clean code of flow control autoneg Xiao Wang
2016-09-25  9:00     ` [dpdk-dev] [PATCH v2 38/40] net/ixgbe/base: do not skip PHY configuration Xiao Wang
2016-09-25  9:00     ` [dpdk-dev] [PATCH v2 39/40] net/ixgbe/base: clean up Xiao Wang
2016-09-25  9:00     ` [dpdk-dev] [PATCH v2 40/40] net/ixgbe/base: add base driver update brief Xiao Wang
2016-09-26  2:06     ` [dpdk-dev] [PATCH v2 00/40] net/ixgbe: base code update Lu, Wenzhuo
2016-09-28 15:31       ` Bruce Richardson
2016-08-27 15:47 ` [dpdk-dev] [PATCH 02/39] net/ixgbe/base: remove X550em SFP iXFI setup Xiao Wang
2016-09-19 17:01   ` Ferruh Yigit
2016-08-27 15:47 ` [dpdk-dev] [PATCH 03/39] net/ixgbe/base: change endianness of PHY data Xiao Wang
2016-09-19 17:01   ` Ferruh Yigit
2016-09-25  0:36     ` Wang, Xiao W
2016-08-27 15:47 ` [dpdk-dev] [PATCH 04/39] net/ixgbe/base: add X550em_a 10G PHY support Xiao Wang
2016-08-27 15:47 ` [dpdk-dev] [PATCH 05/39] net/ixgbe/base: support VF multicast promiscuous Xiao Wang
2016-09-19 17:05   ` Ferruh Yigit
2016-09-23  3:35     ` Wang, Xiao W
2016-08-27 15:47 ` [dpdk-dev] [PATCH 06/39] net/ixgbe/base: introduce new ops init functions Xiao Wang
2016-08-27 15:47 ` [dpdk-dev] [PATCH 07/39] net/ixgbe/base: separate PHY probe code Xiao Wang
2016-08-27 15:47 ` [dpdk-dev] [PATCH 08/39] net/ixgbe/base: fully initialize X550em_a 1G PHYs Xiao Wang
2016-08-27 15:47 ` [dpdk-dev] [PATCH 09/39] net/ixgbe/base: add macros for VF promiscuous mode Xiao Wang
2016-08-27 15:47 ` [dpdk-dev] [PATCH 10/39] net/ixgbe/base: add FC setup for X550em_a fiber Xiao Wang
2016-08-27 15:47 ` [dpdk-dev] [PATCH 11/39] net/ixgbe/base: add FC autoneg " Xiao Wang
2016-08-27 15:47 ` [dpdk-dev] [PATCH 12/39] net/ixgbe/base: clear page register in error path Xiao Wang
2016-08-27 15:47 ` [dpdk-dev] [PATCH 13/39] net/ixgbe/base: configure DMAC for 10Mb operation Xiao Wang
2016-08-27 15:47 ` [dpdk-dev] [PATCH 14/39] net/ixgbe/base: fix function comments about X550 Xiao Wang
2016-08-27 15:47 ` [dpdk-dev] [PATCH 15/39] net/ixgbe/base: report setting LPE register error Xiao Wang
2016-08-27 15:47 ` [dpdk-dev] [PATCH 16/39] net/ixgbe/base: bump mailbox version Xiao Wang
2016-09-19 17:03   ` Ferruh Yigit
2016-09-23  3:50     ` Wang, Xiao W
2016-08-27 15:48 ` [dpdk-dev] [PATCH 17/39] net/ixgbe/base: access IOSF by host interface Xiao Wang
2016-09-19 17:04   ` Ferruh Yigit
2016-09-23  5:16     ` Wang, Xiao W
2016-08-27 15:48 ` [dpdk-dev] [PATCH 18/39] net/ixgbe/base: fix check on NACK Xiao Wang
2016-09-19 17:07   ` Ferruh Yigit
2016-09-23  6:05     ` Wang, Xiao W
2016-08-27 15:48 ` [dpdk-dev] [PATCH 19/39] net/ixgbe/base: define X550 PCIe serial MAC addr Xiao Wang
2016-08-27 15:48 ` [dpdk-dev] [PATCH 20/39] net/ixgbe/base: bypass checking link for crosstalk Xiao Wang
2016-08-27 15:48 ` [dpdk-dev] [PATCH 21/39] net/ixgbe/base: support X550em_a SGMII FC autoneg Xiao Wang
2016-08-27 15:48 ` [dpdk-dev] [PATCH 22/39] net/ixgbe/base: add macros for GENEVE UDP port Xiao Wang
2016-08-27 15:48 ` [dpdk-dev] [PATCH 23/39] net/ixgbe/base: add bound check in LED functions Xiao Wang
2016-09-19 17:06   ` Ferruh Yigit
2016-09-22 16:08     ` Wang, Xiao W
2016-08-27 15:48 ` [dpdk-dev] [PATCH 24/39] net/ixgbe/base: use default check link function Xiao Wang
2016-08-27 15:48 ` [dpdk-dev] [PATCH 25/39] net/ixgbe/base: set default autoneg speed at reset Xiao Wang
2016-08-27 15:48 ` [dpdk-dev] [PATCH 26/39] net/ixgbe/base: add missing FDIRSCTPM mask setting Xiao Wang
2016-08-27 15:48 ` [dpdk-dev] [PATCH 27/39] net/ixgbe/base: commonize mailbox write and read Xiao Wang
2016-08-27 15:48 ` [dpdk-dev] [PATCH 28/39] net/ixgbe/base: reduce delay for SWFW semaphore Xiao Wang
2016-08-27 15:48 ` [dpdk-dev] [PATCH 29/39] net/ixgbe/base: report autoneg supported for X550 Xiao Wang
2016-09-19 17:07   ` Ferruh Yigit
2016-09-23  0:59     ` Wang, Xiao W
2016-08-27 15:48 ` [dpdk-dev] [PATCH 30/39] net/ixgbe/base: remove X550em_a 100Mbps support Xiao Wang
2016-08-27 15:48 ` [dpdk-dev] [PATCH 31/39] net/ixgbe/base: unify link speed value Xiao Wang
2016-08-27 15:48 ` [dpdk-dev] [PATCH 32/39] net/ixgbe/base: separate ops init from PHY init Xiao Wang
2016-08-27 15:48 ` [dpdk-dev] [PATCH 33/39] net/ixgbe/base: add X550em_a FW ALEF support Xiao Wang
2016-09-19 17:07   ` Ferruh Yigit
2016-09-22  2:56     ` Lu, Wenzhuo
2016-09-23  6:47       ` Wang, Xiao W
2016-08-27 15:48 ` [dpdk-dev] [PATCH 34/39] net/ixgbe/base: add two MAC ops for Hyper-V Xiao Wang
2016-08-27 15:48 ` [dpdk-dev] [PATCH 35/39] net/ixgbe/base: hold semaphore for shadow RAM access Xiao Wang
2016-09-19 17:08   ` Ferruh Yigit [this message]
2016-09-23  8:06     ` Wang, Xiao W
2016-08-27 15:48 ` [dpdk-dev] [PATCH 36/39] net/ixgbe/base: update X550em_a backplane speed Xiao Wang
2016-08-27 15:48 ` [dpdk-dev] [PATCH 37/39] net/ixgbe/base: clean code of flow control autoneg Xiao Wang
2016-08-27 15:48 ` [dpdk-dev] [PATCH 38/39] net/ixgbe/base: do not skip PHY configuration Xiao Wang
2016-08-27 15:48 ` [dpdk-dev] [PATCH 39/39] net/ixgbe/base: add base driver update brief Xiao Wang
2016-09-19 17:08   ` Ferruh Yigit
2016-09-22  2:55     ` Lu, Wenzhuo

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=8b69e0e1-f080-a0fc-a302-744e12e78745@intel.com \
    --to=ferruh.yigit@intel.com \
    --cc=dev@dpdk.org \
    --cc=wenzhuo.lu@intel.com \
    --cc=xiao.w.wang@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).