From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Luck, Tony" Subject: RE: [RFC trollpatch 1/1] genirq: Remove the fits all and nothing __do_IRQ() code Date: Mon, 27 Sep 2010 11:39:29 -0700 Message-ID: <987664A83D2D224EAE907B061CE93D5301604712B4@orsmsx505.amr.corp.intel.com> References: <20100908152036.643594727@linutronix.de> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Cc: LKML , Linus Torvalds , Andrew Morton , Ingo Molnar , Peter Zijlstra , Christoph Hellwig , "linux-alpha@vger.kernel.org" , "linux-cris-kernel@axis.com" , "linux-ia64@vger.kernel.org" , Yoshinori Sato , Hirokazu Takata , Greg Ungerer , Jeff Dike , "linux-parisc@vger.kernel.org" , Chris Zankel , "linux-arch@vger.kernel.org" To: Thomas Gleixner Return-path: In-Reply-To: List-ID: List-Id: linux-parisc.vger.kernel.org > No, it's deliberate. The solution is to use the correct flow handler > for your device. We have currently several flow handlers implemented: Yes, I found the different "handle_*_irq()" functions. The _percpu_ variant works fine for the ia64 per-cpu interrupt paths. But *NONE* of them call desc->chip->end() (even though the code flow in Documentation/DcoBook/genericirq.tmpl says that three of them do call it]. So it appears that this was thought to be necessary when the docs were written, but was not put into the code. The ia64 chip->end function for edge triggered interrupts is a nop(), so handle_edge_irq() ought to work just fine for it [can't confirm from my initial tests because the HP box I'm using only has level triggered ones]. handle_level_irq() works for my level triggered interrupts if I add a "desc->chip->end(irq)" call to it. git grep "chip->end" appears to show that the only use of chip->end is in the "Recovery handler for misrouted interrupts": try_one_irq() At minimum we seem to have some documentation inconsistencies with the code. -Tony From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Luck, Tony" Date: Mon, 27 Sep 2010 18:39:29 +0000 Subject: RE: [RFC trollpatch 1/1] genirq: Remove the fits all and nothing Message-Id: <987664A83D2D224EAE907B061CE93D5301604712B4@orsmsx505.amr.corp.intel.com> List-Id: References: <20100908152036.643594727@linutronix.de> In-Reply-To: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: Thomas Gleixner Cc: LKML , Linus Torvalds , Andrew Morton , Ingo Molnar , Peter Zijlstra , Christoph Hellwig , "linux-alpha@vger.kernel.org" , "linux-cris-kernel@axis.com" , "linux-ia64@vger.kernel.org" , Yoshinori Sato , Hirokazu Takata , Greg Ungerer , Jeff Dike , "linux-parisc@vger.kernel.org" , Chris Zankel , "linux-arch@vger.kernel.org" > No, it's deliberate. The solution is to use the correct flow handler > for your device. We have currently several flow handlers implemented: Yes, I found the different "handle_*_irq()" functions. The _percpu_ variant works fine for the ia64 per-cpu interrupt paths. But *NONE* of them call desc->chip->end() (even though the code flow in Documentation/DcoBook/genericirq.tmpl says that three of them do call it]. So it appears that this was thought to be necessary when the docs were written, but was not put into the code. The ia64 chip->end function for edge triggered interrupts is a nop(), so handle_edge_irq() ought to work just fine for it [can't confirm from my initial tests because the HP box I'm using only has level triggered ones]. handle_level_irq() works for my level triggered interrupts if I add a "desc->chip->end(irq)" call to it. git grep "chip->end" appears to show that the only use of chip->end is in the "Recovery handler for misrouted interrupts": try_one_irq() At minimum we seem to have some documentation inconsistencies with the code. -Tony