From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751184AbdAQOWz (ORCPT ); Tue, 17 Jan 2017 09:22:55 -0500 Received: from aer-iport-4.cisco.com ([173.38.203.54]:9654 "EHLO aer-iport-4.cisco.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750939AbdAQOWx (ORCPT ); Tue, 17 Jan 2017 09:22:53 -0500 X-Greylist: delayed 365 seconds by postgrey-1.27 at vger.kernel.org; Tue, 17 Jan 2017 09:22:53 EST X-IronPort-AV: E=Sophos;i="5.33,244,1477958400"; d="scan'208";a="651709484" From: Ruslan Ruslichenko To: Thomas Gleixner , Ingo Molnar , "H. Peter Anvin" , x86@kernel.org, linux-kernel@vger.kernel.org Cc: xe-linux-external@cisco.com, Ruslan Ruslichenko Subject: [PATCH] x86/ioapic: add IO-APIC irq_chip retrigger hook Date: Tue, 17 Jan 2017 16:13:52 +0200 Message-Id: <1484662432-13580-1-git-send-email-rruslich@cisco.com> X-Mailer: git-send-email 1.9.1 X-Auto-Response-Suppress: DR, OOF, AutoReply Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 --- 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