Skip to content

Commit a61cfe4

Browse files
gobenjiJeff Kirsher
authored andcommitted
e1000e: Do not write lsc to ics in msi-x mode
In msi-x mode, there is no handler for the lsc interrupt so there is no point in writing that to ics now that we always assume Other interrupts are caused by lsc. Reviewed-by: Jasna Hodzic <[email protected]> Signed-off-by: Benjamin Poirier <[email protected]> Tested-by: Aaron Brown <[email protected]> Signed-off-by: Jeff Kirsher <[email protected]>
1 parent 16ecba5 commit a61cfe4

File tree

2 files changed

+19
-12
lines changed

2 files changed

+19
-12
lines changed

drivers/net/ethernet/intel/e1000e/defines.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -441,12 +441,13 @@
441441
#define E1000_IMS_RXQ1 E1000_ICR_RXQ1 /* Rx Queue 1 Interrupt */
442442
#define E1000_IMS_TXQ0 E1000_ICR_TXQ0 /* Tx Queue 0 Interrupt */
443443
#define E1000_IMS_TXQ1 E1000_ICR_TXQ1 /* Tx Queue 1 Interrupt */
444-
#define E1000_IMS_OTHER E1000_ICR_OTHER /* Other Interrupts */
444+
#define E1000_IMS_OTHER E1000_ICR_OTHER /* Other Interrupt */
445445

446446
/* Interrupt Cause Set */
447447
#define E1000_ICS_LSC E1000_ICR_LSC /* Link Status Change */
448448
#define E1000_ICS_RXSEQ E1000_ICR_RXSEQ /* Rx sequence error */
449449
#define E1000_ICS_RXDMT0 E1000_ICR_RXDMT0 /* Rx desc min. threshold */
450+
#define E1000_ICS_OTHER E1000_ICR_OTHER /* Other Interrupt */
450451

451452
/* Transmit Descriptor Control */
452453
#define E1000_TXDCTL_PTHRESH 0x0000003F /* TXDCTL Prefetch Threshold */

drivers/net/ethernet/intel/e1000e/netdev.c

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4132,10 +4132,24 @@ void e1000e_reset(struct e1000_adapter *adapter)
41324132

41334133
}
41344134

4135-
void e1000e_up(struct e1000_adapter *adapter)
4135+
/**
4136+
* e1000e_trigger_lsc - trigger an LSC interrupt
4137+
* @adapter:
4138+
*
4139+
* Fire a link status change interrupt to start the watchdog.
4140+
**/
4141+
static void e1000e_trigger_lsc(struct e1000_adapter *adapter)
41364142
{
41374143
struct e1000_hw *hw = &adapter->hw;
41384144

4145+
if (adapter->msix_entries)
4146+
ew32(ICS, E1000_ICS_OTHER);
4147+
else
4148+
ew32(ICS, E1000_ICS_LSC);
4149+
}
4150+
4151+
void e1000e_up(struct e1000_adapter *adapter)
4152+
{
41394153
/* hardware has been reset, we need to reload some things */
41404154
e1000_configure(adapter);
41414155

@@ -4147,11 +4161,7 @@ void e1000e_up(struct e1000_adapter *adapter)
41474161

41484162
netif_start_queue(adapter->netdev);
41494163

4150-
/* fire a link change interrupt to start the watchdog */
4151-
if (adapter->msix_entries)
4152-
ew32(ICS, E1000_ICS_LSC | E1000_ICR_OTHER);
4153-
else
4154-
ew32(ICS, E1000_ICS_LSC);
4164+
e1000e_trigger_lsc(adapter);
41554165
}
41564166

41574167
static void e1000e_flush_descriptors(struct e1000_adapter *adapter)
@@ -4576,11 +4586,7 @@ static int e1000_open(struct net_device *netdev)
45764586
hw->mac.get_link_status = true;
45774587
pm_runtime_put(&pdev->dev);
45784588

4579-
/* fire a link status change interrupt to start the watchdog */
4580-
if (adapter->msix_entries)
4581-
ew32(ICS, E1000_ICS_LSC | E1000_ICR_OTHER);
4582-
else
4583-
ew32(ICS, E1000_ICS_LSC);
4589+
e1000e_trigger_lsc(adapter);
45844590

45854591
return 0;
45864592

0 commit comments

Comments
 (0)