aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/intel/ixgbevf
diff options
context:
space:
mode:
authorGreg Rose <gregory.v.rose@intel.com>2013-01-04 02:37:20 -0500
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>2013-01-19 07:28:29 -0500
commit1e72bfc39d772ccb49f95d5b296a35c348796022 (patch)
tree4942631924fc31dc4597b9fc0d435f9f4e79e9d3 /drivers/net/ethernet/intel/ixgbevf
parentec718254cbfe2c311ee56a41af41877b7a51a556 (diff)
ixgbevf: Synch out of tree and in tree mailbox interrupt handlers
The out of tree driver and the in kernel driver should use the same interrupt handling logic for mailbox interrupts. The difference in the handlers was causing dissimilar behavior between the two drivers complicating debug and trouble shooting. Signed-off-by: Greg Rose <gregory.v.rose@intel.com> Tested-by: Sibai Li <sibai.li@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Diffstat (limited to 'drivers/net/ethernet/intel/ixgbevf')
-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