• Jonathan Cooper's avatar
    sfc: Change VF mac via PF as first preference if available. · a8aed7b3
    Jonathan Cooper authored
    Changing a VF's mac address through the VF (rather than via the PF)
    fails with EPERM because the latter part of efx_ef10_set_mac_address
    attempts to change the vport mac address list as the VF.
    Even with this fixed it still fails with EBUSY because the vadaptor
    is still assigned on the VF - the vadaptor reassignment must be within
    a section where the VF has torn down its state.
    
    A major reason this has broken is because we have two functions that
    ostensibly do the same thing - have a PF and VF cooperate to change a
    VF mac address. Rather than do this, if we are changing the mac of a VF
    that has a link to the PF in the same VM then simply call
    sriov_set_vf_mac instead, which is a proven working function that does
    that.
    
    If there is no PF available, or that fails non-fatally, then attempt to
    change the VF's mac address as we would a PF, without updating the PF's
    data.
    
    Test case:
    Create a VF:
      echo 1 > /sys/class/net/<if>/device/sriov_numvfs
    Set the mac address of the VF directly:
      ip link set <vf> addr 00:11:22:33:44:55
    Set the MAC address of the VF via the PF:
      ip link set <pf> vf 0 mac 00:11:22:33:44:66
    Without this patch the last command will fail with ENOENT.
    Signed-off-by: default avatarJonathan Cooper <jonathan.s.cooper@amd.com>
    Reported-by: default avatarÍñigo Huguet <ihuguet@redhat.com>
    Fixes: 910c8789 ("set the MAC address using MC_CMD_VADAPTOR_SET_MAC")
    Acked-by: default avatarEdward Cree <ecree.xilinx@gmail.com>
    Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
    a8aed7b3
ef10.c 127 KB