|
@@ -53,6 +53,11 @@ static int __ixgbe_enable_sriov(struct ixgbe_adapter *adapter,
|
|
|
struct ixgbe_hw *hw = &adapter->hw;
|
|
|
int i;
|
|
|
|
|
|
+ if (adapter->xdp_prog) {
|
|
|
+ e_warn(probe, "SRIOV is not supported with XDP\n");
|
|
|
+ return -EINVAL;
|
|
|
+ }
|
|
|
+
|
|
|
/* Enable VMDq flag so device will be set in VM mode */
|
|
|
adapter->flags |= IXGBE_FLAG_SRIOV_ENABLED |
|
|
|
IXGBE_FLAG_VMDQ_ENABLED;
|
|
@@ -688,8 +693,13 @@ static int ixgbe_set_vf_macvlan(struct ixgbe_adapter *adapter,
|
|
|
static inline void ixgbe_vf_reset_event(struct ixgbe_adapter *adapter, u32 vf)
|
|
|
{
|
|
|
struct ixgbe_hw *hw = &adapter->hw;
|
|
|
+ struct ixgbe_ring_feature *vmdq = &adapter->ring_feature[RING_F_VMDQ];
|
|
|
struct vf_data_storage *vfinfo = &adapter->vfinfo[vf];
|
|
|
+ u32 q_per_pool = __ALIGN_MASK(1, ~vmdq->mask);
|
|
|
u8 num_tcs = adapter->hw_tcs;
|
|
|
+ u32 reg_val;
|
|
|
+ u32 queue;
|
|
|
+ u32 word;
|
|
|
|
|
|
/* remove VLAN filters beloning to this VF */
|
|
|
ixgbe_clear_vf_vlans(adapter, vf);
|
|
@@ -726,6 +736,27 @@ static inline void ixgbe_vf_reset_event(struct ixgbe_adapter *adapter, u32 vf)
|
|
|
|
|
|
/* reset VF api back to unknown */
|
|
|
adapter->vfinfo[vf].vf_api = ixgbe_mbox_api_10;
|
|
|
+
|
|
|
+ /* Restart each queue for given VF */
|
|
|
+ for (queue = 0; queue < q_per_pool; queue++) {
|
|
|
+ unsigned int reg_idx = (vf * q_per_pool) + queue;
|
|
|
+
|
|
|
+ reg_val = IXGBE_READ_REG(hw, IXGBE_PVFTXDCTL(reg_idx));
|
|
|
+
|
|
|
+ /* Re-enabling only configured queues */
|
|
|
+ if (reg_val) {
|
|
|
+ reg_val |= IXGBE_TXDCTL_ENABLE;
|
|
|
+ IXGBE_WRITE_REG(hw, IXGBE_PVFTXDCTL(reg_idx), reg_val);
|
|
|
+ reg_val &= ~IXGBE_TXDCTL_ENABLE;
|
|
|
+ IXGBE_WRITE_REG(hw, IXGBE_PVFTXDCTL(reg_idx), reg_val);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /* Clear VF's mailbox memory */
|
|
|
+ for (word = 0; word < IXGBE_VFMAILBOX_SIZE; word++)
|
|
|
+ IXGBE_WRITE_REG_ARRAY(hw, IXGBE_PFMBMEM(vf), word, 0);
|
|
|
+
|
|
|
+ IXGBE_WRITE_FLUSH(hw);
|
|
|
}
|
|
|
|
|
|
static int ixgbe_set_vf_mac(struct ixgbe_adapter *adapter,
|