--- /dev/null
+--- 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;
+ }
+