Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1560634 > unrolled thread

[PATCH] x86/ioapic: add IO-APIC irq_chip retrigger hook

Started byRuslan Ruslichenko <rruslich@cisco.com>
First post2017-01-17 15:30 +0100
Last post2017-01-18 15:50 +0100
Articles 6 — 4 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH] x86/ioapic: add IO-APIC irq_chip retrigger hook Ruslan Ruslichenko <rruslich@cisco.com> - 2017-01-17 15:30 +0100
    Re: [PATCH] x86/ioapic: add IO-APIC irq_chip retrigger hook Thomas Gleixner <tglx@linutronix.de> - 2017-01-18 11:50 +0100
      Re: [PATCH] x86/ioapic: add IO-APIC irq_chip retrigger hook "Ruslan Ruslichenko -X (rruslich - GLOBALLOGIC INC at Cisco)"          <rruslich@cisco.com> - 2017-01-18 15:30 +0100
        Re: [PATCH] x86/ioapic: add IO-APIC irq_chip retrigger hook Thomas Gleixner <tglx@linutronix.de> - 2017-01-18 16:20 +0100
    [tip:x86/apic] x86/ioapic: Restore IO-APIC irq_chip retrigger  callback tip-bot for Ruslan Ruslichenko <tipbot@zytor.com> - 2017-01-18 12:00 +0100
    [tip:x86/urgent] x86/ioapic: Restore IO-APIC irq_chip retrigger  callback tip-bot for Ruslan Ruslichenko <tipbot@zytor.com> - 2017-01-18 15:50 +0100

#1560634 — [PATCH] x86/ioapic: add IO-APIC irq_chip retrigger hook

