* [patch 02/26] powerpc:evh_pic: Kill irq_desc abuse [not found] <20140223212703.511977310@linutronix.de> @ 2014-02-23 21:40 ` Thomas Gleixner 2014-03-04 16:39 ` [tip:irq/core] powerpc:eVh_pic: " tip-bot for Thomas Gleixner 2014-02-23 21:40 ` [patch 01/26] powerpc: irq: Use generic_handle_irq Thomas Gleixner 2014-02-23 21:40 ` [patch 03/26] powerpc: eeh: Kill another abuse of irq_desc Thomas Gleixner 2 siblings, 1 reply; 9+ messages in thread From: Thomas Gleixner @ 2014-02-23 21:40 UTC (permalink / raw) To: LKML; +Cc: Peter Zijlstra, Ashish Kalra, Ingo Molnar, ppc, Timur Tabi I'm really grumpy about this one. The line: #include "../../../kernel/irq/settings.h" should have been an alarm sign for all people who added their SOB to this trainwreck. When I cleaned up the mess people made with interrupt descriptors a few years ago, I warned that I'm going to hunt down new offenders and treat them with stinking trouts. In this case I'll use frozen shark for a better educational value. The whole idiocy which was done there could have been avoided with two lines of perfectly fine code. And do not complain about the lack of correct examples in tree. The solution is simple: Remove the brainfart and use the proper functions, which should have been used in the first place Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Ashish Kalra <ashish.kalra@freescale.com> Cc: Timur Tabi <timur@freescale.com> Cc: Kumar Gala <galak@kernel.crashing.org> Cc: ppc <linuxppc-dev@lists.ozlabs.org> --- arch/powerpc/sysdev/ehv_pic.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) Index: tip/arch/powerpc/sysdev/ehv_pic.c =================================================================== --- tip.orig/arch/powerpc/sysdev/ehv_pic.c +++ tip/arch/powerpc/sysdev/ehv_pic.c @@ -28,8 +28,6 @@ #include <asm/ehv_pic.h> #include <asm/fsl_hcalls.h> -#include "../../../kernel/irq/settings.h" - static struct ehv_pic *global_ehv_pic; static DEFINE_SPINLOCK(ehv_pic_lock); @@ -113,17 +111,13 @@ static unsigned int ehv_pic_type_to_vecp int ehv_pic_set_irq_type(struct irq_data *d, unsigned int flow_type) { unsigned int src = virq_to_hw(d->irq); - struct irq_desc *desc = irq_to_desc(d->irq); unsigned int vecpri, vold, vnew, prio, cpu_dest; unsigned long flags; if (flow_type == IRQ_TYPE_NONE) flow_type = IRQ_TYPE_LEVEL_LOW; - irq_settings_clr_level(desc); - irq_settings_set_trigger_mask(desc, flow_type); - if (flow_type & (IRQ_TYPE_LEVEL_HIGH | IRQ_TYPE_LEVEL_LOW)) - irq_settings_set_level(desc); + irqd_set_trigger_type(d, flow_type); vecpri = ehv_pic_type_to_vecpri(flow_type); @@ -144,7 +138,7 @@ int ehv_pic_set_irq_type(struct irq_data ev_int_set_config(src, vecpri, prio, cpu_dest); spin_unlock_irqrestore(&ehv_pic_lock, flags); - return 0; + return IRQ_SET_MASK_OK_NOCOPY; } static struct irq_chip ehv_pic_irq_chip = { ^ permalink raw reply [flat|nested] 9+ messages in thread
* [tip:irq/core] powerpc:eVh_pic: Kill irq_desc abuse 2014-02-23 21:40 ` [patch 02/26] powerpc:evh_pic: Kill irq_desc abuse Thomas Gleixner @ 2014-03-04 16:39 ` tip-bot for Thomas Gleixner 0 siblings, 0 replies; 9+ messages in thread From: tip-bot for Thomas Gleixner @ 2014-03-04 16:39 UTC (permalink / raw) To: linux-tip-commits Cc: timur, peterz, ashish.kalra, linux-kernel, hpa, tglx, linuxppc-dev, mingo Commit-ID: c866cda47f2c6c8abb929933b7794e9a92d7c924 Gitweb: http://git.kernel.org/tip/c866cda47f2c6c8abb929933b7794e9a92d7c924 Author: Thomas Gleixner <tglx@linutronix.de> AuthorDate: Sun, 23 Feb 2014 21:40:08 +0000 Committer: Thomas Gleixner <tglx@linutronix.de> CommitDate: Tue, 4 Mar 2014 17:37:51 +0100 powerpc:eVh_pic: Kill irq_desc abuse I'm really grumpy about this one. The line: #include "../../../kernel/irq/settings.h" should have been an alarm sign for all people who added their SOB to this trainwreck. When I cleaned up the mess people made with interrupt descriptors a few years ago, I warned that I'm going to hunt down new offenders and treat them with stinking trouts. In this case I'll use frozen shark for a better educational value. The whole idiocy which was done there could have been avoided with two lines of perfectly fine code. And do not complain about the lack of correct examples in tree. The solution is simple: Remove the brainfart and use the proper functions, which should have been used in the first place Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: Ashish Kalra <ashish.kalra@freescale.com> Cc: Timur Tabi <timur@freescale.com> Cc: Kumar Gala <galak@kernel.crashing.org> Cc: ppc <linuxppc-dev@lists.ozlabs.org> Link: http://lkml.kernel.org/r/20140223212736.451970660@linutronix.de Signed-off-by: Thomas Gleixner <tglx@linutronix.de> --- arch/powerpc/sysdev/ehv_pic.c | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/arch/powerpc/sysdev/ehv_pic.c b/arch/powerpc/sysdev/ehv_pic.c index b74085c..2d20f10 100644 --- a/arch/powerpc/sysdev/ehv_pic.c +++ b/arch/powerpc/sysdev/ehv_pic.c @@ -28,8 +28,6 @@ #include <asm/ehv_pic.h> #include <asm/fsl_hcalls.h> -#include "../../../kernel/irq/settings.h" - static struct ehv_pic *global_ehv_pic; static DEFINE_SPINLOCK(ehv_pic_lock); @@ -113,17 +111,13 @@ static unsigned int ehv_pic_type_to_vecpri(unsigned int type) int ehv_pic_set_irq_type(struct irq_data *d, unsigned int flow_type) { unsigned int src = virq_to_hw(d->irq); - struct irq_desc *desc = irq_to_desc(d->irq); unsigned int vecpri, vold, vnew, prio, cpu_dest; unsigned long flags; if (flow_type == IRQ_TYPE_NONE) flow_type = IRQ_TYPE_LEVEL_LOW; - irq_settings_clr_level(desc); - irq_settings_set_trigger_mask(desc, flow_type); - if (flow_type & (IRQ_TYPE_LEVEL_HIGH | IRQ_TYPE_LEVEL_LOW)) - irq_settings_set_level(desc); + irqd_set_trigger_type(d, flow_type); vecpri = ehv_pic_type_to_vecpri(flow_type); @@ -144,7 +138,7 @@ int ehv_pic_set_irq_type(struct irq_data *d, unsigned int flow_type) ev_int_set_config(src, vecpri, prio, cpu_dest); spin_unlock_irqrestore(&ehv_pic_lock, flags); - return 0; + return IRQ_SET_MASK_OK_NOCOPY; } static struct irq_chip ehv_pic_irq_chip = { ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [patch 01/26] powerpc: irq: Use generic_handle_irq [not found] <20140223212703.511977310@linutronix.de> 2014-02-23 21:40 ` [patch 02/26] powerpc:evh_pic: Kill irq_desc abuse Thomas Gleixner @ 2014-02-23 21:40 ` Thomas Gleixner 2014-03-04 16:39 ` [tip:irq/core] powerpc: Irq: " tip-bot for Thomas Gleixner 2014-02-23 21:40 ` [patch 03/26] powerpc: eeh: Kill another abuse of irq_desc Thomas Gleixner 2 siblings, 1 reply; 9+ messages in thread From: Thomas Gleixner @ 2014-02-23 21:40 UTC (permalink / raw) To: LKML; +Cc: Peter Zijlstra, Ingo Molnar, ppc No functional change Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: ppc <linuxppc-dev@lists.ozlabs.org> --- arch/powerpc/kernel/irq.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) Index: tip/arch/powerpc/kernel/irq.c =================================================================== --- tip.orig/arch/powerpc/kernel/irq.c +++ tip/arch/powerpc/kernel/irq.c @@ -465,7 +465,6 @@ static inline void check_stack_overflow( void __do_irq(struct pt_regs *regs) { - struct irq_desc *desc; unsigned int irq; irq_enter(); @@ -487,11 +486,8 @@ void __do_irq(struct pt_regs *regs) /* And finally process it */ if (unlikely(irq == NO_IRQ)) __get_cpu_var(irq_stat).spurious_irqs++; - else { - desc = irq_to_desc(irq); - if (likely(desc)) - desc->handle_irq(irq, desc); - } + else + generic_handle_irq(irq); trace_irq_exit(regs); ^ permalink raw reply [flat|nested] 9+ messages in thread
* [tip:irq/core] powerpc: Irq: Use generic_handle_irq 2014-02-23 21:40 ` [patch 01/26] powerpc: irq: Use generic_handle_irq Thomas Gleixner @ 2014-03-04 16:39 ` tip-bot for Thomas Gleixner 0 siblings, 0 replies; 9+ messages in thread From: tip-bot for Thomas Gleixner @ 2014-03-04 16:39 UTC (permalink / raw) To: linux-tip-commits; +Cc: peterz, linux-kernel, hpa, tglx, linuxppc-dev, mingo Commit-ID: a4e04c9f219d2c00764ffa7ba45500411815879d Gitweb: http://git.kernel.org/tip/a4e04c9f219d2c00764ffa7ba45500411815879d Author: Thomas Gleixner <tglx@linutronix.de> AuthorDate: Sun, 23 Feb 2014 21:40:08 +0000 Committer: Thomas Gleixner <tglx@linutronix.de> CommitDate: Tue, 4 Mar 2014 17:37:52 +0100 powerpc: Irq: Use generic_handle_irq No functional change Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: ppc <linuxppc-dev@lists.ozlabs.org> Link: http://lkml.kernel.org/r/20140223212736.333718121@linutronix.de Signed-off-by: Thomas Gleixner <tglx@linutronix.de> --- arch/powerpc/kernel/irq.c | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c index 1d0848b..ca1cd74 100644 --- a/arch/powerpc/kernel/irq.c +++ b/arch/powerpc/kernel/irq.c @@ -465,7 +465,6 @@ static inline void check_stack_overflow(void) void __do_irq(struct pt_regs *regs) { - struct irq_desc *desc; unsigned int irq; irq_enter(); @@ -487,11 +486,8 @@ void __do_irq(struct pt_regs *regs) /* And finally process it */ if (unlikely(irq == NO_IRQ)) __get_cpu_var(irq_stat).spurious_irqs++; - else { - desc = irq_to_desc(irq); - if (likely(desc)) - desc->handle_irq(irq, desc); - } + else + generic_handle_irq(irq); trace_irq_exit(regs); ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [patch 03/26] powerpc: eeh: Kill another abuse of irq_desc [not found] <20140223212703.511977310@linutronix.de> 2014-02-23 21:40 ` [patch 02/26] powerpc:evh_pic: Kill irq_desc abuse Thomas Gleixner 2014-02-23 21:40 ` [patch 01/26] powerpc: irq: Use generic_handle_irq Thomas Gleixner @ 2014-02-23 21:40 ` Thomas Gleixner 2014-02-23 22:26 ` Benjamin Herrenschmidt ` (2 more replies) 2 siblings, 3 replies; 9+ messages in thread From: Thomas Gleixner @ 2014-02-23 21:40 UTC (permalink / raw) To: LKML; +Cc: Peter Zijlstra, Ingo Molnar, ppc, Gavin Shan commit 91150af3a (powerpc/eeh: Fix unbalanced enable for IRQ) is another brilliant example of trainwreck engineering. The patch "fixes" the issue of an unbalanced call to irq_enable() which causes a prominent warning by checking the disabled state of the interrupt line and call conditionally into the core code. This is wrong in two aspects: 1) The warning is there to tell users, that they need to fix their asymetric enable/disable patterns by finding the root cause and solving it there. It's definitely not meant to work around it by conditionally calling into the core code depending on the random state of the irq line. Asymetric irq_disable/enable calls are a clear sign of wrong usage of the interfaces which have to be cured at the root and not by somehow hacking around it. 2) The abuse of core internal data structure instead of using the proper interfaces for retrieving the information for the 'hack around' irq_desc is core internal and it's clear enough stated. Replace at least the irq_desc abuse with the proper functions and add a big fat comment why this is absurd and completely wrong. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: Gavin Shan <shangw@linux.vnet.ibm.com> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: ppc <linuxppc-dev@lists.ozlabs.org> --- arch/powerpc/kernel/eeh_driver.c | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) Index: tip/arch/powerpc/kernel/eeh_driver.c =================================================================== --- tip.orig/arch/powerpc/kernel/eeh_driver.c +++ tip/arch/powerpc/kernel/eeh_driver.c @@ -143,15 +143,31 @@ static void eeh_disable_irq(struct pci_d static void eeh_enable_irq(struct pci_dev *dev) { struct eeh_dev *edev = pci_dev_to_eeh_dev(dev); - struct irq_desc *desc; if ((edev->mode) & EEH_DEV_IRQ_DISABLED) { edev->mode &= ~EEH_DEV_IRQ_DISABLED; - - desc = irq_to_desc(dev->irq); - if (desc && desc->depth > 0) + /* + * FIXME !!!!! + * + * This is just ass backwards. This maze has + * unbalanced irq_enable/disable calls. So instead of + * finding the root cause it works around the warning + * in the irq_enable code by conditionally calling + * into it. + * + * That's just wrong.The warning in the core code is + * there to tell people to fix their assymetries in + * their own code, not by abusing the core information + * to avoid it. + * + * I so wish that the assymetry would be the other way + * round and a few more irq_disable calls render that + * shit unusable forever. + * + * tglx + */ + if (irqd_irq_disabled(irq_get_irq_data(dev->irq)) enable_irq(dev->irq); - } } /** ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [patch 03/26] powerpc: eeh: Kill another abuse of irq_desc 2014-02-23 21:40 ` [patch 03/26] powerpc: eeh: Kill another abuse of irq_desc Thomas Gleixner @ 2014-02-23 22:26 ` Benjamin Herrenschmidt 2014-02-24 7:56 ` Gavin Shan 2014-03-04 16:40 ` [tip:irq/core] powerpc: Eeh: " tip-bot for Thomas Gleixner 2 siblings, 0 replies; 9+ messages in thread From: Benjamin Herrenschmidt @ 2014-02-23 22:26 UTC (permalink / raw) To: Thomas Gleixner; +Cc: Peter Zijlstra, Ingo Molnar, ppc, LKML, Gavin Shan The problems iirc have to do with drivers doing stupid things, but I'll let Gavin comment further and fix that up properly. Cheers, Ben. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [patch 03/26] powerpc: eeh: Kill another abuse of irq_desc 2014-02-23 21:40 ` [patch 03/26] powerpc: eeh: Kill another abuse of irq_desc Thomas Gleixner 2014-02-23 22:26 ` Benjamin Herrenschmidt @ 2014-02-24 7:56 ` Gavin Shan 2014-02-24 11:32 ` Thomas Gleixner 2014-03-04 16:40 ` [tip:irq/core] powerpc: Eeh: " tip-bot for Thomas Gleixner 2 siblings, 1 reply; 9+ messages in thread From: Gavin Shan @ 2014-02-24 7:56 UTC (permalink / raw) To: Thomas Gleixner; +Cc: Gavin Shan, Peter Zijlstra, LKML, Ingo Molnar, ppc On Sun, Feb 23, 2014 at 09:40:09PM -0000, Thomas Gleixner wrote: >commit 91150af3a (powerpc/eeh: Fix unbalanced enable for IRQ) is >another brilliant example of trainwreck engineering. > >The patch "fixes" the issue of an unbalanced call to irq_enable() >which causes a prominent warning by checking the disabled state of the >interrupt line and call conditionally into the core code. > >This is wrong in two aspects: > >1) The warning is there to tell users, that they need to fix their > asymetric enable/disable patterns by finding the root cause and > solving it there. > > It's definitely not meant to work around it by conditionally > calling into the core code depending on the random state of the irq > line. > > Asymetric irq_disable/enable calls are a clear sign of wrong usage > of the interfaces which have to be cured at the root and not by > somehow hacking around it. > >2) The abuse of core internal data structure instead of using the > proper interfaces for retrieving the information for the 'hack > around' > > irq_desc is core internal and it's clear enough stated. > >Replace at least the irq_desc abuse with the proper functions and add >a big fat comment why this is absurd and completely wrong. > Thanks for pointing it out. I think we might have this patch for now and I'll look into individual drivers to fix the unbalanced function calls later one by one. Thanks, Gavin >Signed-off-by: Thomas Gleixner <tglx@linutronix.de> >Cc: Gavin Shan <shangw@linux.vnet.ibm.com> >Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> >Cc: ppc <linuxppc-dev@lists.ozlabs.org> >--- > arch/powerpc/kernel/eeh_driver.c | 26 +++++++++++++++++++++----- > 1 file changed, 21 insertions(+), 5 deletions(-) > >Index: tip/arch/powerpc/kernel/eeh_driver.c >=================================================================== >--- tip.orig/arch/powerpc/kernel/eeh_driver.c >+++ tip/arch/powerpc/kernel/eeh_driver.c >@@ -143,15 +143,31 @@ static void eeh_disable_irq(struct pci_d > static void eeh_enable_irq(struct pci_dev *dev) > { > struct eeh_dev *edev = pci_dev_to_eeh_dev(dev); >- struct irq_desc *desc; > > if ((edev->mode) & EEH_DEV_IRQ_DISABLED) { > edev->mode &= ~EEH_DEV_IRQ_DISABLED; >- >- desc = irq_to_desc(dev->irq); >- if (desc && desc->depth > 0) >+ /* >+ * FIXME !!!!! >+ * >+ * This is just ass backwards. This maze has >+ * unbalanced irq_enable/disable calls. So instead of >+ * finding the root cause it works around the warning >+ * in the irq_enable code by conditionally calling >+ * into it. >+ * >+ * That's just wrong.The warning in the core code is >+ * there to tell people to fix their assymetries in >+ * their own code, not by abusing the core information >+ * to avoid it. >+ * >+ * I so wish that the assymetry would be the other way >+ * round and a few more irq_disable calls render that >+ * shit unusable forever. >+ * >+ * tglx >+ */ >+ if (irqd_irq_disabled(irq_get_irq_data(dev->irq)) > enable_irq(dev->irq); >- } > } > > /** > > ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [patch 03/26] powerpc: eeh: Kill another abuse of irq_desc 2014-02-24 7:56 ` Gavin Shan @ 2014-02-24 11:32 ` Thomas Gleixner 0 siblings, 0 replies; 9+ messages in thread From: Thomas Gleixner @ 2014-02-24 11:32 UTC (permalink / raw) To: Gavin Shan; +Cc: Peter Zijlstra, Ingo Molnar, ppc, LKML On Mon, 24 Feb 2014, Gavin Shan wrote: > On Sun, Feb 23, 2014 at 09:40:09PM -0000, Thomas Gleixner wrote: > >commit 91150af3a (powerpc/eeh: Fix unbalanced enable for IRQ) is > >another brilliant example of trainwreck engineering. > > > >The patch "fixes" the issue of an unbalanced call to irq_enable() > >which causes a prominent warning by checking the disabled state of the > >interrupt line and call conditionally into the core code. > > > >This is wrong in two aspects: > > > >1) The warning is there to tell users, that they need to fix their > > asymetric enable/disable patterns by finding the root cause and > > solving it there. > > > > It's definitely not meant to work around it by conditionally > > calling into the core code depending on the random state of the irq > > line. > > > > Asymetric irq_disable/enable calls are a clear sign of wrong usage > > of the interfaces which have to be cured at the root and not by > > somehow hacking around it. > > > >2) The abuse of core internal data structure instead of using the > > proper interfaces for retrieving the information for the 'hack > > around' > > > > irq_desc is core internal and it's clear enough stated. > > > >Replace at least the irq_desc abuse with the proper functions and add > >a big fat comment why this is absurd and completely wrong. > > > > Thanks for pointing it out. I think we might have this patch for now > and I'll look into individual drivers to fix the unbalanced function > calls later one by one. Fine with me. You wont escape my scan scripts :) Thanks, tglx ^ permalink raw reply [flat|nested] 9+ messages in thread
* [tip:irq/core] powerpc: Eeh: Kill another abuse of irq_desc 2014-02-23 21:40 ` [patch 03/26] powerpc: eeh: Kill another abuse of irq_desc Thomas Gleixner 2014-02-23 22:26 ` Benjamin Herrenschmidt 2014-02-24 7:56 ` Gavin Shan @ 2014-03-04 16:40 ` tip-bot for Thomas Gleixner 2 siblings, 0 replies; 9+ messages in thread From: tip-bot for Thomas Gleixner @ 2014-03-04 16:40 UTC (permalink / raw) To: linux-tip-commits Cc: shangw, peterz, linux-kernel, hpa, tglx, linuxppc-dev, mingo Commit-ID: b8a9a11b976810ba12a43c4fe699a14892c97e52 Gitweb: http://git.kernel.org/tip/b8a9a11b976810ba12a43c4fe699a14892c97e52 Author: Thomas Gleixner <tglx@linutronix.de> AuthorDate: Sun, 23 Feb 2014 21:40:09 +0000 Committer: Thomas Gleixner <tglx@linutronix.de> CommitDate: Tue, 4 Mar 2014 17:37:52 +0100 powerpc: Eeh: Kill another abuse of irq_desc commit 91150af3a (powerpc/eeh: Fix unbalanced enable for IRQ) is another brilliant example of trainwreck engineering. The patch "fixes" the issue of an unbalanced call to irq_enable() which causes a prominent warning by checking the disabled state of the interrupt line and call conditionally into the core code. This is wrong in two aspects: 1) The warning is there to tell users, that they need to fix their asymetric enable/disable patterns by finding the root cause and solving it there. It's definitely not meant to work around it by conditionally calling into the core code depending on the random state of the irq line. Asymetric irq_disable/enable calls are a clear sign of wrong usage of the interfaces which have to be cured at the root and not by somehow hacking around it. 2) The abuse of core internal data structure instead of using the proper interfaces for retrieving the information for the 'hack around' irq_desc is core internal and it's clear enough stated. Replace at least the irq_desc abuse with the proper functions and add a big fat comment why this is absurd and completely wrong. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Gavin Shan <shangw@linux.vnet.ibm.com> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: ppc <linuxppc-dev@lists.ozlabs.org> Link: http://lkml.kernel.org/r/20140223212736.562906212@linutronix.de Signed-off-by: Thomas Gleixner <tglx@linutronix.de> --- arch/powerpc/kernel/eeh_driver.c | 26 +++++++++++++++++++++----- 1 file changed, 21 insertions(+), 5 deletions(-) diff --git a/arch/powerpc/kernel/eeh_driver.c b/arch/powerpc/kernel/eeh_driver.c index fdc679d..3e1d7de 100644 --- a/arch/powerpc/kernel/eeh_driver.c +++ b/arch/powerpc/kernel/eeh_driver.c @@ -143,15 +143,31 @@ static void eeh_disable_irq(struct pci_dev *dev) static void eeh_enable_irq(struct pci_dev *dev) { struct eeh_dev *edev = pci_dev_to_eeh_dev(dev); - struct irq_desc *desc; if ((edev->mode) & EEH_DEV_IRQ_DISABLED) { edev->mode &= ~EEH_DEV_IRQ_DISABLED; - - desc = irq_to_desc(dev->irq); - if (desc && desc->depth > 0) + /* + * FIXME !!!!! + * + * This is just ass backwards. This maze has + * unbalanced irq_enable/disable calls. So instead of + * finding the root cause it works around the warning + * in the irq_enable code by conditionally calling + * into it. + * + * That's just wrong.The warning in the core code is + * there to tell people to fix their assymetries in + * their own code, not by abusing the core information + * to avoid it. + * + * I so wish that the assymetry would be the other way + * round and a few more irq_disable calls render that + * shit unusable forever. + * + * tglx + */ + if (irqd_irq_disabled(irq_get_irq_data(dev->irq)) enable_irq(dev->irq); - } } /** ^ permalink raw reply related [flat|nested] 9+ messages in thread
end of thread, other threads:[~2014-03-04 17:14 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- [not found] <20140223212703.511977310@linutronix.de> 2014-02-23 21:40 ` [patch 02/26] powerpc:evh_pic: Kill irq_desc abuse Thomas Gleixner 2014-03-04 16:39 ` [tip:irq/core] powerpc:eVh_pic: " tip-bot for Thomas Gleixner 2014-02-23 21:40 ` [patch 01/26] powerpc: irq: Use generic_handle_irq Thomas Gleixner 2014-03-04 16:39 ` [tip:irq/core] powerpc: Irq: " tip-bot for Thomas Gleixner 2014-02-23 21:40 ` [patch 03/26] powerpc: eeh: Kill another abuse of irq_desc Thomas Gleixner 2014-02-23 22:26 ` Benjamin Herrenschmidt 2014-02-24 7:56 ` Gavin Shan 2014-02-24 11:32 ` Thomas Gleixner 2014-03-04 16:40 ` [tip:irq/core] powerpc: Eeh: " tip-bot for Thomas Gleixner
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).