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 <open...@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 <blo...@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 <blo...@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 <blo...@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 <blo...@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@lists.openwrt.org https://lists.openwrt.org/cgi-bin/mailman/listinfo/openwrt-devel