diff options
Diffstat (limited to 'drivers/net/skge.c')
-rw-r--r-- | drivers/net/skge.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/drivers/net/skge.c b/drivers/net/skge.c index e86a88aa9d06..8a321be24835 100644 --- a/drivers/net/skge.c +++ b/drivers/net/skge.c | |||
@@ -2891,13 +2891,15 @@ static irqreturn_t skge_intr(int irq, void *dev_id, struct pt_regs *regs) | |||
2891 | { | 2891 | { |
2892 | struct skge_hw *hw = dev_id; | 2892 | struct skge_hw *hw = dev_id; |
2893 | u32 status; | 2893 | u32 status; |
2894 | int handled = 0; | ||
2894 | 2895 | ||
2896 | spin_lock(&hw->hw_lock); | ||
2895 | /* Reading this register masks IRQ */ | 2897 | /* Reading this register masks IRQ */ |
2896 | status = skge_read32(hw, B0_SP_ISRC); | 2898 | status = skge_read32(hw, B0_SP_ISRC); |
2897 | if (status == 0) | 2899 | if (status == 0) |
2898 | return IRQ_NONE; | 2900 | goto out; |
2899 | 2901 | ||
2900 | spin_lock(&hw->hw_lock); | 2902 | handled = 1; |
2901 | status &= hw->intr_mask; | 2903 | status &= hw->intr_mask; |
2902 | if (status & IS_EXT_REG) { | 2904 | if (status & IS_EXT_REG) { |
2903 | hw->intr_mask &= ~IS_EXT_REG; | 2905 | hw->intr_mask &= ~IS_EXT_REG; |
@@ -2959,9 +2961,10 @@ static irqreturn_t skge_intr(int irq, void *dev_id, struct pt_regs *regs) | |||
2959 | 2961 | ||
2960 | skge_write32(hw, B0_IMSK, hw->intr_mask); | 2962 | skge_write32(hw, B0_IMSK, hw->intr_mask); |
2961 | skge_read32(hw, B0_IMSK); | 2963 | skge_read32(hw, B0_IMSK); |
2964 | out: | ||
2962 | spin_unlock(&hw->hw_lock); | 2965 | spin_unlock(&hw->hw_lock); |
2963 | 2966 | ||
2964 | return IRQ_HANDLED; | 2967 | return IRQ_RETVAL(handled); |
2965 | } | 2968 | } |
2966 | 2969 | ||
2967 | #ifdef CONFIG_NET_POLL_CONTROLLER | 2970 | #ifdef CONFIG_NET_POLL_CONTROLLER |