Commit ae6b95d4 authored by Alexey Dobriyan's avatar Alexey Dobriyan Committed by Linus Torvalds

[PATCH] mwave: interesting flags savings

Flags from spin_lock_irqsave() are saved into global variable and restored
from it.  My gut feeling this is very racy.
Signed-off-by: default avatarAlexey Dobriyan <adobriyan@gmail.com>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 91e4ee38
...@@ -63,8 +63,6 @@ ...@@ -63,8 +63,6 @@
#include "3780i.h" #include "3780i.h"
static DEFINE_SPINLOCK(dsp_lock); static DEFINE_SPINLOCK(dsp_lock);
static unsigned long flags;
static void PaceMsaAccess(unsigned short usDspBaseIO) static void PaceMsaAccess(unsigned short usDspBaseIO)
{ {
...@@ -76,6 +74,7 @@ static void PaceMsaAccess(unsigned short usDspBaseIO) ...@@ -76,6 +74,7 @@ static void PaceMsaAccess(unsigned short usDspBaseIO)
unsigned short dsp3780I_ReadMsaCfg(unsigned short usDspBaseIO, unsigned short dsp3780I_ReadMsaCfg(unsigned short usDspBaseIO,
unsigned long ulMsaAddr) unsigned long ulMsaAddr)
{ {
unsigned long flags;
unsigned short val; unsigned short val;
PRINTK_3(TRACE_3780I, PRINTK_3(TRACE_3780I,
...@@ -96,6 +95,7 @@ unsigned short dsp3780I_ReadMsaCfg(unsigned short usDspBaseIO, ...@@ -96,6 +95,7 @@ unsigned short dsp3780I_ReadMsaCfg(unsigned short usDspBaseIO,
void dsp3780I_WriteMsaCfg(unsigned short usDspBaseIO, void dsp3780I_WriteMsaCfg(unsigned short usDspBaseIO,
unsigned long ulMsaAddr, unsigned short usValue) unsigned long ulMsaAddr, unsigned short usValue)
{ {
unsigned long flags;
PRINTK_4(TRACE_3780I, PRINTK_4(TRACE_3780I,
"3780i::dsp3780i_WriteMsaCfg entry usDspBaseIO %x ulMsaAddr %lx usValue %x\n", "3780i::dsp3780i_WriteMsaCfg entry usDspBaseIO %x ulMsaAddr %lx usValue %x\n",
...@@ -175,6 +175,7 @@ int dsp3780I_EnableDSP(DSP_3780I_CONFIG_SETTINGS * pSettings, ...@@ -175,6 +175,7 @@ int dsp3780I_EnableDSP(DSP_3780I_CONFIG_SETTINGS * pSettings,
unsigned short *pIrqMap, unsigned short *pIrqMap,
unsigned short *pDmaMap) unsigned short *pDmaMap)
{ {
unsigned long flags;
unsigned short usDspBaseIO = pSettings->usDspBaseIO; unsigned short usDspBaseIO = pSettings->usDspBaseIO;
int i; int i;
DSP_UART_CFG_1 rUartCfg1; DSP_UART_CFG_1 rUartCfg1;
...@@ -354,6 +355,7 @@ int dsp3780I_EnableDSP(DSP_3780I_CONFIG_SETTINGS * pSettings, ...@@ -354,6 +355,7 @@ int dsp3780I_EnableDSP(DSP_3780I_CONFIG_SETTINGS * pSettings,
int dsp3780I_DisableDSP(DSP_3780I_CONFIG_SETTINGS * pSettings) int dsp3780I_DisableDSP(DSP_3780I_CONFIG_SETTINGS * pSettings)
{ {
unsigned long flags;
unsigned short usDspBaseIO = pSettings->usDspBaseIO; unsigned short usDspBaseIO = pSettings->usDspBaseIO;
DSP_ISA_SLAVE_CONTROL rSlaveControl; DSP_ISA_SLAVE_CONTROL rSlaveControl;
...@@ -383,6 +385,7 @@ int dsp3780I_DisableDSP(DSP_3780I_CONFIG_SETTINGS * pSettings) ...@@ -383,6 +385,7 @@ int dsp3780I_DisableDSP(DSP_3780I_CONFIG_SETTINGS * pSettings)
int dsp3780I_Reset(DSP_3780I_CONFIG_SETTINGS * pSettings) int dsp3780I_Reset(DSP_3780I_CONFIG_SETTINGS * pSettings)
{ {
unsigned long flags;
unsigned short usDspBaseIO = pSettings->usDspBaseIO; unsigned short usDspBaseIO = pSettings->usDspBaseIO;
DSP_BOOT_DOMAIN rBootDomain; DSP_BOOT_DOMAIN rBootDomain;
DSP_HBRIDGE_CONTROL rHBridgeControl; DSP_HBRIDGE_CONTROL rHBridgeControl;
...@@ -427,6 +430,7 @@ int dsp3780I_Reset(DSP_3780I_CONFIG_SETTINGS * pSettings) ...@@ -427,6 +430,7 @@ int dsp3780I_Reset(DSP_3780I_CONFIG_SETTINGS * pSettings)
int dsp3780I_Run(DSP_3780I_CONFIG_SETTINGS * pSettings) int dsp3780I_Run(DSP_3780I_CONFIG_SETTINGS * pSettings)
{ {
unsigned long flags;
unsigned short usDspBaseIO = pSettings->usDspBaseIO; unsigned short usDspBaseIO = pSettings->usDspBaseIO;
DSP_BOOT_DOMAIN rBootDomain; DSP_BOOT_DOMAIN rBootDomain;
DSP_HBRIDGE_CONTROL rHBridgeControl; DSP_HBRIDGE_CONTROL rHBridgeControl;
...@@ -473,6 +477,7 @@ int dsp3780I_Run(DSP_3780I_CONFIG_SETTINGS * pSettings) ...@@ -473,6 +477,7 @@ int dsp3780I_Run(DSP_3780I_CONFIG_SETTINGS * pSettings)
int dsp3780I_ReadDStore(unsigned short usDspBaseIO, void __user *pvBuffer, int dsp3780I_ReadDStore(unsigned short usDspBaseIO, void __user *pvBuffer,
unsigned uCount, unsigned long ulDSPAddr) unsigned uCount, unsigned long ulDSPAddr)
{ {
unsigned long flags;
unsigned short __user *pusBuffer = pvBuffer; unsigned short __user *pusBuffer = pvBuffer;
unsigned short val; unsigned short val;
...@@ -514,6 +519,7 @@ int dsp3780I_ReadAndClearDStore(unsigned short usDspBaseIO, ...@@ -514,6 +519,7 @@ int dsp3780I_ReadAndClearDStore(unsigned short usDspBaseIO,
void __user *pvBuffer, unsigned uCount, void __user *pvBuffer, unsigned uCount,
unsigned long ulDSPAddr) unsigned long ulDSPAddr)
{ {
unsigned long flags;
unsigned short __user *pusBuffer = pvBuffer; unsigned short __user *pusBuffer = pvBuffer;
unsigned short val; unsigned short val;
...@@ -555,6 +561,7 @@ int dsp3780I_ReadAndClearDStore(unsigned short usDspBaseIO, ...@@ -555,6 +561,7 @@ int dsp3780I_ReadAndClearDStore(unsigned short usDspBaseIO,
int dsp3780I_WriteDStore(unsigned short usDspBaseIO, void __user *pvBuffer, int dsp3780I_WriteDStore(unsigned short usDspBaseIO, void __user *pvBuffer,
unsigned uCount, unsigned long ulDSPAddr) unsigned uCount, unsigned long ulDSPAddr)
{ {
unsigned long flags;
unsigned short __user *pusBuffer = pvBuffer; unsigned short __user *pusBuffer = pvBuffer;
...@@ -596,6 +603,7 @@ int dsp3780I_WriteDStore(unsigned short usDspBaseIO, void __user *pvBuffer, ...@@ -596,6 +603,7 @@ int dsp3780I_WriteDStore(unsigned short usDspBaseIO, void __user *pvBuffer,
int dsp3780I_ReadIStore(unsigned short usDspBaseIO, void __user *pvBuffer, int dsp3780I_ReadIStore(unsigned short usDspBaseIO, void __user *pvBuffer,
unsigned uCount, unsigned long ulDSPAddr) unsigned uCount, unsigned long ulDSPAddr)
{ {
unsigned long flags;
unsigned short __user *pusBuffer = pvBuffer; unsigned short __user *pusBuffer = pvBuffer;
PRINTK_5(TRACE_3780I, PRINTK_5(TRACE_3780I,
...@@ -643,6 +651,7 @@ int dsp3780I_ReadIStore(unsigned short usDspBaseIO, void __user *pvBuffer, ...@@ -643,6 +651,7 @@ int dsp3780I_ReadIStore(unsigned short usDspBaseIO, void __user *pvBuffer,
int dsp3780I_WriteIStore(unsigned short usDspBaseIO, void __user *pvBuffer, int dsp3780I_WriteIStore(unsigned short usDspBaseIO, void __user *pvBuffer,
unsigned uCount, unsigned long ulDSPAddr) unsigned uCount, unsigned long ulDSPAddr)
{ {
unsigned long flags;
unsigned short __user *pusBuffer = pvBuffer; unsigned short __user *pusBuffer = pvBuffer;
PRINTK_5(TRACE_3780I, PRINTK_5(TRACE_3780I,
...@@ -691,6 +700,7 @@ int dsp3780I_WriteIStore(unsigned short usDspBaseIO, void __user *pvBuffer, ...@@ -691,6 +700,7 @@ int dsp3780I_WriteIStore(unsigned short usDspBaseIO, void __user *pvBuffer,
int dsp3780I_GetIPCSource(unsigned short usDspBaseIO, int dsp3780I_GetIPCSource(unsigned short usDspBaseIO,
unsigned short *pusIPCSource) unsigned short *pusIPCSource)
{ {
unsigned long flags;
DSP_HBRIDGE_CONTROL rHBridgeControl; DSP_HBRIDGE_CONTROL rHBridgeControl;
unsigned short temp; unsigned short temp;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment