mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-11 13:27:06 +09:00
ice: always return IRQ_WAKE_THREAD in ice_misc_intr()
Refactor the ice_misc_intr() function to always return IRQ_WAKE_THREAD, and schedule the service task during the soft IRQ thread function instead of at the end of the hard IRQ handler. Remove the duplicate call to ice_service_task_schedule() that happened when we got a PCI exception. Signed-off-by: Karol Kolacinski <karol.kolacinski@intel.com> Signed-off-by: Jacob Keller <jacob.e.keller@intel.com> Tested-by: Arpana Arland <arpanax.arland@intel.com> (A Contingent worker at Intel) Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
This commit is contained in:
committed by
Tony Nguyen
parent
6e8b2c88fc
commit
d578e618f1
@@ -3058,7 +3058,6 @@ static irqreturn_t ice_misc_intr(int __always_unused irq, void *data)
|
||||
{
|
||||
struct ice_pf *pf = (struct ice_pf *)data;
|
||||
struct ice_hw *hw = &pf->hw;
|
||||
irqreturn_t ret = IRQ_NONE;
|
||||
struct device *dev;
|
||||
u32 oicr, ena_mask;
|
||||
|
||||
@@ -3139,10 +3138,8 @@ static irqreturn_t ice_misc_intr(int __always_unused irq, void *data)
|
||||
|
||||
if (oicr & PFINT_OICR_TSYN_TX_M) {
|
||||
ena_mask &= ~PFINT_OICR_TSYN_TX_M;
|
||||
if (!hw->reset_ongoing) {
|
||||
if (!hw->reset_ongoing)
|
||||
set_bit(ICE_MISC_THREAD_TX_TSTAMP, pf->misc_thread);
|
||||
ret = IRQ_WAKE_THREAD;
|
||||
}
|
||||
}
|
||||
|
||||
if (oicr & PFINT_OICR_TSYN_EVNT_M) {
|
||||
@@ -3159,7 +3156,6 @@ static irqreturn_t ice_misc_intr(int __always_unused irq, void *data)
|
||||
GLTSYN_STAT_EVENT2_M);
|
||||
|
||||
set_bit(ICE_MISC_THREAD_EXTTS_EVENT, pf->misc_thread);
|
||||
ret = IRQ_WAKE_THREAD;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3180,16 +3176,12 @@ static irqreturn_t ice_misc_intr(int __always_unused irq, void *data)
|
||||
if (oicr & (PFINT_OICR_PCI_EXCEPTION_M |
|
||||
PFINT_OICR_ECC_ERR_M)) {
|
||||
set_bit(ICE_PFR_REQ, pf->state);
|
||||
ice_service_task_schedule(pf);
|
||||
}
|
||||
}
|
||||
if (!ret)
|
||||
ret = IRQ_HANDLED;
|
||||
|
||||
ice_service_task_schedule(pf);
|
||||
ice_irq_dynamic_ena(hw, NULL, NULL);
|
||||
|
||||
return ret;
|
||||
return IRQ_WAKE_THREAD;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -3204,6 +3196,8 @@ static irqreturn_t ice_misc_intr_thread_fn(int __always_unused irq, void *data)
|
||||
if (ice_is_reset_in_progress(pf->state))
|
||||
return IRQ_HANDLED;
|
||||
|
||||
ice_service_task_schedule(pf);
|
||||
|
||||
if (test_and_clear_bit(ICE_MISC_THREAD_EXTTS_EVENT, pf->misc_thread))
|
||||
ice_ptp_extts_event(pf);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user