aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c27
1 files changed, 25 insertions, 2 deletions
diff --git a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
index c27d9867e20d..580dfd88418d 100644
--- a/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
+++ b/drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c
@@ -750,12 +750,35 @@ static void ixgbevf_set_itr(struct ixgbevf_q_vector *q_vector)
750static irqreturn_t ixgbevf_msix_other(int irq, void *data) 750static irqreturn_t ixgbevf_msix_other(int irq, void *data)
751{ 751{
752 struct ixgbevf_adapter *adapter = data; 752 struct ixgbevf_adapter *adapter = data;
753 struct pci_dev *pdev = adapter->pdev;
753 struct ixgbe_hw *hw = &adapter->hw; 754 struct ixgbe_hw *hw = &adapter->hw;
755 u32 msg;
756 bool got_ack = false;
754 757
755 hw->mac.get_link_status = 1; 758 hw->mac.get_link_status = 1;
759 if (!hw->mbx.ops.check_for_ack(hw))
760 got_ack = true;
756 761
757 if (!test_bit(__IXGBEVF_DOWN, &adapter->state)) 762 if (!hw->mbx.ops.check_for_msg(hw)) {
758 mod_timer(&adapter->watchdog_timer, jiffies); 763 hw->mbx.ops.read(hw, &msg, 1);
764
765 if ((msg & IXGBE_MBVFICR_VFREQ_MASK) == IXGBE_PF_CONTROL_MSG)
766 mod_timer(&adapter->watchdog_timer,
767 round_jiffies(jiffies + 1));
768
769 if (msg & IXGBE_VT_MSGTYPE_NACK)
770 dev_info(&pdev->dev,
771 "Last Request of type %2.2x to PF Nacked\n",
772 msg & 0xFF);
773 hw->mbx.v2p_mailbox |= IXGBE_VFMAILBOX_PFSTS;
774 }
775
776 /* checking for the ack clears the PFACK bit. Place
777 * it back in the v2p_mailbox cache so that anyone
778 * polling for an ack will not miss it
779 */
780 if (got_ack)
781 hw->mbx.v2p_mailbox |= IXGBE_VFMAILBOX_PFACK;
759 782
760 IXGBE_WRITE_REG(hw, IXGBE_VTEIMS, adapter->eims_other); 783 IXGBE_WRITE_REG(hw, IXGBE_VTEIMS, adapter->eims_other);
761 784