• Alexander Duyck's avatar
    ixgbe: Fix bugs in ixgbe_clear_vf_vlans() · ab3a3b7b
    Alexander Duyck authored
    When I had rewritten the code for ixgbe_clear_vf_vlans() it looks like I
    had transitioned back and forth between using word as an offset and using
    word as a register offset.  As a result I honestly don't see how the code
    was working before other than the fact that resetting the VLANs on the VF
    like didn't do much to clear them.
    
    Another issue found is that the mask was using a divide instead of a
    modulus.  As a result the mask bit was incorrectly being set to either bit
    0 or 1 based on the value of the VF being tested.  As a result the wrong
    VFs were having their VLANs cleared if they were enabled.
    
    I have updated the code so that word represents the offset in the array.
    This way we can use the modulus and xor operations and they will make sense
    instead of being performed on a 4 byte aligned value.
    
    I replaced the statement "(word % 2) ^ 1" with "~word % 2" in order to
    reduce the line length as the line exceeded 80 characters with the register
    name inserted.  The two should be equivalent so the change should be safe.
    Reported-by: default avatarEmil Tantilov <emil.s.tantilov@intel.com>
    Signed-off-by: default avatarAlexander Duyck <aduyck@mirantis.com>
    Tested-by: default avatarPhil Schmitt <phillip.j.schmitt@intel.com>
    Signed-off-by: default avatarJeff Kirsher <jeffrey.t.kirsher@intel.com>
    ab3a3b7b
ixgbe_sriov.c 42.8 KB