FromRuslan Ruslichenko <rruslich@cisco.com>
Date2017-01-17 15:30 +0100
Subject[PATCH] x86/ioapic: add IO-APIC irq_chip retrigger hook
Message-ID<t0CVP-8bo-11@gated-at.bofh.it>
After commit d32932d02e18  ("x86/irq: Convert IOAPIC to use hierarchical
irqdomain interfaces") IO-APIC is switched to hierarchical irqdomain
implementation. Also this patch removed irq_retrigger hook for IO-APIC
chip which seem to be wrong. Without this hook some edge-triggered irq's
might be lost, since kernel uses it to retrigger edge irq's triggered
while they are being handled or disabled by driver
(see "Delayed_interrupt_disable" section at "Generic-IRQ-Guide"
of kernel docbook).

Thus adding this hook same way as it was done for MSI domain.

Signed-off-by: Ruslan Ruslichenko <rruslich@cisco.com>
---
 arch/x86/kernel/apic/io_apic.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
index 945e512..1e35dd0 100644
--- a/arch/x86/kernel/apic/io_apic.c
+++ b/arch/x86/kernel/apic/io_apic.c
@@ -1875,6 +1875,7 @@ static int ioapic_set_affinity(struct irq_data *irq_data,
 	.irq_ack		= irq_chip_ack_parent,
 	.irq_eoi		= ioapic_ack_level,
 	.irq_set_affinity	= ioapic_set_affinity,
+	.irq_retrigger		= irq_chip_retrigger_hierarchy,
 	.flags			= IRQCHIP_SKIP_SET_WAKE,
 };
 
@@ -1886,6 +1887,7 @@ static int ioapic_set_affinity(struct irq_data *irq_data,
 	.irq_ack		= irq_chip_ack_parent,
 	.irq_eoi		= ioapic_ir_ack_level,
 	.irq_set_affinity	= ioapic_set_affinity,
+	.irq_retrigger		= irq_chip_retrigger_hierarchy,
 	.flags			= IRQCHIP_SKIP_SET_WAKE,
 };
 
-- 
1.9.1

[toc] | [next] | [standalone]


#1561468

FromThomas Gleixner <tglx@linutronix.de>
Date2017-01-18 11:50 +0100
Message-ID<t0VYt-2Rb-3@gated-at.bofh.it>
In reply to#1560634
On Tue, 17 Jan 2017, Ruslan Ruslichenko wrote:

> After commit d32932d02e18  ("x86/irq: Convert IOAPIC to use hierarchical
> irqdomain interfaces") IO-APIC is switched to hierarchical irqdomain
> implementation. Also this patch removed irq_retrigger hook for IO-APIC
> chip which seem to be wrong. Without this hook some edge-triggered irq's
> might be lost, since kernel uses it to retrigger edge irq's triggered
> while they are being handled or disabled by driver

Restoring the callbacks is the right thing to do, but there is no problem
because if the retrigger callback is empty then pending edge interrupts are
resent by software. It's just less efficient, but not a issue.

Thanks,

	tglx

[toc] | [prev] | [next] | [standalone]


#1561851

From"Ruslan Ruslichenko -X (rruslich - GLOBALLOGIC INC at Cisco)" <rruslich@cisco.com>
Date2017-01-18 15:30 +0100
Message-ID<t0Zpo-5cx-29@gated-at.bofh.it>
In reply to#1561468
On 01/18/2017 12:46 PM, Thomas Gleixner wrote:
> On Tue, 17 Jan 2017, Ruslan Ruslichenko wrote:
>
>> After commit d32932d02e18  ("x86/irq: Convert IOAPIC to use hierarchical
>> irqdomain interfaces") IO-APIC is switched to hierarchical irqdomain
>> implementation. Also this patch removed irq_retrigger hook for IO-APIC
>> chip which seem to be wrong. Without this hook some edge-triggered irq's
>> might be lost, since kernel uses it to retrigger edge irq's triggered
>> while they are being handled or disabled by driver
> Restoring the callbacks is the right thing to do, but there is no problem
> because if the retrigger callback is empty then pending edge interrupts are
> resent by software. It's just less efficient, but not a issue.

Software resend will only work if CONFIG_HARDIRQS_SW_RESEND is enabled,
which is not selected for x86 architectures.

So it's good that patch now picked up.
> Thanks,
>
> 	tglx

[toc] | [prev] | [next] | [standalone]


#1561890

FromThomas Gleixner <tglx@linutronix.de>
Date2017-01-18 16:20 +0100
Message-ID<t10bN-5IB-37@gated-at.bofh.it>
In reply to#1561851
On Wed, 18 Jan 2017, Ruslan Ruslichenko -X (rruslich - GLOBALLOGIC INC at Cisco) wrote:
> On 01/18/2017 12:46 PM, Thomas Gleixner wrote:
> > On Tue, 17 Jan 2017, Ruslan Ruslichenko wrote:
> > 
> > > After commit d32932d02e18  ("x86/irq: Convert IOAPIC to use hierarchical
> > > irqdomain interfaces") IO-APIC is switched to hierarchical irqdomain
> > > implementation. Also this patch removed irq_retrigger hook for IO-APIC
> > > chip which seem to be wrong. Without this hook some edge-triggered irq's
> > > might be lost, since kernel uses it to retrigger edge irq's triggered
> > > while they are being handled or disabled by driver
> > Restoring the callbacks is the right thing to do, but there is no problem
> > because if the retrigger callback is empty then pending edge interrupts are
> > resent by software. It's just less efficient, but not a issue.
> 
> Software resend will only work if CONFIG_HARDIRQS_SW_RESEND is enabled,
> which is not selected for x86 architectures.

Dammit, right you are. Good question why nobody noticed so far.

Lemme amend that commit, so it gets back into stable then.

Thanks,

	tglx

[toc] | [prev] | [next] | [standalone]


#1561472 — [tip:x86/apic] x86/ioapic: Restore IO-APIC irq_chip retrigger callback

Fromtip-bot for Ruslan Ruslichenko <tipbot@zytor.com>
Date2017-01-18 12:00 +0100
Subject[tip:x86/apic] x86/ioapic: Restore IO-APIC irq_chip retrigger callback
Message-ID<t0W8a-2X3-9@gated-at.bofh.it>
In reply to#1560634
Commit-ID:  a9b4f08770b415f30f2fb0f8329a370c8f554aa3
Gitweb:     http://git.kernel.org/tip/a9b4f08770b415f30f2fb0f8329a370c8f554aa3
Author:     Ruslan Ruslichenko <rruslich@cisco.com>
AuthorDate: Tue, 17 Jan 2017 16:13:52 +0200
Committer:  Thomas Gleixner <tglx@linutronix.de>
CommitDate: Wed, 18 Jan 2017 11:51:02 +0100

x86/ioapic: Restore IO-APIC irq_chip retrigger callback

commit d32932d02e18 removed the irq_retrigger callback from the IO-APIC
chip and did not add it to the new IO-APIC-IR irq chip.

There is no harm because the interrupts are resent in software when the
retrigger callback is NULL, but it's less efficient. So restore them.

[ tglx: Massaged changelog ]

Fixes: d32932d02e18  ("x86/irq: Convert IOAPIC to use hierarchical irqdomain interfaces")
Signed-off-by: Ruslan Ruslichenko <rruslich@cisco.com>
Cc: xe-linux-external@cisco.com
Link: http://lkml.kernel.org/r/1484662432-13580-1-git-send-email-rruslich@cisco.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>

---
 arch/x86/kernel/apic/io_apic.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
index 945e512..1e35dd0 100644
--- a/arch/x86/kernel/apic/io_apic.c
+++ b/arch/x86/kernel/apic/io_apic.c
@@ -1875,6 +1875,7 @@ static struct irq_chip ioapic_chip __read_mostly = {
 	.irq_ack		= irq_chip_ack_parent,
 	.irq_eoi		= ioapic_ack_level,
 	.irq_set_affinity	= ioapic_set_affinity,
+	.irq_retrigger		= irq_chip_retrigger_hierarchy,
 	.flags			= IRQCHIP_SKIP_SET_WAKE,
 };
 
@@ -1886,6 +1887,7 @@ static struct irq_chip ioapic_ir_chip __read_mostly = {
 	.irq_ack		= irq_chip_ack_parent,
 	.irq_eoi		= ioapic_ir_ack_level,
 	.irq_set_affinity	= ioapic_set_affinity,
+	.irq_retrigger		= irq_chip_retrigger_hierarchy,
 	.flags			= IRQCHIP_SKIP_SET_WAKE,
 };
 

[toc] | [prev] | [next] | [standalone]


#1561868 — [tip:x86/urgent] x86/ioapic: Restore IO-APIC irq_chip retrigger callback

Fromtip-bot for Ruslan Ruslichenko <tipbot@zytor.com>
Date2017-01-18 15:50 +0100
Subject[tip:x86/urgent] x86/ioapic: Restore IO-APIC irq_chip retrigger callback
Message-ID<t0ZIK-5ji-17@gated-at.bofh.it>
In reply to#1560634
Commit-ID:  020eb3daaba2857b32c4cf4c82f503d6a00a67de
Gitweb:     http://git.kernel.org/tip/020eb3daaba2857b32c4cf4c82f503d6a00a67de
Author:     Ruslan Ruslichenko <rruslich@cisco.com>
AuthorDate: Tue, 17 Jan 2017 16:13:52 +0200
Committer:  Thomas Gleixner <tglx@linutronix.de>
CommitDate: Wed, 18 Jan 2017 15:37:28 +0100

x86/ioapic: Restore IO-APIC irq_chip retrigger callback

commit d32932d02e18 removed the irq_retrigger callback from the IO-APIC
chip and did not add it to the new IO-APIC-IR irq chip.

Unfortunately the software resend fallback is not enabled on X86, so edge
interrupts which are received during the lazy disabled state of the
interrupt line are not retriggered and therefor lost.

Restore the callbacks.

[ tglx: Massaged changelog ]

Fixes: d32932d02e18  ("x86/irq: Convert IOAPIC to use hierarchical irqdomain interfaces")
Signed-off-by: Ruslan Ruslichenko <rruslich@cisco.com>
Cc: xe-linux-external@cisco.com
Cc: stable@vger.kernel.org
Link: http://lkml.kernel.org/r/1484662432-13580-1-git-send-email-rruslich@cisco.com
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
---
 arch/x86/kernel/apic/io_apic.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
index 945e512..1e35dd0 100644
--- a/arch/x86/kernel/apic/io_apic.c
+++ b/arch/x86/kernel/apic/io_apic.c
@@ -1875,6 +1875,7 @@ static struct irq_chip ioapic_chip __read_mostly = {
 	.irq_ack		= irq_chip_ack_parent,
 	.irq_eoi		= ioapic_ack_level,
 	.irq_set_affinity	= ioapic_set_affinity,
+	.irq_retrigger		= irq_chip_retrigger_hierarchy,
 	.flags			= IRQCHIP_SKIP_SET_WAKE,
 };
 
@@ -1886,6 +1887,7 @@ static struct irq_chip ioapic_ir_chip __read_mostly = {
 	.irq_ack		= irq_chip_ack_parent,
 	.irq_eoi		= ioapic_ir_ack_level,
 	.irq_set_affinity	= ioapic_set_affinity,
+	.irq_retrigger		= irq_chip_retrigger_hierarchy,
 	.flags			= IRQCHIP_SKIP_SET_WAKE,
 };
 

[toc] | [prev] | [standalone]


Back to top | Article view | linux.kernel


csiph-web