On Wed, 19 Oct 2016, Iremonger, Bernard wrote: > Hi Scott, > > <snip> > >>>>> Subject: [dpdk-dev] [PATCH] net/ixgbe: fix vlan insert parameter >>>>> type and its use >>>>> >>>>> The final parameter to rte_pmd_ixgbe_set_vf_vlan_insert is uint8_t >>>>> and treated as a binary flag when it needs to be a uint16_t and >>>>> treated as a VLAN id. The data sheet (sect 8.2.3.27.13) describes >>>>> the right most >>>>> 16 bits as the VLAN id that is to be inserted; the >>>>> 16.11 code is accepting only a 1 or 0 thus effectively only >>>>> allowing the VLAN id 1 to be inserted (0 disables the insertion setting). >>>>> >>>>> This patch changes the final parm name to represent the data that is >>>>> being accepted (vlan_id), changes the type to permit all valid VLAN >>>>> ids, and validates the parameter based on the range of 0 to 4095. >>>>> Corresponding changes to prototype and documentation in the .h file. >>>>> >>>>> Fixes: 49e248223e9f71 ("net/ixgbe: add API for VF management") >>>>> >>>>> Signed-off-by: E. Scott Daniels <daniels at research.att.com> >>>>> --- >>>>> drivers/net/ixgbe/ixgbe_ethdev.c | 8 ++++---- >>>>> drivers/net/ixgbe/rte_pmd_ixgbe.h | 9 +++++---- >>>>> 2 files changed, 9 insertions(+), 8 deletions(-) >>>>> >>>>> diff --git a/drivers/net/ixgbe/ixgbe_ethdev.c >>>>> b/drivers/net/ixgbe/ixgbe_ethdev.c >>>>> index 4ca5747..316af73 100644 >>>>> --- a/drivers/net/ixgbe/ixgbe_ethdev.c >>>>> +++ b/drivers/net/ixgbe/ixgbe_ethdev.c >>>>> @@ -4727,7 +4727,7 @@ >> rte_pmd_ixgbe_set_vf_mac_anti_spoof(uint8_t >>>>> port, uint16_t vf, uint8_t on) } >>>>> >>>>> int >>>>> -rte_pmd_ixgbe_set_vf_vlan_insert(uint8_t port, uint16_t vf, uint8_t >>>>> on) >>>>> +rte_pmd_ixgbe_set_vf_vlan_insert(uint8_t port, uint16_t vf, >>>>> +uint16_t >>>>> +vlan_id) >>>>> { >>>>> struct ixgbe_hw *hw; >>>>> uint32_t ctrl; >>>>> @@ -4742,13 +4742,13 @@ rte_pmd_ixgbe_set_vf_vlan_insert(uint8_t >>>> port, >>>>> uint16_t vf, uint8_t on) >>>>> if (vf >= dev_info.max_vfs) >>>>> return -EINVAL; >>>>> >>>>> - if (on > 1) >>>>> + if (vlan_id > 4095) >>>>> return -EINVAL; >>>>> >>>>> hw = IXGBE_DEV_PRIVATE_TO_HW(dev->data->dev_private); >>>>> ctrl = IXGBE_READ_REG(hw, IXGBE_VMVIR(vf)); >>>>> - if (on) { >>>>> - ctrl = on; >>>>> + if (vlan_id) { >>>>> + ctrl = vlan_id; >>>> I believe this patch is a good idea of an enhancement. But you cannot >>>> leverage the existing code like this. >>>> The register IXGBE_VMVIR is only for enable/disable. We cannot write >>>> the VLAN ID into it. >>>> If you want to merge the 2 things, enabling/disabling and setting >>>> VLAN ID together. I think we need a totally new implementation. So >> NACK. >>> >>> Reading the 82599 data sheet (sect 8.2.3.27.13), the change from Scott is >> correct. >>> The NACK is not correct. >>> >>> However changing the API means that where it is called needs to be >> changed too. >>> It is called at present from app/testpmd/cmdline.c line 4731. >>> >>> >> Bernard, >> Should I add this change to the patch? (Didn't occur to me to look for use). >> >> Scott > > No, it would be better to make the testpmd change in a separate patch, and > send a v2 patchset with two patches. > Will do, thanks. New to the patch world, so I appreciate your patience!
Scott > >>>>> ctrl |= IXGBE_VMVIR_VLANA_DEFAULT; >>>>> } else { >>>>> ctrl = 0; >>>>> diff --git a/drivers/net/ixgbe/rte_pmd_ixgbe.h >>>>> b/drivers/net/ixgbe/rte_pmd_ixgbe.h >>>>> index 2fdf530..c2fb826 100644 >>>>> --- a/drivers/net/ixgbe/rte_pmd_ixgbe.h >>>>> +++ b/drivers/net/ixgbe/rte_pmd_ixgbe.h >>>>> @@ -99,16 +99,17 @@ int >> rte_pmd_ixgbe_set_vf_mac_anti_spoof(uint8_t >>>>> port, uint16_t vf, uint8_t on); >>>>> * The port identifier of the Ethernet device. >>>>> * @param vf >>>>> * ID specifying VF. >>>>> - * @param on >>>>> - * 1 - Enable VF's vlan insert. >>>>> - * 0 - Disable VF's vlan insert >>>>> + * @param vlan_id >>>>> + * 0 - Disable VF's vlan insert. >>>>> + * n - Enable; n is inserted as the vlan id. >>>>> * >>>>> * @return >>>>> * - (0) if successful. >>>>> * - (-ENODEV) if *port* invalid. >>>>> * - (-EINVAL) if bad parameter. >>>>> */ >>>>> -int rte_pmd_ixgbe_set_vf_vlan_insert(uint8_t port, uint16_t vf, >>>>> uint8_t on); >>>>> +int rte_pmd_ixgbe_set_vf_vlan_insert(uint8_t port, uint16_t vf, >>>>> + uint16_t vlan_id); >>>>> >>>>> /** >>>>> * Enable/Disable tx loopback >>>>> -- >>>>> 1.9.1 > > Regards, > > Bernard. > >