[OpenWrt-Devel] [PATCH] lantiq: fix use of IRQF_DISABLED in lantiq kmods
Arjen de Korte
arjen+openwrt at de-korte.org
Sun Oct 11 04:50:04 EDT 2015
Citeren Mathias Kresin <openwrt at kresin.me>:
> 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
> patch was successfully test by an affected user.
>
> package/kernel/lantiq/ltq-hcd/src/ifxhcd.c | 2 +
> package/kernel/lantiq/ltq-hcd/src/ifxusb_cif_h.c | 8 +++
> .../lantiq/ltq-vmmc/patches/200-compat.patch | 65
> ++++++++++++++++++++++
> .../lantiq/ltq-vmmc/patches/200-linux-310.patch | 33 -----------
> .../lantiq/ltq-vmmc/patches/400-falcon.patch | 12 ++--
> ...2C-MIPS-lantiq-add-FALC-ON-i2c-bus-master.patch | 8 +--
> 6 files changed, 85 insertions(+), 43 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..14dc7a1 100644
> --- a/package/kernel/lantiq/ltq-hcd/src/ifxhcd.c
> +++ b/package/kernel/lantiq/ltq-hcd/src/ifxhcd.c
> @@ -702,7 +702,9 @@ int ifxhcd_init(ifxhcd_hcd_t *_ifxhcd)
> * IRQ line, and calls ifxusb_hcd_start method.
> */
> retval = usb_add_hcd(syshcd, _ifxhcd->core_if.irq, 0
> +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,1,0)
> |IRQF_DISABLED
> +#endif
Why the conditional compile statement? The IRQF_DISABLED has been a
NOOP since kernel 2.6.35, so it should be safe to remove for all
current versions of OpenWRT. So this really should be
- |IRQF_DISABLED
instead.
Arjen
> |IRQF_SHARED
> );
> if (retval < 0)
> 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..0219fff 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,9 @@ void ifxusb_vbus_free(ifxusb_core_if_t *_core_if)
> // | IRQF_TRIGGER_HIGH
> // | IRQF_TRIGGER_LOW
> // | IRQF_TRIGGER_PROBE
> +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,1,0)
> | IRQF_DISABLED
> +#endif
> // | IRQF_SAMPLE_RANDOM
> // | IRQF_SHARED
> | IRQF_PROBE_SHARED
> @@ -806,7 +808,9 @@ void ifxusb_vbus_free(ifxusb_core_if_t *_core_if)
> // | IRQF_TRIGGER_HIGH
> // | IRQF_TRIGGER_LOW
> // | IRQF_TRIGGER_PROBE
> +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,1,0)
> | IRQF_DISABLED
> +#endif
> // | IRQF_SAMPLE_RANDOM
> // | IRQF_SHARED
> | IRQF_PROBE_SHARED
> @@ -1009,7 +1013,9 @@ void ifxusb_vbus_free(ifxusb_core_if_t *_core_if)
> // | IRQF_TRIGGER_HIGH
> // | IRQF_TRIGGER_LOW
> // | IRQF_TRIGGER_PROBE
> +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,1,0)
> | IRQF_DISABLED
> +#endif
> // | IRQF_SAMPLE_RANDOM
> // | IRQF_SHARED
> | IRQF_PROBE_SHARED
> @@ -1174,7 +1180,9 @@ void ifxusb_vbus_free(ifxusb_core_if_t *_core_if)
> // | IRQF_TRIGGER_HIGH
> // | IRQF_TRIGGER_LOW
> // | IRQF_TRIGGER_PROBE
> +#if LINUX_VERSION_CODE < KERNEL_VERSION(4,1,0)
> | IRQF_DISABLED
> +#endif
> // | 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..0a79018
> --- /dev/null
> +++ b/package/kernel/lantiq/ltq-vmmc/patches/200-compat.patch
> @@ -0,0 +1,65 @@
> +--- 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,11 @@ IFX_int32_t __init ifx_mps_init_module (
> + ifx_mps_reset ();
> + result = request_irq (INT_NUM_IM4_IRL18,
> + #ifdef LINUX_2_6
> ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,1,0)
> ++ ifx_mps_ad0_irq, 0x0
> ++#else
> + ifx_mps_ad0_irq, IRQF_DISABLED
> ++#endif
> + #else /* */
> + (irqreturn_t (*)(int, IFX_void_t *,
> struct pt_regs *))
> + ifx_mps_ad0_irq, SA_INTERRUPT
> +@@ -2267,7 +2275,11 @@ IFX_int32_t __init ifx_mps_init_module (
> + return result;
> + result = request_irq (INT_NUM_IM4_IRL19,
> + #ifdef LINUX_2_6
> ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,1,0)
> ++ ifx_mps_ad1_irq, 0x0
> ++#else
> + ifx_mps_ad1_irq, IRQF_DISABLED
> ++#endif
> + #else /* */
> + (irqreturn_t (*)(int, IFX_void_t *,
> struct pt_regs *))
> + ifx_mps_ad1_irq, SA_INTERRUPT
> +@@ -2282,7 +2294,11 @@ 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
> ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,1,0)
> ++ ifx_mps_vc_irq, 0x0
> ++#else
> + ifx_mps_vc_irq, IRQF_DISABLED
> ++#endif
> + #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..037057e 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
> - #else /* */
> -@@ -2396,7 +2397,7 @@ IFX_int32_t __init ifx_mps_init_module (
> + #if LINUX_VERSION_CODE >= KERNEL_VERSION(4,1,0)
> + ifx_mps_ad0_irq, 0x0
> +@@ -2412,7 +2413,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
_______________________________________________
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