The bugs fixed are as follows:
- In ixgbe_vf_api_negotiate(), the API version is in msg[1], not msg[0]. This bug results in the API version not being correctly set in the VF context. I believe the only current consequence is an error status being printed to the log.
- In ixgbe_reset_hw_vf(), IXGBE_VT_MSGTYPE_CTS must be masked off in msgbuf[0] before performing the message type + ack/nack checks or those checks will always fail. The main side effect of this failure is that the VF MAC address cannot be set at creation time via iovctl.
- In ixv_initialize_receive_units(), set the receive tail pointer after enabling the queues instead of before as enabling the queues clears the tail pointer. The driver currently muddles through this mistake during the first interrupt as the receive ring mbufs wind up being refreshed, which updates the tail pointer as a side effect.