aboutsummaryrefslogtreecommitdiffstats
path: root/package/kernel/lantiq
diff options
context:
space:
mode:
Diffstat (limited to 'package/kernel/lantiq')
-rw-r--r--package/kernel/lantiq/ltq-vdsl-mei/Makefile2
-rw-r--r--package/kernel/lantiq/ltq-vdsl-mei/patches/200-interrupt-lock.patch45
2 files changed, 46 insertions, 1 deletions
diff --git a/package/kernel/lantiq/ltq-vdsl-mei/Makefile b/package/kernel/lantiq/ltq-vdsl-mei/Makefile
index d4a5ea720b..b7060eb2b4 100644
--- a/package/kernel/lantiq/ltq-vdsl-mei/Makefile
+++ b/package/kernel/lantiq/ltq-vdsl-mei/Makefile
@@ -9,7 +9,7 @@ include $(INCLUDE_DIR)/kernel.mk
PKG_NAME:=ltq-vdsl-vr9-mei
PKG_VERSION:=1.5.17.6
-PKG_RELEASE:=5
+PKG_RELEASE:=6
PKG_BASE_NAME:=drv_mei_cpe
PKG_SOURCE:=$(PKG_BASE_NAME)-$(PKG_VERSION).tar.gz
diff --git a/package/kernel/lantiq/ltq-vdsl-mei/patches/200-interrupt-lock.patch b/package/kernel/lantiq/ltq-vdsl-mei/patches/200-interrupt-lock.patch
new file mode 100644
index 0000000000..a677ccec55
--- /dev/null
+++ b/package/kernel/lantiq/ltq-vdsl-mei/patches/200-interrupt-lock.patch
@@ -0,0 +1,45 @@
+--- 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;
+ }
+