diff options
-rw-r--r-- | drivers/net/igb/igb_main.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/drivers/net/igb/igb_main.c b/drivers/net/igb/igb_main.c index 95089a8feeec..1d03fcb0bd6c 100644 --- a/drivers/net/igb/igb_main.c +++ b/drivers/net/igb/igb_main.c | |||
@@ -821,9 +821,11 @@ static void igb_irq_disable(struct igb_adapter *adapter) | |||
821 | struct e1000_hw *hw = &adapter->hw; | 821 | struct e1000_hw *hw = &adapter->hw; |
822 | 822 | ||
823 | if (adapter->msix_entries) { | 823 | if (adapter->msix_entries) { |
824 | wr32(E1000_EIAM, 0); | 824 | u32 regval = rd32(E1000_EIAM); |
825 | wr32(E1000_EIMC, ~0); | 825 | wr32(E1000_EIAM, regval & ~adapter->eims_enable_mask); |
826 | wr32(E1000_EIAC, 0); | 826 | wr32(E1000_EIMC, adapter->eims_enable_mask); |
827 | regval = rd32(E1000_EIAC); | ||
828 | wr32(E1000_EIAC, regval & ~adapter->eims_enable_mask); | ||
827 | } | 829 | } |
828 | 830 | ||
829 | wr32(E1000_IAM, 0); | 831 | wr32(E1000_IAM, 0); |
@@ -841,8 +843,10 @@ static void igb_irq_enable(struct igb_adapter *adapter) | |||
841 | struct e1000_hw *hw = &adapter->hw; | 843 | struct e1000_hw *hw = &adapter->hw; |
842 | 844 | ||
843 | if (adapter->msix_entries) { | 845 | if (adapter->msix_entries) { |
844 | wr32(E1000_EIAC, adapter->eims_enable_mask); | 846 | u32 regval = rd32(E1000_EIAC); |
845 | wr32(E1000_EIAM, adapter->eims_enable_mask); | 847 | wr32(E1000_EIAC, regval | adapter->eims_enable_mask); |
848 | regval = rd32(E1000_EIAM); | ||
849 | wr32(E1000_EIAM, regval | adapter->eims_enable_mask); | ||
846 | wr32(E1000_EIMS, adapter->eims_enable_mask); | 850 | wr32(E1000_EIMS, adapter->eims_enable_mask); |
847 | if (adapter->vfs_allocated_count) | 851 | if (adapter->vfs_allocated_count) |
848 | wr32(E1000_MBVFIMR, 0xFF); | 852 | wr32(E1000_MBVFIMR, 0xFF); |