forked from Minki/linux
[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: Alexey Dobriyan <adobriyan@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
91e4ee381d
commit
ae6b95d4d8
@ -63,8 +63,6 @@
|
||||
#include "3780i.h"
|
||||
|
||||
static DEFINE_SPINLOCK(dsp_lock);
|
||||
static unsigned long flags;
|
||||
|
||||
|
||||
static void PaceMsaAccess(unsigned short usDspBaseIO)
|
||||
{
|
||||
@ -76,6 +74,7 @@ static void PaceMsaAccess(unsigned short usDspBaseIO)
|
||||
unsigned short dsp3780I_ReadMsaCfg(unsigned short usDspBaseIO,
|
||||
unsigned long ulMsaAddr)
|
||||
{
|
||||
unsigned long flags;
|
||||
unsigned short val;
|
||||
|
||||
PRINTK_3(TRACE_3780I,
|
||||
@ -96,6 +95,7 @@ unsigned short dsp3780I_ReadMsaCfg(unsigned short usDspBaseIO,
|
||||
void dsp3780I_WriteMsaCfg(unsigned short usDspBaseIO,
|
||||
unsigned long ulMsaAddr, unsigned short usValue)
|
||||
{
|
||||
unsigned long flags;
|
||||
|
||||
PRINTK_4(TRACE_3780I,
|
||||
"3780i::dsp3780i_WriteMsaCfg entry usDspBaseIO %x ulMsaAddr %lx usValue %x\n",
|
||||
@ -175,6 +175,7 @@ int dsp3780I_EnableDSP(DSP_3780I_CONFIG_SETTINGS * pSettings,
|
||||
unsigned short *pIrqMap,
|
||||
unsigned short *pDmaMap)
|
||||
{
|
||||
unsigned long flags;
|
||||
unsigned short usDspBaseIO = pSettings->usDspBaseIO;
|
||||
int i;
|
||||
DSP_UART_CFG_1 rUartCfg1;
|
||||
@ -354,6 +355,7 @@ int dsp3780I_EnableDSP(DSP_3780I_CONFIG_SETTINGS * pSettings,
|
||||
|
||||
int dsp3780I_DisableDSP(DSP_3780I_CONFIG_SETTINGS * pSettings)
|
||||
{
|
||||
unsigned long flags;
|
||||
unsigned short usDspBaseIO = pSettings->usDspBaseIO;
|
||||
DSP_ISA_SLAVE_CONTROL rSlaveControl;
|
||||
|
||||
@ -383,6 +385,7 @@ int dsp3780I_DisableDSP(DSP_3780I_CONFIG_SETTINGS * pSettings)
|
||||
|
||||
int dsp3780I_Reset(DSP_3780I_CONFIG_SETTINGS * pSettings)
|
||||
{
|
||||
unsigned long flags;
|
||||
unsigned short usDspBaseIO = pSettings->usDspBaseIO;
|
||||
DSP_BOOT_DOMAIN rBootDomain;
|
||||
DSP_HBRIDGE_CONTROL rHBridgeControl;
|
||||
@ -427,6 +430,7 @@ int dsp3780I_Reset(DSP_3780I_CONFIG_SETTINGS * pSettings)
|
||||
|
||||
int dsp3780I_Run(DSP_3780I_CONFIG_SETTINGS * pSettings)
|
||||
{
|
||||
unsigned long flags;
|
||||
unsigned short usDspBaseIO = pSettings->usDspBaseIO;
|
||||
DSP_BOOT_DOMAIN rBootDomain;
|
||||
DSP_HBRIDGE_CONTROL rHBridgeControl;
|
||||
@ -473,6 +477,7 @@ int dsp3780I_Run(DSP_3780I_CONFIG_SETTINGS * pSettings)
|
||||
int dsp3780I_ReadDStore(unsigned short usDspBaseIO, void __user *pvBuffer,
|
||||
unsigned uCount, unsigned long ulDSPAddr)
|
||||
{
|
||||
unsigned long flags;
|
||||
unsigned short __user *pusBuffer = pvBuffer;
|
||||
unsigned short val;
|
||||
|
||||
@ -514,6 +519,7 @@ int dsp3780I_ReadAndClearDStore(unsigned short usDspBaseIO,
|
||||
void __user *pvBuffer, unsigned uCount,
|
||||
unsigned long ulDSPAddr)
|
||||
{
|
||||
unsigned long flags;
|
||||
unsigned short __user *pusBuffer = pvBuffer;
|
||||
unsigned short val;
|
||||
|
||||
@ -555,6 +561,7 @@ int dsp3780I_ReadAndClearDStore(unsigned short usDspBaseIO,
|
||||
int dsp3780I_WriteDStore(unsigned short usDspBaseIO, void __user *pvBuffer,
|
||||
unsigned uCount, unsigned long ulDSPAddr)
|
||||
{
|
||||
unsigned long flags;
|
||||
unsigned short __user *pusBuffer = pvBuffer;
|
||||
|
||||
|
||||
@ -596,6 +603,7 @@ int dsp3780I_WriteDStore(unsigned short usDspBaseIO, void __user *pvBuffer,
|
||||
int dsp3780I_ReadIStore(unsigned short usDspBaseIO, void __user *pvBuffer,
|
||||
unsigned uCount, unsigned long ulDSPAddr)
|
||||
{
|
||||
unsigned long flags;
|
||||
unsigned short __user *pusBuffer = pvBuffer;
|
||||
|
||||
PRINTK_5(TRACE_3780I,
|
||||
@ -643,6 +651,7 @@ int dsp3780I_ReadIStore(unsigned short usDspBaseIO, void __user *pvBuffer,
|
||||
int dsp3780I_WriteIStore(unsigned short usDspBaseIO, void __user *pvBuffer,
|
||||
unsigned uCount, unsigned long ulDSPAddr)
|
||||
{
|
||||
unsigned long flags;
|
||||
unsigned short __user *pusBuffer = pvBuffer;
|
||||
|
||||
PRINTK_5(TRACE_3780I,
|
||||
@ -691,6 +700,7 @@ int dsp3780I_WriteIStore(unsigned short usDspBaseIO, void __user *pvBuffer,
|
||||
int dsp3780I_GetIPCSource(unsigned short usDspBaseIO,
|
||||
unsigned short *pusIPCSource)
|
||||
{
|
||||
unsigned long flags;
|
||||
DSP_HBRIDGE_CONTROL rHBridgeControl;
|
||||
unsigned short temp;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user