mirror of https://gitee.com/openkylin/linux.git
igb: only disable/enable interrupt bits for igb physical function
The igb_irq_disable/enable calls were causing virtual functions associated with the igb physical function to have their interrupts disabled. In order to prevent this from occuring we should only clear/set the bits related to the physical function. Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com> Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
ff41f8dcc6
commit
2dfd121265
|
@ -821,9 +821,11 @@ static void igb_irq_disable(struct igb_adapter *adapter)
|
|||
struct e1000_hw *hw = &adapter->hw;
|
||||
|
||||
if (adapter->msix_entries) {
|
||||
wr32(E1000_EIAM, 0);
|
||||
wr32(E1000_EIMC, ~0);
|
||||
wr32(E1000_EIAC, 0);
|
||||
u32 regval = rd32(E1000_EIAM);
|
||||
wr32(E1000_EIAM, regval & ~adapter->eims_enable_mask);
|
||||
wr32(E1000_EIMC, adapter->eims_enable_mask);
|
||||
regval = rd32(E1000_EIAC);
|
||||
wr32(E1000_EIAC, regval & ~adapter->eims_enable_mask);
|
||||
}
|
||||
|
||||
wr32(E1000_IAM, 0);
|
||||
|
@ -841,8 +843,10 @@ static void igb_irq_enable(struct igb_adapter *adapter)
|
|||
struct e1000_hw *hw = &adapter->hw;
|
||||
|
||||
if (adapter->msix_entries) {
|
||||
wr32(E1000_EIAC, adapter->eims_enable_mask);
|
||||
wr32(E1000_EIAM, adapter->eims_enable_mask);
|
||||
u32 regval = rd32(E1000_EIAC);
|
||||
wr32(E1000_EIAC, regval | adapter->eims_enable_mask);
|
||||
regval = rd32(E1000_EIAM);
|
||||
wr32(E1000_EIAM, regval | adapter->eims_enable_mask);
|
||||
wr32(E1000_EIMS, adapter->eims_enable_mask);
|
||||
if (adapter->vfs_allocated_count)
|
||||
wr32(E1000_MBVFIMR, 0xFF);
|
||||
|
|
Loading…
Reference in New Issue