Remove deprecated IRQF_DISABLED flag entirely
Subsystems (8)
PATCH 1/1 Remove deprecated IRQF_DISABLED flag entirely
The IRQF_DISABLED is a NOOP and has been scheduled for removal since Linux v2.6.36 by commit 6932bf37bed4 ("genirq: Remove IRQF_DISABLED from core code").
According to commit e58aa3d2d0cc ("genirq: Run irq handlers with interrupts disabled") running IRQ handlers with interrupts enabled can cause stack overflows when the interrupt line of the issuing device is still active.
This patch ends the grace period for IRQF_DISABLED (i.e., SA_INTERRUPT in older versions of Linux) and removes the definition and all remaining usages of this flag.
---
The bigger hunk in Documentation/scsi/ncr53c8xx.txt is removed entirely as IRQF_DISABLED is gone now; the usage in older kernel versions (including the old SA_INTERRUPT flag) should be discouraged. The trouble of using IRQF_SHARED is a general problem and not specific to any driver.
I left the reference in Documentation/PCI/MSI-HOWTO.txt untouched since it has already been removed in linux-next by commit b0e1ee8e1405 ("MSI-HOWTO.txt: remove reference on IRQF_DISABLED").
All remaining references are changelogs that I suggest to keep.
--- Documentation/scsi/ncr53c8xx.txt | 25 ------------------------- Documentation/scsi/tmscsim.txt | 4 ---- arch/mips/loongson/loongson-3/hpet.c | 2 +- drivers/block/cpqarray.c | 4 ++-- drivers/bus/omap_l3_noc.c | 4 ++-- drivers/bus/omap_l3_smx.c | 10 ++++------ drivers/mtd/nand/hisi504_nand.c | 3 +-- drivers/usb/isp1760/isp1760-core.c | 3 +-- drivers/usb/isp1760/isp1760-udc.c | 4 ++-- include/linux/interrupt.h | 3 --- 10 files changed, 13 insertions(+), 49 deletions(-)
Documentation/scsi/ncr53c8xx.txt +0 -25
@@ -786,7 +786,6 @@ port address 0x1400. irqm:1 same as initial settings (assumed BIOS settings) irqm:2 always totem pole irqm:0x10 driver will not use IRQF_SHARED flag when requesting irq - irqm:0x20 driver will not use IRQF_DISABLED flag when requesting irq (Bits 0x10 and 0x20 can be combined with hardware irq mode option)
@@ -1231,30 +1230,6 @@ they only refer to system buffers that are well aligned. So, a work around may only be needed under Linux when a scatter/gather list is not used and when the SCSI DATA IN phase is reentered after a phase mismatch. -14.5 IRQ sharing problems - -When an IRQ is shared by devices that are handled by different drivers, it -may happen that one driver complains about the request of the IRQ having -failed. Inder Linux-2.0, this may be due to one driver having requested the -IRQ using the IRQF_DISABLED flag but some other having requested the same IRQ -without this flag. Under both Linux-2.0 and linux-2.2, this may be caused by -one driver not having requested the IRQ with the IRQF_SHARED flag. - -By default, the ncr53c8xx and sym53c8xx drivers request IRQs with both the -IRQF_DISABLED and the IRQF_SHARED flag under Linux-2.0 and with only the IRQF_SHARED -flag under Linux-2.2. - -Under Linux-2.0, you can disable use of IRQF_DISABLED flag from the boot -command line by using the following option: - - ncr53c8xx=irqm:0x20 (for the generic ncr53c8xx driver) - sym53c8xx=irqm:0x20 (for the sym53c8xx driver) - -If this does not fix the problem, then you may want to check how all other -drivers are requesting the IRQ and report the problem. Note that if at least -a single driver does not request the IRQ with the IRQF_SHARED flag (share IRQ), -then the request of the IRQ obviously will not succeed for all the drivers. - 15. SCSI problem troubleshooting 15.1 Problem tracking
Documentation/scsi/tmscsim.txt +0 -4
@@ -107,10 +107,6 @@ produced errors and started to corrupt my disks. So don't do that! A 37.50 MHz PCI bus works for me, though, but I don't recommend using higher clocks than the 33.33 MHz being in the PCI spec. -If you want to share the IRQ with another device and the driver refuses to -do so, you might succeed with changing the DC390_IRQ type in tmscsim.c to -IRQF_SHARED | IRQF_DISABLED. - 3.Features ----------
arch/mips/loongson/loongson-3/hpet.c +1 -1
@@ -162,7 +162,7 @@ static irqreturn_t hpet_irq_handler(int irq, void *data)static struct irqaction hpet_irq = { .handler = hpet_irq_handler, - .flags =IRQF_DISABLED |IRQF_NOBALANCING |IRQF_TIMER , + .flags =IRQF_NOBALANCING |IRQF_TIMER , .name ="hpet" , };
drivers/block/cpqarray.c +2 -2
@@ -405,8 +405,8 @@ static int cpqarray_register_ctlr(int i, struct pci_dev *pdev) goto Enomem4; } hba[i]->access.set_intr_mask (hba[i],0 ); -if (request_irq (hba[i]->intr, do_ida_intr, -IRQF_DISABLED |IRQF_SHARED , hba[i]->devname, hba[i])) +if (request_irq (hba[i]->intr, do_ida_intr,IRQF_SHARED , + hba[i]->devname, hba[i])) {printk (KERN_ERR "cpqarray: Unable to get irq %d for %s\n" , hba[i]->intr, hba[i]->devname);
drivers/bus/omap_l3_noc.c +2 -2
@@ -284,7 +284,7 @@ static int omap_l3_probe(struct platform_device *pdev)*/ l3->debug_irq =platform_get_irq (pdev,0 ); ret =devm_request_irq (l3->dev, l3->debug_irq, l3_interrupt_handler, -IRQF_DISABLED ,"l3-dbg-irq" , l3); +0x0 ,"l3-dbg-irq" , l3);if (ret) {dev_err (l3->dev,"request_irq failed for %d\n" , l3->debug_irq);
@@ -293,7 +293,7 @@ static int omap_l3_probe(struct platform_device *pdev) l3->app_irq =platform_get_irq (pdev,1 ); ret =devm_request_irq (l3->dev, l3->app_irq, l3_interrupt_handler, -IRQF_DISABLED ,"l3-app-irq" , l3); +0x0 ,"l3-app-irq" , l3);if (ret)dev_err (l3->dev,"request_irq failed for %d\n" , l3->app_irq);
drivers/bus/omap_l3_smx.c +4 -6
@@ -251,18 +251,16 @@ static int omap3_l3_probe(struct platform_device *pdev) } l3->debug_irq =platform_get_irq (pdev,0 ); - ret =request_irq (l3->debug_irq, omap3_l3_app_irq, -IRQF_DISABLED |IRQF_TRIGGER_RISING , -"l3-debug-irq" , l3); + ret =request_irq (l3->debug_irq, omap3_l3_app_irq,IRQF_TRIGGER_RISING , +"l3-debug-irq" , l3);if (ret) {dev_err (&pdev->dev,"couldn't request debug irq\n" ); goto err1; } l3->app_irq =platform_get_irq (pdev,1 ); - ret =request_irq (l3->app_irq, omap3_l3_app_irq, -IRQF_DISABLED |IRQF_TRIGGER_RISING , -"l3-app-irq" , l3); + ret =request_irq (l3->app_irq, omap3_l3_app_irq,IRQF_TRIGGER_RISING , +"l3-app-irq" , l3);if (ret) {dev_err (&pdev->dev,"couldn't request app irq\n" ); goto err2;
drivers/mtd/nand/hisi504_nand.c +1 -2
@@ -758,8 +758,7 @@ static int hisi_nfc_probe(struct platform_device *pdev)hisi_nfc_host_init (host); - ret =devm_request_irq (dev, irq, hinfc_irq_handle,IRQF_DISABLED , -"nandc" , host); + ret =devm_request_irq (dev, irq, hinfc_irq_handle,"nandc" , host);if (ret) {dev_err (dev,"failed to request IRQ\n" ); goto err_res;
drivers/usb/isp1760/isp1760-core.c +1 -2
@@ -151,8 +151,7 @@ int isp1760_register(struct resource *mem, int irq, unsigned long irqflags, }if (IS_ENABLED (CONFIG_USB_ISP1761_UDC ) && !udc_disabled) { - ret =isp1760_udc_register (isp, irq, irqflags |IRQF_SHARED | -IRQF_DISABLED ); + ret =isp1760_udc_register (isp, irq, irqflags |IRQF_SHARED );if (ret <0 ) {isp1760_hcd_unregister (&isp->hcd);return ret;
drivers/usb/isp1760/isp1760-udc.c +2 -2
@@ -1451,8 +1451,8 @@ int isp1760_udc_register(struct isp1760_device *isp, int irq,sprintf (udc->irqname,"%s (udc)" , devname); - ret =request_irq (irq, isp1760_udc_irq,IRQF_SHARED |IRQF_DISABLED | - irqflags, udc->irqname, udc); + ret =request_irq (irq, isp1760_udc_irq,IRQF_SHARED | irqflags, + udc->irqname, udc);if (ret <0 ) goto error;
include/linux/interrupt.h +0 -3
@@ -39,8 +39,6 @@* These flags used only by the kernel as part of the * irq handling routines. * -* IRQF_DISABLED - keep irqs disabled when calling the action handler. -* DEPRECATED. This flag is a NOOP and scheduled to be removed * IRQF_SHARED - allow sharing the irq among several devices * IRQF_PROBE_SHARED - set by callers when they expect sharing mismatches to occur * IRQF_TIMER - Flag to mark this interrupt as timer interrupt
@@ -58,7 +56,6 @@* IRQF_EARLY_RESUME - Resume IRQ early during syscore instead of at device * resume time. */ -#define IRQF_DISABLED 0x00000020#define IRQF_SHARED 0x00000080#define IRQF_PROBE_SHARED 0x00000100#define __IRQF_TIMER 0x00000200
Signature · 1 line
1.9.1
drivers/mtd/nand/hisi504_nand.c static int hisi_nfc_probe(struct platform_device *pdev) · line 761
Quoted 11 lines · Valentin Rothberg
drivers/mtd/nand/hisi504_nand.c +1
-2@@ -758,8 +758,7 @@ static int hisi_nfc_probe(struct platform_device *pdev)hisi_nfc_host_init (host); - ret =devm_request_irq (dev, irq, hinfc_irq_handle,IRQF_DISABLED , -"nandc" , host); + ret =devm_request_irq (dev, irq, hinfc_irq_handle,"nandc" , host);
I think this breaks the build.
drivers/mtd/nand/hisi504_nand.c static int hisi_nfc_probe(struct platform_device *pdev) · line 764
Quoted 3 lines
drivers/mtd/nand/hisi504_nand.c +0
-0if (ret) {dev_err (dev,"failed to request IRQ\n" ); goto err_res;
regards,
dan carpenter
Quoted 7 lines · Dan Carpenter
Quoted 6 lines · Valentin Rothberg
drivers/mtd/nand/hisi504_nand.c +0
-0@@ -758,8 +758,7 @@ static int hisi_nfc_probe(struct platform_device *pdev)
Quoted 7 lines
drivers/mtd/nand/hisi504_nand.c static int hisi_nfc_probe(struct platform_device *pdev) · line 761
Quoted 5 lines
drivers/mtd/nand/hisi504_nand.c +1
-2hisi_nfc_host_init (host); - ret =devm_request_irq (dev, irq, hinfc_irq_handle,IRQF_DISABLED , -"nandc" , host); + ret =devm_request_irq (dev, irq, hinfc_irq_handle,"nandc" , host);I think this breaks the build.
You're completely right, thanks! Obviously I missed compiling this driver. I will fix it.
Kind regards,
Valentin
Quoted 21 lines · Valentin Rothberg
The
IRQF_DISABLEDis a NOOP and has been scheduled for removal since Linux v2.6.36 by commit6932bf37bed4("genirq: RemoveIRQF_DISABLEDfrom core code").According to commit
e58aa3d2d0cc("genirq: Run irq handlers with interrupts disabled") running IRQ handlers with interrupts enabled can cause stack overflows when the interrupt line of the issuing device is still active.This patch ends the grace period for
IRQF_DISABLED(i.e.,SA_INTERRUPTin older versions of Linux) and removes the definition and all remaining usages of this flag.Signed-off-by Valentin Rothberg <[email protected]>---
The bigger hunk inDocumentation/scsi/ncr53c8xx.txtis removed entirely asIRQF_DISABLEDis gone now; the usage in older kernel versions (including the oldSA_INTERRUPTflag) should be discouraged. The trouble of usingIRQF_SHAREDis a general problem and not specific to any driver.
Quoted 5 lines
I left the reference in
Documentation/PCI/MSI-HOWTO.txtuntouched since it has already been removed in linux-next by commitb0e1ee8e1405("MSI-HOWTO.txt: remove reference onIRQF_DISABLED").All remaining references are changelogs that I suggest to keep.
While you're at it: having '0x0' as a value for the irq flags looks a bit silly, and makes you wonder what the parameter is for.
I would rather like to have
#define IRQF_NONE 0x0
and use it for these cases.
That way the scope of that parameter is clear.
Cheers,
Hannes
Signature · 5 lines
Dr. Hannes Reinecke zSeries & Storage [email protected] +49 911 74053 688 SUSE LINUX GmbH, Maxfeldstr. 5, 90409 Nürnberg GF: F. Imendörffer, J. Smithard, J. Guild, D. Upmanyu, G. Norton HRB 21284 (AG Nürnberg)
Quoted 31 lines · Hannes Reinecke
Quoted 21 lines · Valentin Rothberg
The
IRQF_DISABLEDis a NOOP and has been scheduled for removal since Linux v2.6.36 by commit6932bf37bed4("genirq: RemoveIRQF_DISABLEDfrom core code").According to commit
e58aa3d2d0cc("genirq: Run irq handlers with interrupts disabled") running IRQ handlers with interrupts enabled can cause stack overflows when the interrupt line of the issuing device is still active.This patch ends the grace period for
IRQF_DISABLED(i.e.,SA_INTERRUPTin older versions of Linux) and removes the definition and all remaining usages of this flag.Signed-off-by Valentin Rothberg <[email protected]>---
The bigger hunk inDocumentation/scsi/ncr53c8xx.txtis removed entirely asIRQF_DISABLEDis gone now; the usage in older kernel versions (including the oldSA_INTERRUPTflag) should be discouraged. The trouble of usingIRQF_SHAREDis a general problem and not specific to any driver.Quoted 5 lines
I left the reference in
Documentation/PCI/MSI-HOWTO.txtuntouched since it has already been removed in linux-next by commitb0e1ee8e1405("MSI-HOWTO.txt: remove reference onIRQF_DISABLED").All remaining references are changelogs that I suggest to keep.
While you're at it: having '
0x0' as a value for the irq flags looks a bit silly, and makes you wonder what the parameter is for.
Quoted 6 lines
I would rather like to have
#define
IRQF_NONE0x0and use it for these cases.
That way the scope of that parameter is clear.
I like the idea. I checked the source code for such cases and passing 0 or 0x0 as IRQ flags appears quite often (also in the devm counterparts).
If nobody is against your proposal, then I will prepare a Coccinelle script that takes care of it and send it in a patch series (e.g., introduce definition of IRQF_NONE, the Coccinelle and following a big patch that applies changes proposed by the script).
Kind regards,
Valentin
Quoted 31 lines · Hannes Reinecke
Quoted 21 lines · Valentin Rothberg
The
IRQF_DISABLEDis a NOOP and has been scheduled for removal since Linux v2.6.36 by commit6932bf37bed4("genirq: RemoveIRQF_DISABLEDfrom core code").According to commit
e58aa3d2d0cc("genirq: Run irq handlers with interrupts disabled") running IRQ handlers with interrupts enabled can cause stack overflows when the interrupt line of the issuing device is still active.This patch ends the grace period for
IRQF_DISABLED(i.e.,SA_INTERRUPTin older versions of Linux) and removes the definition and all remaining usages of this flag.Signed-off-by Valentin Rothberg <[email protected]>---
The bigger hunk inDocumentation/scsi/ncr53c8xx.txtis removed entirely asIRQF_DISABLEDis gone now; the usage in older kernel versions (including the oldSA_INTERRUPTflag) should be discouraged. The trouble of usingIRQF_SHAREDis a general problem and not specific to any driver.Quoted 5 lines
I left the reference in
Documentation/PCI/MSI-HOWTO.txtuntouched since it has already been removed in linux-next by commitb0e1ee8e1405("MSI-HOWTO.txt: remove reference onIRQF_DISABLED").All remaining references are changelogs that I suggest to keep.
While you're at it: having '
0x0' as a value for the irq flags looks a bit silly, and makes you wonder what the parameter is for.
Quoted 6 lines
I would rather like to have
#define
IRQF_NONE0x0and use it for these cases.
That way the scope of that parameter is clear.
No, that would imply that IRQ never triggers whereas passing 0 means we keep triggers that have been set by the platform.
Thanks.
Signature · 1 line
Dmitry
Quoted 34 lines · Dmitry Torokhov
Quoted 33 lines · Hannes Reinecke
Quoted 21 lines · Valentin Rothberg
The
IRQF_DISABLEDis a NOOP and has been scheduled for removal since Linux v2.6.36 by commit6932bf37bed4("genirq: RemoveIRQF_DISABLEDfrom core code").According to commit
e58aa3d2d0cc("genirq: Run irq handlers with interrupts disabled") running IRQ handlers with interrupts enabled can cause stack overflows when the interrupt line of the issuing device is still active.This patch ends the grace period for
IRQF_DISABLED(i.e.,SA_INTERRUPTin older versions of Linux) and removes the definition and all remaining usages of this flag.Signed-off-by Valentin Rothberg <[email protected]>---
The bigger hunk inDocumentation/scsi/ncr53c8xx.txtis removed entirely asIRQF_DISABLEDis gone now; the usage in older kernel versions (including the oldSA_INTERRUPTflag) should be discouraged. The trouble of usingIRQF_SHAREDis a general problem and not specific to any driver.Quoted 5 lines
I left the reference in
Documentation/PCI/MSI-HOWTO.txtuntouched since it has already been removed in linux-next by commitb0e1ee8e1405("MSI-HOWTO.txt: remove reference onIRQF_DISABLED").All remaining references are changelogs that I suggest to keep.
While you're at it: having '
0x0' as a value for the irq flags looks a bit silly, and makes you wonder what the parameter is for.I would rather like to have
Quoted 7 lines
Quoted 4 lines
#define
IRQF_NONE0x0and use it for these cases.
That way the scope of that parameter is clear.No, that would imply that IRQ never triggers whereas passing 0 means we keep triggers that have been set by the platform.
Are you against introducing a new flag or just don't like 'IRQF_NONE'?
I think that passing 0 could mean anything when one does not know the
semantics. Combining yours and Hannes' proposal could look like this:
#define IRQF_PLAT 0x0 - keep triggers that have been set by the platform
I wrote a Coccinelle script to check for such 0-flags and find 758 cases in current Linus' mainline. The script only checks function calls to {devm_}request_{threaded_}IRQ() but does not find flags passed to wrapper functions or flags that are stored in a struct etc.
Kind regards,
Valentin
PATCH v2 1/1 Remove deprecated IRQF_DISABLED flag entirely
In reply to Valentin RothbergThe IRQF_DISABLED is a NOOP and has been scheduled for removal since Linux v2.6.36 by commit 6932bf37bed4 ("genirq: Remove IRQF_DISABLED from core code").
According to commit e58aa3d2d0cc ("genirq: Run irq handlers with interrupts disabled") running IRQ handlers with interrupts enabled can cause stack overflows when the interrupt line of the issuing device is still active.
This patch ends the grace period for IRQF_DISABLED (i.e., SA_INTERRUPT in older versions of Linux) and removes the definition and all remaining usages of this flag.
---
The bigger hunk in Documentation/scsi/ncr53c8xx.txt is removed entirely as IRQF_DISABLED is gone now; the usage in older kernel versions (including the old SA_INTERRUPT flag) should be discouraged. The trouble of using IRQF_SHARED is a general problem and not specific to any driver.
I left the reference in Documentation/PCI/MSI-HOWTO.txt untouched since it has already been removed in linux-next by commit b0e1ee8e1405 ("MSI-HOWTO.txt: remove reference on IRQF_DISABLED").
All remaining references are changelogs that I suggest to keep.
Changelog
v2: Correct previous change to drivers/mtd/nand/hisi504_nand.c that broke compilation. Reported by Dan Carpenter.
--- Documentation/scsi/ncr53c8xx.txt | 25 ------------------------- Documentation/scsi/tmscsim.txt | 4 ---- arch/mips/loongson/loongson-3/hpet.c | 2 +- drivers/block/cpqarray.c | 4 ++-- drivers/bus/omap_l3_noc.c | 4 ++-- drivers/bus/omap_l3_smx.c | 10 ++++------ drivers/mtd/nand/hisi504_nand.c | 3 +-- drivers/usb/isp1760/isp1760-core.c | 3 +-- drivers/usb/isp1760/isp1760-udc.c | 4 ++-- include/linux/interrupt.h | 3 --- 10 files changed, 13 insertions(+), 49 deletions(-)
Documentation/scsi/ncr53c8xx.txt +0 -25
@@ -786,7 +786,6 @@ port address 0x1400. irqm:1 same as initial settings (assumed BIOS settings) irqm:2 always totem pole irqm:0x10 driver will not use IRQF_SHARED flag when requesting irq - irqm:0x20 driver will not use IRQF_DISABLED flag when requesting irq (Bits 0x10 and 0x20 can be combined with hardware irq mode option)
@@ -1231,30 +1230,6 @@ they only refer to system buffers that are well aligned. So, a work around may only be needed under Linux when a scatter/gather list is not used and when the SCSI DATA IN phase is reentered after a phase mismatch. -14.5 IRQ sharing problems - -When an IRQ is shared by devices that are handled by different drivers, it -may happen that one driver complains about the request of the IRQ having -failed. Inder Linux-2.0, this may be due to one driver having requested the -IRQ using the IRQF_DISABLED flag but some other having requested the same IRQ -without this flag. Under both Linux-2.0 and linux-2.2, this may be caused by -one driver not having requested the IRQ with the IRQF_SHARED flag. - -By default, the ncr53c8xx and sym53c8xx drivers request IRQs with both the -IRQF_DISABLED and the IRQF_SHARED flag under Linux-2.0 and with only the IRQF_SHARED -flag under Linux-2.2. - -Under Linux-2.0, you can disable use of IRQF_DISABLED flag from the boot -command line by using the following option: - - ncr53c8xx=irqm:0x20 (for the generic ncr53c8xx driver) - sym53c8xx=irqm:0x20 (for the sym53c8xx driver) - -If this does not fix the problem, then you may want to check how all other -drivers are requesting the IRQ and report the problem. Note that if at least -a single driver does not request the IRQ with the IRQF_SHARED flag (share IRQ), -then the request of the IRQ obviously will not succeed for all the drivers. - 15. SCSI problem troubleshooting 15.1 Problem tracking
Documentation/scsi/tmscsim.txt +0 -4
@@ -107,10 +107,6 @@ produced errors and started to corrupt my disks. So don't do that! A 37.50 MHz PCI bus works for me, though, but I don't recommend using higher clocks than the 33.33 MHz being in the PCI spec. -If you want to share the IRQ with another device and the driver refuses to -do so, you might succeed with changing the DC390_IRQ type in tmscsim.c to -IRQF_SHARED | IRQF_DISABLED. - 3.Features ----------
arch/mips/loongson/loongson-3/hpet.c +1 -1
@@ -162,7 +162,7 @@ static irqreturn_t hpet_irq_handler(int irq, void *data)static struct irqaction hpet_irq = { .handler = hpet_irq_handler, - .flags =IRQF_DISABLED |IRQF_NOBALANCING |IRQF_TIMER , + .flags =IRQF_NOBALANCING |IRQF_TIMER , .name ="hpet" , };
drivers/block/cpqarray.c +2 -2
@@ -405,8 +405,8 @@ static int cpqarray_register_ctlr(int i, struct pci_dev *pdev) goto Enomem4; } hba[i]->access.set_intr_mask (hba[i],0 ); -if (request_irq (hba[i]->intr, do_ida_intr, -IRQF_DISABLED |IRQF_SHARED , hba[i]->devname, hba[i])) +if (request_irq (hba[i]->intr, do_ida_intr,IRQF_SHARED , + hba[i]->devname, hba[i])) {printk (KERN_ERR "cpqarray: Unable to get irq %d for %s\n" , hba[i]->intr, hba[i]->devname);
drivers/bus/omap_l3_noc.c +2 -2
@@ -284,7 +284,7 @@ static int omap_l3_probe(struct platform_device *pdev)*/ l3->debug_irq =platform_get_irq (pdev,0 ); ret =devm_request_irq (l3->dev, l3->debug_irq, l3_interrupt_handler, -IRQF_DISABLED ,"l3-dbg-irq" , l3); +0x0 ,"l3-dbg-irq" , l3);if (ret) {dev_err (l3->dev,"request_irq failed for %d\n" , l3->debug_irq);
@@ -293,7 +293,7 @@ static int omap_l3_probe(struct platform_device *pdev) l3->app_irq =platform_get_irq (pdev,1 ); ret =devm_request_irq (l3->dev, l3->app_irq, l3_interrupt_handler, -IRQF_DISABLED ,"l3-app-irq" , l3); +0x0 ,"l3-app-irq" , l3);if (ret)dev_err (l3->dev,"request_irq failed for %d\n" , l3->app_irq);
drivers/bus/omap_l3_smx.c +4 -6
@@ -251,18 +251,16 @@ static int omap3_l3_probe(struct platform_device *pdev) } l3->debug_irq =platform_get_irq (pdev,0 ); - ret =request_irq (l3->debug_irq, omap3_l3_app_irq, -IRQF_DISABLED |IRQF_TRIGGER_RISING , -"l3-debug-irq" , l3); + ret =request_irq (l3->debug_irq, omap3_l3_app_irq,IRQF_TRIGGER_RISING , +"l3-debug-irq" , l3);if (ret) {dev_err (&pdev->dev,"couldn't request debug irq\n" ); goto err1; } l3->app_irq =platform_get_irq (pdev,1 ); - ret =request_irq (l3->app_irq, omap3_l3_app_irq, -IRQF_DISABLED |IRQF_TRIGGER_RISING , -"l3-app-irq" , l3); + ret =request_irq (l3->app_irq, omap3_l3_app_irq,IRQF_TRIGGER_RISING , +"l3-app-irq" , l3);if (ret) {dev_err (&pdev->dev,"couldn't request app irq\n" ); goto err2;
drivers/mtd/nand/hisi504_nand.c +1 -2
@@ -758,8 +758,7 @@ static int hisi_nfc_probe(struct platform_device *pdev)hisi_nfc_host_init (host); - ret =devm_request_irq (dev, irq, hinfc_irq_handle,IRQF_DISABLED , -"nandc" , host); + ret =devm_request_irq (dev, irq, hinfc_irq_handle,0x0 ,"nandc" , host);if (ret) {dev_err (dev,"failed to request IRQ\n" ); goto err_res;
drivers/usb/isp1760/isp1760-core.c +1 -2
@@ -151,8 +151,7 @@ int isp1760_register(struct resource *mem, int irq, unsigned long irqflags, }if (IS_ENABLED (CONFIG_USB_ISP1761_UDC ) && !udc_disabled) { - ret =isp1760_udc_register (isp, irq, irqflags |IRQF_SHARED | -IRQF_DISABLED ); + ret =isp1760_udc_register (isp, irq, irqflags |IRQF_SHARED );if (ret <0 ) {isp1760_hcd_unregister (&isp->hcd);return ret;
drivers/usb/isp1760/isp1760-udc.c +2 -2
@@ -1451,8 +1451,8 @@ int isp1760_udc_register(struct isp1760_device *isp, int irq,sprintf (udc->irqname,"%s (udc)" , devname); - ret =request_irq (irq, isp1760_udc_irq,IRQF_SHARED |IRQF_DISABLED | - irqflags, udc->irqname, udc); + ret =request_irq (irq, isp1760_udc_irq,IRQF_SHARED | irqflags, + udc->irqname, udc);if (ret <0 ) goto error;
include/linux/interrupt.h +0 -3
@@ -39,8 +39,6 @@* These flags used only by the kernel as part of the * irq handling routines. * -* IRQF_DISABLED - keep irqs disabled when calling the action handler. -* DEPRECATED. This flag is a NOOP and scheduled to be removed * IRQF_SHARED - allow sharing the irq among several devices * IRQF_PROBE_SHARED - set by callers when they expect sharing mismatches to occur * IRQF_TIMER - Flag to mark this interrupt as timer interrupt
@@ -58,7 +56,6 @@* IRQF_EARLY_RESUME - Resume IRQ early during syscore instead of at device * resume time. */ -#define IRQF_DISABLED 0x00000020#define IRQF_SHARED 0x00000080#define IRQF_PROBE_SHARED 0x00000100#define __IRQF_TIMER 0x00000200
Signature · 1 line
1.9.1
tip-bot for Valentin Rothberg
merge bot[tip:irq/core] genirq: Remove the deprecated 'IRQF_DISABLED' request_irq() flag entirely
genirq: Remove the deprecated 'IRQF_DISABLED' request_irq() flag entirely
Commit-ID: d8bf368d0631d4bc2612d8bf2e4e8e74e620d0cc Gitweb: http://git.kernel.org/tip/d8bf368d0631d4bc2612d8bf2e4e8e74e620d0cc Author: Valentin Rothberg <[email protected]> AuthorDate: Thu, 5 Mar 2015 15:23:08 +0100 Committer: Ingo Molnar <[email protected]> CommitDate: Thu, 5 Mar 2015 20:53:06 +0100
genirq: Remove the deprecated 'IRQF_DISABLED' request_irq() flag entirely
The IRQF_DISABLED flag is a NOOP and has been scheduled for removal since Linux v2.6.36 by commit 6932bf37bed4 ("genirq: Remove IRQF_DISABLED from core code").
According to commit e58aa3d2d0cc ("genirq: Run irq handlers with interrupts disabled"), running IRQ handlers with interrupts enabled can cause stack overflows when the interrupt line of the issuing device is still active.
This patch ends the grace period for IRQF_DISABLED (i.e., SA_INTERRUPT in older versions of Linux) and removes the definition and all remaining usages of this flag.
There's still a few non-functional references left in the kernel source:
- The bigger hunk in Documentation/scsi/ncr53c8xx.txt is removed entirely as IRQF_DISABLED is gone now; the usage in older kernel versions (including the old SA_INTERRUPT flag) should be discouraged. The trouble of using IRQF_SHARED is a general problem and not specific to any driver.
- I left the reference in Documentation/PCI/MSI-HOWTO.txt untouched since it has already been removed in linux-next.
- All remaining references are changelogs that I suggest to keep.
--- Documentation/scsi/ncr53c8xx.txt | 25 ------------------------- Documentation/scsi/tmscsim.txt | 4 ---- arch/mips/loongson/loongson-3/hpet.c | 2 +- drivers/block/cpqarray.c | 4 ++-- drivers/bus/omap_l3_noc.c | 4 ++-- drivers/bus/omap_l3_smx.c | 10 ++++------ drivers/mtd/nand/hisi504_nand.c | 3 +-- drivers/usb/isp1760/isp1760-core.c | 3 +-- drivers/usb/isp1760/isp1760-udc.c | 4 ++-- include/linux/interrupt.h | 3 --- 10 files changed, 13 insertions(+), 49 deletions(-)
Documentation/scsi/ncr53c8xx.txt +0 -25
@@ -786,7 +786,6 @@ port address 0x1400. irqm:1 same as initial settings (assumed BIOS settings) irqm:2 always totem pole irqm:0x10 driver will not use IRQF_SHARED flag when requesting irq - irqm:0x20 driver will not use IRQF_DISABLED flag when requesting irq (Bits 0x10 and 0x20 can be combined with hardware irq mode option)
@@ -1231,30 +1230,6 @@ they only refer to system buffers that are well aligned. So, a work around may only be needed under Linux when a scatter/gather list is not used and when the SCSI DATA IN phase is reentered after a phase mismatch. -14.5 IRQ sharing problems - -When an IRQ is shared by devices that are handled by different drivers, it -may happen that one driver complains about the request of the IRQ having -failed. Inder Linux-2.0, this may be due to one driver having requested the -IRQ using the IRQF_DISABLED flag but some other having requested the same IRQ -without this flag. Under both Linux-2.0 and linux-2.2, this may be caused by -one driver not having requested the IRQ with the IRQF_SHARED flag. - -By default, the ncr53c8xx and sym53c8xx drivers request IRQs with both the -IRQF_DISABLED and the IRQF_SHARED flag under Linux-2.0 and with only the IRQF_SHARED -flag under Linux-2.2. - -Under Linux-2.0, you can disable use of IRQF_DISABLED flag from the boot -command line by using the following option: - - ncr53c8xx=irqm:0x20 (for the generic ncr53c8xx driver) - sym53c8xx=irqm:0x20 (for the sym53c8xx driver) - -If this does not fix the problem, then you may want to check how all other -drivers are requesting the IRQ and report the problem. Note that if at least -a single driver does not request the IRQ with the IRQF_SHARED flag (share IRQ), -then the request of the IRQ obviously will not succeed for all the drivers. - 15. SCSI problem troubleshooting 15.1 Problem tracking
Documentation/scsi/tmscsim.txt +0 -4
@@ -107,10 +107,6 @@ produced errors and started to corrupt my disks. So don't do that! A 37.50 MHz PCI bus works for me, though, but I don't recommend using higher clocks than the 33.33 MHz being in the PCI spec. -If you want to share the IRQ with another device and the driver refuses to -do so, you might succeed with changing the DC390_IRQ type in tmscsim.c to -IRQF_SHARED | IRQF_DISABLED. - 3.Features ----------
arch/mips/loongson/loongson-3/hpet.c +1 -1
@@ -162,7 +162,7 @@ static irqreturn_t hpet_irq_handler(int irq, void *data)static struct irqaction hpet_irq = { .handler = hpet_irq_handler, - .flags =IRQF_DISABLED |IRQF_NOBALANCING |IRQF_TIMER , + .flags =IRQF_NOBALANCING |IRQF_TIMER , .name ="hpet" , };
drivers/block/cpqarray.c +2 -2
@@ -405,8 +405,8 @@ static int cpqarray_register_ctlr(int i, struct pci_dev *pdev) goto Enomem4; } hba[i]->access.set_intr_mask (hba[i],0 ); -if (request_irq (hba[i]->intr, do_ida_intr, -IRQF_DISABLED |IRQF_SHARED , hba[i]->devname, hba[i])) +if (request_irq (hba[i]->intr, do_ida_intr,IRQF_SHARED , + hba[i]->devname, hba[i])) {printk (KERN_ERR "cpqarray: Unable to get irq %d for %s\n" , hba[i]->intr, hba[i]->devname);
drivers/bus/omap_l3_noc.c +2 -2
@@ -284,7 +284,7 @@ static int omap_l3_probe(struct platform_device *pdev)*/ l3->debug_irq =platform_get_irq (pdev,0 ); ret =devm_request_irq (l3->dev, l3->debug_irq, l3_interrupt_handler, -IRQF_DISABLED ,"l3-dbg-irq" , l3); +0x0 ,"l3-dbg-irq" , l3);if (ret) {dev_err (l3->dev,"request_irq failed for %d\n" , l3->debug_irq);
@@ -293,7 +293,7 @@ static int omap_l3_probe(struct platform_device *pdev) l3->app_irq =platform_get_irq (pdev,1 ); ret =devm_request_irq (l3->dev, l3->app_irq, l3_interrupt_handler, -IRQF_DISABLED ,"l3-app-irq" , l3); +0x0 ,"l3-app-irq" , l3);if (ret)dev_err (l3->dev,"request_irq failed for %d\n" , l3->app_irq);
drivers/bus/omap_l3_smx.c +4 -6
@@ -251,18 +251,16 @@ static int omap3_l3_probe(struct platform_device *pdev) } l3->debug_irq =platform_get_irq (pdev,0 ); - ret =request_irq (l3->debug_irq, omap3_l3_app_irq, -IRQF_DISABLED |IRQF_TRIGGER_RISING , -"l3-debug-irq" , l3); + ret =request_irq (l3->debug_irq, omap3_l3_app_irq,IRQF_TRIGGER_RISING , +"l3-debug-irq" , l3);if (ret) {dev_err (&pdev->dev,"couldn't request debug irq\n" ); goto err1; } l3->app_irq =platform_get_irq (pdev,1 ); - ret =request_irq (l3->app_irq, omap3_l3_app_irq, -IRQF_DISABLED |IRQF_TRIGGER_RISING , -"l3-app-irq" , l3); + ret =request_irq (l3->app_irq, omap3_l3_app_irq,IRQF_TRIGGER_RISING , +"l3-app-irq" , l3);if (ret) {dev_err (&pdev->dev,"couldn't request app irq\n" ); goto err2;
drivers/mtd/nand/hisi504_nand.c +1 -2
@@ -758,8 +758,7 @@ static int hisi_nfc_probe(struct platform_device *pdev)hisi_nfc_host_init (host); - ret =devm_request_irq (dev, irq, hinfc_irq_handle,IRQF_DISABLED , -"nandc" , host); + ret =devm_request_irq (dev, irq, hinfc_irq_handle,0x0 ,"nandc" , host);if (ret) {dev_err (dev,"failed to request IRQ\n" ); goto err_res;
drivers/usb/isp1760/isp1760-core.c +1 -2
@@ -151,8 +151,7 @@ int isp1760_register(struct resource *mem, int irq, unsigned long irqflags, }if (IS_ENABLED (CONFIG_USB_ISP1761_UDC ) && !udc_disabled) { - ret =isp1760_udc_register (isp, irq, irqflags |IRQF_SHARED | -IRQF_DISABLED ); + ret =isp1760_udc_register (isp, irq, irqflags |IRQF_SHARED );if (ret <0 ) {isp1760_hcd_unregister (&isp->hcd);return ret;
drivers/usb/isp1760/isp1760-udc.c +2 -2
@@ -1451,8 +1451,8 @@ int isp1760_udc_register(struct isp1760_device *isp, int irq,sprintf (udc->irqname,"%s (udc)" , devname); - ret =request_irq (irq, isp1760_udc_irq,IRQF_SHARED |IRQF_DISABLED | - irqflags, udc->irqname, udc); + ret =request_irq (irq, isp1760_udc_irq,IRQF_SHARED | irqflags, + udc->irqname, udc);if (ret <0 ) goto error;
include/linux/interrupt.h +0 -3
@@ -39,8 +39,6 @@* These flags used only by the kernel as part of the * irq handling routines. * -* IRQF_DISABLED - keep irqs disabled when calling the action handler. -* DEPRECATED. This flag is a NOOP and scheduled to be removed * IRQF_SHARED - allow sharing the irq among several devices * IRQF_PROBE_SHARED - set by callers when they expect sharing mismatches to occur * IRQF_TIMER - Flag to mark this interrupt as timer interrupt
@@ -58,7 +56,6 @@* IRQF_EARLY_RESUME - Resume IRQ early during syscore instead of at device * resume time. */ -#define IRQF_DISABLED 0x00000020#define IRQF_SHARED 0x00000080#define IRQF_PROBE_SHARED 0x00000100#define __IRQF_TIMER 0x00000200
Quoted 9 lines · Valentin Rothberg
The
IRQF_DISABLEDis a NOOP and has been scheduled for removal since Linux v2.6.36 by commit6932bf37bed4("genirq: RemoveIRQF_DISABLEDfrom core code").According to commit
e58aa3d2d0cc("genirq: Run irq handlers with interrupts disabled") running IRQ handlers with interrupts enabled can cause stack overflows when the interrupt line of the issuing device is still active.
Quoted 5 lines
This patch ends the grace period for
IRQF_DISABLED(i.e.,SA_INTERRUPTin older versions of Linux) and removes the definition and all remaining usages of this flag.Signed-off-by Valentin Rothberg <[email protected]>
Quoted 31 lines · Valentin Rothberg
The
IRQF_DISABLEDis a NOOP and has been scheduled for removal since Linux v2.6.36 by commit6932bf37bed4("genirq: RemoveIRQF_DISABLEDfrom core code").According to commit
e58aa3d2d0cc("genirq: Run irq handlers with interrupts disabled") running IRQ handlers with interrupts enabled can cause stack overflows when the interrupt line of the issuing device is still active.This patch ends the grace period for
IRQF_DISABLED(i.e.,SA_INTERRUPTin older versions of Linux) and removes the definition and all remaining usages of this flag.Signed-off-by Valentin Rothberg <[email protected]>---
The bigger hunk inDocumentation/scsi/ncr53c8xx.txtis removed entirely asIRQF_DISABLEDis gone now; the usage in older kernel versions (including the oldSA_INTERRUPTflag) should be discouraged. The trouble of usingIRQF_SHAREDis a general problem and not specific to any driver.I left the reference in
Documentation/PCI/MSI-HOWTO.txtuntouched since it has already been removed in linux-next by commitb0e1ee8e1405("MSI-HOWTO.txt: remove reference onIRQF_DISABLED").All remaining references are changelogs that I suggest to keep.
Changelog
v2: Correct previous change to
drivers/mtd/nand/hisi504_nand.cthat broke compilation. Reported by Dan Carpenter.
Quoted 13 lines
--- Documentation/scsi/ncr53c8xx.txt | 25 ------------------------- Documentation/scsi/tmscsim.txt | 4 ---- arch/mips/loongson/loongson-3/hpet.c | 2 +- drivers/block/cpqarray.c | 4 ++-- drivers/bus/omap_l3_noc.c | 4 ++-- drivers/bus/omap_l3_smx.c | 10 ++++------ drivers/mtd/nand/hisi504_nand.c | 3 +-- drivers/usb/isp1760/isp1760-core.c | 3 +-- drivers/usb/isp1760/isp1760-udc.c | 4 ++-- include/linux/interrupt.h | 3 --- 10 files changed, 13 insertions(+), 49 deletions(-)
For this piece:
Quoted 5 lines
drivers/mtd/nand/hisi504_nand.c +0
-0
drivers/mtd/nand/hisi504_nand.c static int hisi_nfc_probe(struct platform_device *pdev) · line 764
Quoted 9 lines
drivers/mtd/nand/hisi504_nand.c +1
-2@@ -758,8 +758,7 @@ static int hisi_nfc_probe(struct platform_device *pdev)hisi_nfc_host_init (host); - ret =devm_request_irq (dev, irq, hinfc_irq_handle,IRQF_DISABLED , -"nandc" , host); + ret =devm_request_irq (dev, irq, hinfc_irq_handle,0x0 ,"nandc" , host);if (ret) {dev_err (dev,"failed to request IRQ\n" ); goto err_res;
Sorry for the oversight in review, and thanks for the fixup.
Brian
Hi,
Quoted 27 lines · Valentin Rothberg
The
IRQF_DISABLEDis a NOOP and has been scheduled for removal since Linux v2.6.36 by commit6932bf37bed4("genirq: RemoveIRQF_DISABLEDfrom core code").According to commit
e58aa3d2d0cc("genirq: Run irq handlers with interrupts disabled") running IRQ handlers with interrupts enabled can cause stack overflows when the interrupt line of the issuing device is still active.This patch ends the grace period for
IRQF_DISABLED(i.e.,SA_INTERRUPTin older versions of Linux) and removes the definition and all remaining usages of this flag.Signed-off-by Valentin Rothberg <[email protected]>---
The bigger hunk inDocumentation/scsi/ncr53c8xx.txtis removed entirely asIRQF_DISABLEDis gone now; the usage in older kernel versions (including the oldSA_INTERRUPTflag) should be discouraged. The trouble of usingIRQF_SHAREDis a general problem and not specific to any driver.I left the reference in
Documentation/PCI/MSI-HOWTO.txtuntouched since it has already been removed in linux-next by commitb0e1ee8e1405("MSI-HOWTO.txt: remove reference onIRQF_DISABLED").All remaining references are changelogs that I suggest to keep.
Quoted 7 lines
Changelog
v2: Correct previous change to
drivers/mtd/nand/hisi504_nand.cthat broke compilation. Reported by Dan Carpenter.--- drivers/usb/isp1760/isp1760-core.c | 3 +-- drivers/usb/isp1760/isp1760-udc.c | 4 ++--
I have a commit in my tree for isp1760:
Signature · 1 line
balbi
Quoted 38 lines · Felipe Balbi
Hi,
Quoted 27 lines · Valentin Rothberg
The
IRQF_DISABLEDis a NOOP and has been scheduled for removal since Linux v2.6.36 by commit6932bf37bed4("genirq: RemoveIRQF_DISABLEDfrom core code").According to commit
e58aa3d2d0cc("genirq: Run irq handlers with interrupts disabled") running IRQ handlers with interrupts enabled can cause stack overflows when the interrupt line of the issuing device is still active.This patch ends the grace period for
IRQF_DISABLED(i.e.,SA_INTERRUPTin older versions of Linux) and removes the definition and all remaining usages of this flag.Signed-off-by Valentin Rothberg <[email protected]>---
The bigger hunk inDocumentation/scsi/ncr53c8xx.txtis removed entirely asIRQF_DISABLEDis gone now; the usage in older kernel versions (including the oldSA_INTERRUPTflag) should be discouraged. The trouble of usingIRQF_SHAREDis a general problem and not specific to any driver.I left the reference in
Documentation/PCI/MSI-HOWTO.txtuntouched since it has already been removed in linux-next by commitb0e1ee8e1405("MSI-HOWTO.txt: remove reference onIRQF_DISABLED").All remaining references are changelogs that I suggest to keep.
Quoted 7 lines
Changelog
v2: Correct previous change to
drivers/mtd/nand/hisi504_nand.cthat broke compilation. Reported by Dan Carpenter.--- drivers/usb/isp1760/isp1760-core.c | 3 +-- drivers/usb/isp1760/isp1760-udc.c | 4 ++--
Quoted 3 lines
I have a commit in my tree for isp1760:
I am sorry, but I did not receive an email that it has been applied. Andrew asked me to do this patch, so I replied to the one you mentioned to avoid this conflict:
http://comments.gmane.org/gmane.linux.kernel/1896211
Kind regards,
Valentin
Quoted 39 lines · Valentin Rothberg
Quoted 38 lines · Felipe Balbi
Hi,
Quoted 34 lines · Valentin Rothberg
The
IRQF_DISABLEDis a NOOP and has been scheduled for removal since Linux v2.6.36 by commit6932bf37bed4("genirq: RemoveIRQF_DISABLEDfrom core code").According to commit
e58aa3d2d0cc("genirq: Run irq handlers with interrupts disabled") running IRQ handlers with interrupts enabled can cause stack overflows when the interrupt line of the issuing device is still active.This patch ends the grace period for
IRQF_DISABLED(i.e.,SA_INTERRUPTin older versions of Linux) and removes the definition and all remaining usages of this flag.Signed-off-by Valentin Rothberg <[email protected]>---
The bigger hunk inDocumentation/scsi/ncr53c8xx.txtis removed entirely asIRQF_DISABLEDis gone now; the usage in older kernel versions (including the oldSA_INTERRUPTflag) should be discouraged. The trouble of usingIRQF_SHAREDis a general problem and not specific to any driver.I left the reference in
Documentation/PCI/MSI-HOWTO.txtuntouched since it has already been removed in linux-next by commitb0e1ee8e1405("MSI-HOWTO.txt: remove reference onIRQF_DISABLED").All remaining references are changelogs that I suggest to keep.
Changelog
v2: Correct previous change to
drivers/mtd/nand/hisi504_nand.cthat broke compilation. Reported by Dan Carpenter.--- drivers/usb/isp1760/isp1760-core.c | 3 +-- drivers/usb/isp1760/isp1760-udc.c | 4 ++--
Quoted 7 lines
Quoted 3 lines
I have a commit in my tree for isp1760:
I am sorry, but I did not receive an email that it has been applied. Andrew asked me to do this patch, so I replied to the one you mentioned to avoid this conflict:
it's still in my testing/fixes, it'll be moved to fixes after I finish testing that branch, then you'll receive an email
Signature · 1 line
balbi