Skip to content

Commit

Permalink
igb: refactor time sync interrupt handling
Browse files Browse the repository at this point in the history
The code that handles the time sync interrupt is repeated in three
different places. This patch refactors the identical code blocks into
a single helper function.

Signed-off-by: Richard Cochran <richardcochran@gmail.com>
Tested-by: Aaron Brown <aaron.f.brown@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
  • Loading branch information
Richard Cochran authored and Jeff Kirsher committed Jan 23, 2015
1 parent ba5b8dc commit 61d7f75
Showing 1 changed file with 19 additions and 30 deletions.
49 changes: 19 additions & 30 deletions drivers/net/ethernet/intel/igb/igb_main.c
Original file line number Diff line number Diff line change
Expand Up @@ -5384,6 +5384,19 @@ void igb_update_stats(struct igb_adapter *adapter,
}
}

static void igb_tsync_interrupt(struct igb_adapter *adapter)
{
struct e1000_hw *hw = &adapter->hw;
u32 tsicr = rd32(E1000_TSICR);

if (tsicr & E1000_TSICR_TXTS) {
/* acknowledge the interrupt */
wr32(E1000_TSICR, E1000_TSICR_TXTS);
/* retrieve hardware timestamp */
schedule_work(&adapter->ptp_tx_work);
}
}

static irqreturn_t igb_msix_other(int irq, void *data)
{
struct igb_adapter *adapter = data;
Expand Down Expand Up @@ -5415,16 +5428,8 @@ static irqreturn_t igb_msix_other(int irq, void *data)
mod_timer(&adapter->watchdog_timer, jiffies + 1);
}

if (icr & E1000_ICR_TS) {
u32 tsicr = rd32(E1000_TSICR);

if (tsicr & E1000_TSICR_TXTS) {
/* acknowledge the interrupt */
wr32(E1000_TSICR, E1000_TSICR_TXTS);
/* retrieve hardware timestamp */
schedule_work(&adapter->ptp_tx_work);
}
}
if (icr & E1000_ICR_TS)
igb_tsync_interrupt(adapter);

wr32(E1000_EIMS, adapter->eims_other);

Expand Down Expand Up @@ -6203,16 +6208,8 @@ static irqreturn_t igb_intr_msi(int irq, void *data)
mod_timer(&adapter->watchdog_timer, jiffies + 1);
}

if (icr & E1000_ICR_TS) {
u32 tsicr = rd32(E1000_TSICR);

if (tsicr & E1000_TSICR_TXTS) {
/* acknowledge the interrupt */
wr32(E1000_TSICR, E1000_TSICR_TXTS);
/* retrieve hardware timestamp */
schedule_work(&adapter->ptp_tx_work);
}
}
if (icr & E1000_ICR_TS)
igb_tsync_interrupt(adapter);

napi_schedule(&q_vector->napi);

Expand Down Expand Up @@ -6257,16 +6254,8 @@ static irqreturn_t igb_intr(int irq, void *data)
mod_timer(&adapter->watchdog_timer, jiffies + 1);
}

if (icr & E1000_ICR_TS) {
u32 tsicr = rd32(E1000_TSICR);

if (tsicr & E1000_TSICR_TXTS) {
/* acknowledge the interrupt */
wr32(E1000_TSICR, E1000_TSICR_TXTS);
/* retrieve hardware timestamp */
schedule_work(&adapter->ptp_tx_work);
}
}
if (icr & E1000_ICR_TS)
igb_tsync_interrupt(adapter);

napi_schedule(&q_vector->napi);

Expand Down

0 comments on commit 61d7f75

Please sign in to comment.