|
@@ -661,13 +661,7 @@ int ixgbe_vf_configuration(struct pci_dev *pdev, unsigned int event_mask)
|
|
|
bool enable = ((event_mask & 0x10000000U) != 0);
|
|
|
|
|
|
if (enable) {
|
|
|
- eth_random_addr(vf_mac_addr);
|
|
|
- e_info(probe, "IOV: VF %d is enabled MAC %pM\n",
|
|
|
- vfn, vf_mac_addr);
|
|
|
- /*
|
|
|
- * Store away the VF "permananet" MAC address, it will ask
|
|
|
- * for it later.
|
|
|
- */
|
|
|
+ eth_zero_addr(vf_mac_addr);
|
|
|
memcpy(adapter->vfinfo[vfn].vf_mac_addresses, vf_mac_addr, 6);
|
|
|
}
|
|
|
|
|
@@ -688,7 +682,8 @@ static int ixgbe_vf_reset_msg(struct ixgbe_adapter *adapter, u32 vf)
|
|
|
ixgbe_vf_reset_event(adapter, vf);
|
|
|
|
|
|
/* set vf mac address */
|
|
|
- ixgbe_set_vf_mac(adapter, vf, vf_mac);
|
|
|
+ if (!is_zero_ether_addr(vf_mac))
|
|
|
+ ixgbe_set_vf_mac(adapter, vf, vf_mac);
|
|
|
|
|
|
vf_shift = vf % 32;
|
|
|
reg_offset = vf / 32;
|
|
@@ -729,8 +724,16 @@ static int ixgbe_vf_reset_msg(struct ixgbe_adapter *adapter, u32 vf)
|
|
|
IXGBE_WRITE_REG(hw, IXGBE_VMECM(reg_offset), reg);
|
|
|
|
|
|
/* reply to reset with ack and vf mac address */
|
|
|
- msgbuf[0] = IXGBE_VF_RESET | IXGBE_VT_MSGTYPE_ACK;
|
|
|
- memcpy(addr, vf_mac, ETH_ALEN);
|
|
|
+ msgbuf[0] = IXGBE_VF_RESET;
|
|
|
+ if (!is_zero_ether_addr(vf_mac)) {
|
|
|
+ msgbuf[0] |= IXGBE_VT_MSGTYPE_ACK;
|
|
|
+ memcpy(addr, vf_mac, ETH_ALEN);
|
|
|
+ } else {
|
|
|
+ msgbuf[0] |= IXGBE_VT_MSGTYPE_NACK;
|
|
|
+ dev_warn(&adapter->pdev->dev,
|
|
|
+ "VF %d has no MAC address assigned, you may have to assign one manually\n",
|
|
|
+ vf);
|
|
|
+ }
|
|
|
|
|
|
/*
|
|
|
* Piggyback the multicast filter type so VF can compute the
|