diff options
author | Malcolm Priestley <tvboxspy@gmail.com> | 2014-07-23 16:35:11 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2014-07-24 18:10:42 -0400 |
commit | 6cff1f6ad4c615319c1a146b2aa0af1043c5e9f5 (patch) | |
tree | a25608bc1762fc597cf8a786935c442029b0af33 | |
parent | 92e396270fea0a787ea848880565fb14cfb20f18 (diff) |
staging: vt6655: Fix Warning on boot handle_irq_event_percpu.
WARNING: CPU: 0 PID: 929 at /home/apw/COD/linux/kernel/irq/handle.c:147 handle_irq_event_percpu+0x1d1/0x1e0()
irq 17 handler device_intr+0x0/0xa80 [vt6655_stage] enabled interrupts
Using spin_lock_irqsave appears to fix this.
Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
Cc: <stable@vger.kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | drivers/staging/vt6655/device_main.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/drivers/staging/vt6655/device_main.c b/drivers/staging/vt6655/device_main.c index 1d3908d044d0..5a5fd937a442 100644 --- a/drivers/staging/vt6655/device_main.c +++ b/drivers/staging/vt6655/device_main.c | |||
@@ -2318,6 +2318,7 @@ static irqreturn_t device_intr(int irq, void *dev_instance) { | |||
2318 | int handled = 0; | 2318 | int handled = 0; |
2319 | unsigned char byData = 0; | 2319 | unsigned char byData = 0; |
2320 | int ii = 0; | 2320 | int ii = 0; |
2321 | unsigned long flags; | ||
2321 | 2322 | ||
2322 | MACvReadISR(pDevice->PortOffset, &pDevice->dwIsr); | 2323 | MACvReadISR(pDevice->PortOffset, &pDevice->dwIsr); |
2323 | 2324 | ||
@@ -2331,7 +2332,8 @@ static irqreturn_t device_intr(int irq, void *dev_instance) { | |||
2331 | 2332 | ||
2332 | handled = 1; | 2333 | handled = 1; |
2333 | MACvIntDisable(pDevice->PortOffset); | 2334 | MACvIntDisable(pDevice->PortOffset); |
2334 | spin_lock_irq(&pDevice->lock); | 2335 | |
2336 | spin_lock_irqsave(&pDevice->lock, flags); | ||
2335 | 2337 | ||
2336 | //Make sure current page is 0 | 2338 | //Make sure current page is 0 |
2337 | VNSvInPortB(pDevice->PortOffset + MAC_REG_PAGE1SEL, &byOrgPageSel); | 2339 | VNSvInPortB(pDevice->PortOffset + MAC_REG_PAGE1SEL, &byOrgPageSel); |
@@ -2560,7 +2562,8 @@ static irqreturn_t device_intr(int irq, void *dev_instance) { | |||
2560 | if (byOrgPageSel == 1) | 2562 | if (byOrgPageSel == 1) |
2561 | MACvSelectPage1(pDevice->PortOffset); | 2563 | MACvSelectPage1(pDevice->PortOffset); |
2562 | 2564 | ||
2563 | spin_unlock_irq(&pDevice->lock); | 2565 | spin_unlock_irqrestore(&pDevice->lock, flags); |
2566 | |||
2564 | MACvIntEnable(pDevice->PortOffset, IMR_MASK_VALUE); | 2567 | MACvIntEnable(pDevice->PortOffset, IMR_MASK_VALUE); |
2565 | 2568 | ||
2566 | return IRQ_RETVAL(handled); | 2569 | return IRQ_RETVAL(handled); |