--- a/src/drv_mei_cpe_common.c +++ b/src/drv_mei_cpe_common.c @@ -104,6 +104,8 @@ IFX_uint32_t MEI_FsmStateSetMsgPreAction MEI_DEVCFG_DATA_T MEI_DevCfgData; #endif +static DEFINE_SPINLOCK(MEI_InterruptLock); + /* ============================================================================ Proc-FS and debug variable definitions ========================================================================= */ @@ -2134,6 +2136,9 @@ IFX_int32_t MEI_ProcessIntPerIrq(MEIX_CN #if (MEI_SUPPORT_DEBUG_STREAMS == 1) IFX_int_t extraDbgStreamLoop = 0; #endif + unsigned long flags; + + spin_lock_irqsave(&MEI_InterruptLock, flags); /* get the actual chip device from the list and step through the VRX devices */ while(pNextXCntrl) @@ -2167,6 +2172,8 @@ IFX_int32_t MEI_ProcessIntPerIrq(MEIX_CN } #endif + spin_unlock_irqrestore(&MEI_InterruptLock, flags); + return meiIntCnt; } @@ -2639,9 +2646,14 @@ IFX_int32_t MEI_MsgSendPreAction( */ IFX_void_t MEI_DisableDeviceInt(MEI_DEV_T *pMeiDev) { + unsigned long flags; + spin_lock_irqsave(&MEI_InterruptLock, flags); + MEI_MaskInterrupts( &pMeiDev->meiDrvCntrl, ME_ARC2ME_INTERRUPT_MASK_ALL); + spin_unlock_irqrestore(&MEI_InterruptLock, flags); + return; }