[OpenWrt-Devel] [PATCH v2] lantiq: fix use of IRQF_DISABLED in lantiq kmods

Mathias Kresin openwrt at kresin.me
Sun Oct 11 09:39:48 EDT 2015


The IRQF_DISABLED flag was removed in kernel 4.1 with commit
"genirq: Remove the deprecated 'IRQF_DISABLED' request_irq() flag entirely" [1].

Therefore the compilation of ltq-hcd and ltq-vmmc kmods fails.

[1] https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/?id=d8bf368d0631d4bc2612d8bf2e4e8e74e620d0cc

Signed-off-by: Mathias Kresin <openwrt at kresin.me>

---

The issue was reported in https://dev.openwrt.org/ticket/20679 and the
v1 patch was successfully test by an affected user.

v2:

Remove IRQF_DISABLED flags or replace them with 0x0 instead of using
conditional compile statements. IRQF_DISABLED has been a NOOP since
kernel 2.6.35, so this approach should be safe for all kernel versions
supported by OpenWrt at the moment. Due to lack of hardware and testers,
v2 is only compile tested with kernel 4.1 and 3.18.

 package/kernel/lantiq/ltq-hcd/src/ifxhcd.c         |  5 +-
 package/kernel/lantiq/ltq-hcd/src/ifxusb_cif_h.c   |  4 --
 .../lantiq/ltq-vmmc/patches/200-compat.patch       | 56 ++++++++++++++++++++++
 .../lantiq/ltq-vmmc/patches/200-linux-310.patch    | 33 -------------
 .../lantiq/ltq-vmmc/patches/400-falcon.patch       | 10 ++--
 ...2C-MIPS-lantiq-add-FALC-ON-i2c-bus-master.patch |  8 ++--
 6 files changed, 66 insertions(+), 50 deletions(-)
 create mode 100644 package/kernel/lantiq/ltq-vmmc/patches/200-compat.patch
 delete mode 100644 package/kernel/lantiq/ltq-vmmc/patches/200-linux-310.patch

diff --git a/package/kernel/lantiq/ltq-hcd/src/ifxhcd.c b/package/kernel/lantiq/ltq-hcd/src/ifxhcd.c
index be0a91d..3fb00e0 100644
--- a/package/kernel/lantiq/ltq-hcd/src/ifxhcd.c
+++ b/package/kernel/lantiq/ltq-hcd/src/ifxhcd.c
@@ -701,10 +701,7 @@ int ifxhcd_init(ifxhcd_hcd_t *_ifxhcd)
 	 * allocates the DMA buffer pool, registers the USB bus, requests the
 	 * IRQ line, and calls ifxusb_hcd_start method.
 	 */
-	retval = usb_add_hcd(syshcd, _ifxhcd->core_if.irq, 0
-			                                   |IRQF_DISABLED
-			                                   |IRQF_SHARED
-							   );
+	retval = usb_add_hcd(syshcd, _ifxhcd->core_if.irq, 0 | IRQF_SHARED);
 	if (retval < 0)
 		goto error2;
 
diff --git a/package/kernel/lantiq/ltq-hcd/src/ifxusb_cif_h.c b/package/kernel/lantiq/ltq-hcd/src/ifxusb_cif_h.c
index e9e67bf..1fcdebf 100644
--- a/package/kernel/lantiq/ltq-hcd/src/ifxusb_cif_h.c
+++ b/package/kernel/lantiq/ltq-hcd/src/ifxusb_cif_h.c
@@ -778,7 +778,6 @@ void ifxusb_vbus_free(ifxusb_core_if_t *_core_if)
 			//					     | IRQF_TRIGGER_HIGH
 			//					     | IRQF_TRIGGER_LOW
 			//					     | IRQF_TRIGGER_PROBE
-								     | IRQF_DISABLED
 			//					     | IRQF_SAMPLE_RANDOM
 			//					     | IRQF_SHARED
 								     | IRQF_PROBE_SHARED
@@ -806,7 +805,6 @@ void ifxusb_vbus_free(ifxusb_core_if_t *_core_if)
 			//					     | IRQF_TRIGGER_HIGH
 			//					     | IRQF_TRIGGER_LOW
 			//					     | IRQF_TRIGGER_PROBE
