diff options
-rw-r--r-- | drivers/net/ethernet/intel/ixgbevf/ixgbevf_main.c | 27 |
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) | |||
750 | static irqreturn_t ixgbevf_msix_other(int irq, void *data) | 750 | static 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 | ||