Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1560634 > unrolled thread
| Started by | Ruslan Ruslichenko <rruslich@cisco.com> |
|---|---|
| First post | 2017-01-17 15:30 +0100 |
| Last post | 2017-01-18 15:50 +0100 |
| Articles | 6 — 4 participants |
Back to article view | Back to linux.kernel
[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
| From | Ruslan Ruslichenko <rruslich@cisco.com> |
|---|---|
| Date | 2017-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]
| From | Thomas Gleixner <tglx@linutronix.de> |
|---|---|
| Date | 2017-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]
| From | "Ruslan Ruslichenko -X (rruslich - GLOBALLOGIC INC at Cisco)" <rruslich@cisco.com> |
|---|---|
| Date | 2017-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]
| From | Thomas Gleixner <tglx@linutronix.de> |
|---|---|
| Date | 2017-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]
| From | tip-bot for Ruslan Ruslichenko <tipbot@zytor.com> |
|---|---|
| Date | 2017-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]
| From | tip-bot for Ruslan Ruslichenko <tipbot@zytor.com> |
|---|---|
| Date | 2017-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