-								     | IRQF_DISABLED
 			//					     | IRQF_SAMPLE_RANDOM
 			//					     | IRQF_SHARED
 								     | IRQF_PROBE_SHARED
@@ -1009,7 +1007,6 @@ void ifxusb_vbus_free(ifxusb_core_if_t *_core_if)
 		//					  | IRQF_TRIGGER_HIGH
 		//					  | IRQF_TRIGGER_LOW
 		//					  | IRQF_TRIGGER_PROBE
-							  | IRQF_DISABLED
 		//					  | IRQF_SAMPLE_RANDOM
 		//					  | IRQF_SHARED
 							  | IRQF_PROBE_SHARED
@@ -1174,7 +1171,6 @@ void ifxusb_vbus_free(ifxusb_core_if_t *_core_if)
 	//					  | IRQF_TRIGGER_HIGH
 	//					  | IRQF_TRIGGER_LOW
 	//					  | IRQF_TRIGGER_PROBE
-						  | IRQF_DISABLED
 	//					  | IRQF_SAMPLE_RANDOM
 	//					  | IRQF_SHARED
 	//					  | IRQF_PROBE_SHARED
diff --git a/package/kernel/lantiq/ltq-vmmc/patches/200-compat.patch b/package/kernel/lantiq/ltq-vmmc/patches/200-compat.patch
new file mode 100644
index 0000000..bf9f17e
--- /dev/null
+++ b/package/kernel/lantiq/ltq-vmmc/patches/200-compat.patch
@@ -0,0 +1,56 @@
+--- a/src/drv_vmmc_linux.c
++++ b/src/drv_vmmc_linux.c
+@@ -54,6 +54,8 @@
+ #include "drv_vmmc_res.h"
+ #endif /* (VMMC_CFG_FEATURES & VMMC_FEAT_HDLC) */
+
++#undef VMMC_USE_PROC
++
+ /* ============================= */
+ /* Local Macros & Definitions    */
+ /* ============================= */
+--- a/src/mps/drv_mps_vmmc_linux.c
++++ b/src/mps/drv_mps_vmmc_linux.c
+@@ -80,11 +80,15 @@
+ /* ============================= */
+ #define IFX_MPS_DEV_NAME       "ifx_mps"
+
++#undef CONFIG_MPS_HISTORY_SIZE
++#define CONFIG_MPS_HISTORY_SIZE 0
+ #ifndef CONFIG_MPS_HISTORY_SIZE
+ #define CONFIG_MPS_HISTORY_SIZE 128
+ #warning CONFIG_MPS_HISTORY_SIZE should have been set via cofigure - setting to default 128
+ #endif
+
++#undef CONFIG_PROC_FS
++
+ /* ============================= */
+ /* Global variable definition    */
+ /* ============================= */
+@@ -2257,7 +2261,7 @@ IFX_int32_t __init ifx_mps_init_module (
+    ifx_mps_reset ();
+    result = request_irq (INT_NUM_IM4_IRL18,
+ #ifdef LINUX_2_6
+-                         ifx_mps_ad0_irq, IRQF_DISABLED
++                         ifx_mps_ad0_irq, 0x0
+ #else /* */
+                          (irqreturn_t (*)(int, IFX_void_t *, struct pt_regs *))
+                          ifx_mps_ad0_irq, SA_INTERRUPT
+@@ -2267,7 +2271,7 @@ IFX_int32_t __init ifx_mps_init_module (
+       return result;
+    result = request_irq (INT_NUM_IM4_IRL19,
+ #ifdef LINUX_2_6
+-                         ifx_mps_ad1_irq, IRQF_DISABLED
++                         ifx_mps_ad1_irq, 0x0
+ #else /* */
+                          (irqreturn_t (*)(int, IFX_void_t *, struct pt_regs *))
+                          ifx_mps_ad1_irq, SA_INTERRUPT
+@@ -2282,7 +2286,7 @@ IFX_int32_t __init ifx_mps_init_module (
+       sprintf (&voice_channel_int_name[i][0], "mps_mbx vc%d", i);
+       result = request_irq (INT_NUM_IM4_IRL14 + i,
+ #ifdef LINUX_2_6
+-                            ifx_mps_vc_irq, IRQF_DISABLED
++                            ifx_mps_vc_irq, 0x0
+ #else /* */
+                             (irqreturn_t (*)
+                              (int, IFX_void_t *,
diff --git a/package/kernel/lantiq/ltq-vmmc/patches/200-linux-310.patch b/package/kernel/lantiq/ltq-vmmc/patches/200-linux-310.patch
deleted file mode 100644
index 70f8829..0000000
--- a/package/kernel/lantiq/ltq-vmmc/patches/200-linux-310.patch
+++ /dev/null
@@ -1,33 +0,0 @@
-Index: drv_vmmc-1.9.0/src/drv_vmmc_linux.c
-===================================================================
---- drv_vmmc-1.9.0.orig/src/drv_vmmc_linux.c	2013-09-05 22:34:31.920428685 +0200
-+++ drv_vmmc-1.9.0/src/drv_vmmc_linux.c	2013-09-05 22:35:54.940430772 +0200
-@@ -54,6 +54,8 @@
- #include "drv_vmmc_res.h"
- #endif /* (VMMC_CFG_FEATURES & VMMC_FEAT_HDLC) */
- 
-+#undef VMMC_USE_PROC
-+
- /* ============================= */
- /* Local Macros & Definitions    */
- /* ============================= */
-Index: drv_vmmc-1.9.0/src/mps/drv_mps_vmmc_linux.c
-===================================================================
---- drv_vmmc-1.9.0.orig/src/mps/drv_mps_vmmc_linux.c	2013-09-05 22:34:31.988428687 +0200
-+++ drv_vmmc-1.9.0/src/mps/drv_mps_vmmc_linux.c	2013-09-05 22:54:01.544458009 +0200
-@@ -80,11 +80,15 @@
- /* ============================= */
- #define IFX_MPS_DEV_NAME       "ifx_mps"
- 
-+#undef CONFIG_MPS_HISTORY_SIZE
-+#define CONFIG_MPS_HISTORY_SIZE 0
- #ifndef CONFIG_MPS_HISTORY_SIZE
- #define CONFIG_MPS_HISTORY_SIZE 128
- #warning CONFIG_MPS_HISTORY_SIZE should have been set via cofigure - setting to default 128
- #endif
- 
-+#undef CONFIG_PROC_FS
-+
- /* ============================= */
- /* Global variable definition    */
- /* ============================= */
diff --git a/package/kernel/lantiq/ltq-vmmc/patches/400-falcon.patch b/package/kernel/lantiq/ltq-vmmc/patches/400-falcon.patch
index 490d6e5..d2afc65 100644
--- a/package/kernel/lantiq/ltq-vmmc/patches/400-falcon.patch
+++ b/package/kernel/lantiq/ltq-vmmc/patches/400-falcon.patch
@@ -154,7 +154,7 @@
  #define IFX_MPS_PLATFORM_NAME "MIPS24KEc"
 --- a/src/mps/drv_mps_vmmc_linux.c
 +++ b/src/mps/drv_mps_vmmc_linux.c
-@@ -2225,7 +2225,7 @@ IFX_int32_t __init ifx_mps_init_module (
+@@ -2229,7 +2229,7 @@ IFX_int32_t __init ifx_mps_init_module (
  #if defined(CONFIG_MIPS) && !defined(CONFIG_MIPS_UNCACHED)
  #if defined(SYSTEM_DANUBE)
     bDoCacheOps = IFX_TRUE; /* on Danube always perform cache ops */
@@ -163,7 +163,7 @@
     /* on AR9/VR9 cache is configured by BSP;
        here we check whether the D-cache is shared or partitioned;
        1) in case of shared D-cache all cache operations are omitted;
-@@ -2255,7 +2255,8 @@ IFX_int32_t __init ifx_mps_init_module (
+@@ -2259,7 +2259,8 @@ IFX_int32_t __init ifx_mps_init_module (
  
     /* reset the device before initializing the device driver */
     ifx_mps_reset ();
@@ -171,9 +171,9 @@
 +
 +  result = request_irq (INT_NUM_IM4_IRL18,
  #ifdef LINUX_2_6
-                          ifx_mps_ad0_irq, IRQF_DISABLED
+                          ifx_mps_ad0_irq, 0x0
  #else /* */
-@@ -2396,7 +2397,7 @@ IFX_int32_t __init ifx_mps_init_module (
+@@ -2400,7 +2401,7 @@ IFX_int32_t __init ifx_mps_init_module (
     if (result = ifx_mps_init_gpt_danube ())
        return result;
  #endif /*DANUBE*/
@@ -718,7 +718,7 @@
     pMPSDev->event.MPS_Ad1Reg.val = MPS_Ad1StatusReg.val;
  
     /* use callback function or queue wake up to notify about data reception */
-@@ -2977,11 +2990,13 @@ irqreturn_t ifx_mps_vc_irq (IFX_int32_t 
+@@ -2977,11 +2990,13 @@ irqreturn_t ifx_mps_vc_irq (IFX_int32_t
     IFX_MPS_CVC0SR[chan] = MPS_VCStatusReg.val;
     /* handle only enabled interrupts */
     MPS_VCStatusReg.val &= IFX_MPS_VC0ENR[chan];
diff --git a/target/linux/lantiq/patches-4.1/0031-I2C-MIPS-lantiq-add-FALC-ON-i2c-bus-master.patch b/target/linux/lantiq/patches-4.1/0031-I2C-MIPS-lantiq-add-FALC-ON-i2c-bus-master.patch
index 164c947..0fe9f04 100644
--- a/target/linux/lantiq/patches-4.1/0031-I2C-MIPS-lantiq-add-FALC-ON-i2c-bus-master.patch
+++ b/target/linux/lantiq/patches-4.1/0031-I2C-MIPS-lantiq-add-FALC-ON-i2c-bus-master.patch
@@ -668,7 +668,7 @@ Signed-off-by: John Crispin <blogic at openwrt.org>
 +	priv->irq_lb = irqres[0].start;
 +
 +	ret = devm_request_irq(&pdev->dev, irqres[0].start, ltq_i2c_isr_burst,
-+		IRQF_DISABLED, "i2c lb", priv);
++		0x0, "i2c lb", priv);
 +	if (ret) {
 +		dev_err(&pdev->dev, "can't get last burst IRQ %d\n",
 +			irqres[0].start);
@@ -676,7 +676,7 @@ Signed-off-by: John Crispin <blogic at openwrt.org>
 +	}
 +
 +	ret = devm_request_irq(&pdev->dev, irqres[1].start, ltq_i2c_isr_burst,
-+		IRQF_DISABLED, "i2c b", priv);
++		0x0, "i2c b", priv);
 +	if (ret) {
 +		dev_err(&pdev->dev, "can't get burst IRQ %d\n",
 +			irqres[1].start);
@@ -684,7 +684,7 @@ Signed-off-by: John Crispin <blogic at openwrt.org>
 +	}
 +
 +	ret = devm_request_irq(&pdev->dev, irqres[2].start, ltq_i2c_isr,
-+		IRQF_DISABLED, "i2c err", priv);
++		0x0, "i2c err", priv);
 +	if (ret) {
 +		dev_err(&pdev->dev, "can't get error IRQ %d\n",
 +			irqres[2].start);
@@ -692,7 +692,7 @@ Signed-off-by: John Crispin <blogic at openwrt.org>
 +	}
 +
 +	ret = devm_request_irq(&pdev->dev, irqres[3].start, ltq_i2c_isr,
-+		IRQF_DISABLED, "i2c p", priv);
++		0x0, "i2c p", priv);
 +	if (ret) {
 +		dev_err(&pdev->dev, "can't get protocol IRQ %d\n",
 +			irqres[3].start);
-- 
1.9.1
_______________________________________________
openwrt-devel mailing list
openwrt-devel at lists.openwrt.org
https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel



More information about the openwrt-devel mailing list