From: Ricardo Neri <ricardo.neri-calderon@linux.intel.com> To: Thomas Gleixner <tglx@linutronix.de>, Ingo Molnar <mingo@kernel.org>, "H. Peter Anvin" <hpa@zytor.com> Cc: Andi Kleen <andi.kleen@intel.com>, Ashok Raj <ashok.raj@intel.com>, Borislav Petkov <bp@suse.de>, Tony Luck <tony.luck@intel.com>, "Ravi V. Shankar" <ravi.v.shankar@intel.com>, x86@kernel.org, sparclinux@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org, Ricardo Neri <ricardo.neri-calderon@linux.intel.com>, Jacob Pan <jacob.jun.pan@intel.com>, Joerg Roedel <joro@8bytes.org>, iommu@lists.linux-foundation.org Subject: [RFC PATCH 04/23] iommu/vt-d/irq_remapping: Add support for IRQCHIP_CAN_DELIVER_AS_NMI Date: Tue, 12 Jun 2018 17:57:24 -0700 [thread overview] Message-ID: <1528851463-21140-5-git-send-email-ricardo.neri-calderon@linux.intel.com> (raw) In-Reply-To: <1528851463-21140-1-git-send-email-ricardo.neri-calderon@linux.intel.com> The Intel IOMMU is capable of delivering remapped interrupts as non- maskable. Add the IRQCHIP_CAN_DELIVER_AS_NMI flag to its irq_chip structure to declare this capability. The delivery mode of each interrupt can be set separately. By default, the deliver mode is taken from the configuration field of the interrupt data. If non-maskable delivery is requested in the interrupt state flags, the respective entry in the remapping table is updated. When remapping an interrupt from an IO APIC, modify the delivery field in the interrupt remapping table entry. When remapping an MSI interrupt, simply update the delivery mode when composing the message. Cc: Ashok Raj <ashok.raj@intel.com> Cc: Andi Kleen <andi.kleen@intel.com> Cc: Tony Luck <tony.luck@intel.com> Cc: Borislav Petkov <bp@suse.de> Cc: Jacob Pan <jacob.jun.pan@intel.com> Cc: Joerg Roedel <joro@8bytes.org> Cc: "Ravi V. Shankar" <ravi.v.shankar@intel.com> Cc: x86@kernel.org Cc: iommu@lists.linux-foundation.org Signed-off-by: Ricardo Neri <ricardo.neri-calderon@linux.intel.com> --- drivers/iommu/intel_irq_remapping.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/iommu/intel_irq_remapping.c b/drivers/iommu/intel_irq_remapping.c index 9f3a04d..b6cf7c4 100644 --- a/drivers/iommu/intel_irq_remapping.c +++ b/drivers/iommu/intel_irq_remapping.c @@ -1128,10 +1128,14 @@ static void intel_ir_reconfigure_irte(struct irq_data *irqd, bool force) struct irte *irte = &ir_data->irte_entry; struct irq_cfg *cfg = irqd_cfg(irqd); + if (irqd_deliver_as_nmi(irqd)) + cfg->delivery_mode = dest_NMI; + /* * Atomically updates the IRTE with the new destination, vector * and flushes the interrupt entry cache. */ + irte->dlvry_mode = cfg->delivery_mode; irte->vector = cfg->vector; irte->dest_id = IRTE_DEST(cfg->dest_apicid); @@ -1182,6 +1186,9 @@ static void intel_ir_compose_msi_msg(struct irq_data *irq_data, { struct intel_ir_data *ir_data = irq_data->chip_data; + if (irqd_deliver_as_nmi(irq_data)) + ir_data->irte_entry.dlvry_mode = dest_NMI; + *msg = ir_data->msi_entry; } @@ -1227,6 +1234,7 @@ static struct irq_chip intel_ir_chip = { .irq_set_affinity = intel_ir_set_affinity, .irq_compose_msi_msg = intel_ir_compose_msi_msg, .irq_set_vcpu_affinity = intel_ir_set_vcpu_affinity, + .flags = IRQCHIP_CAN_DELIVER_AS_NMI, }; static void intel_irq_remapping_prepare_irte(struct intel_ir_data *data, -- 2.7.4
WARNING: multiple messages have this Message-ID (diff)
From: Ricardo Neri <ricardo.neri-calderon@linux.intel.com> To: Thomas Gleixner <tglx@linutronix.de>, Ingo Molnar <mingo@kernel.org>, "H. Peter Anvin" <hpa@zytor.com> Cc: Andi Kleen <andi.kleen@intel.com>, Ashok Raj <ashok.raj@intel.com>, Borislav Petkov <bp@suse.de>, Tony Luck <tony.luck@intel.com>, "Ravi V. Shankar" <ravi.v.shankar@intel.com>, x86@kernel.org, sparclinux@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org, Ricardo Neri <ricardo.neri-calderon@linux.intel.com>, Jacob Pan <jacob.jun.pan@intel.com>, Joerg Roedel <joro@8bytes.org>, iommu@lists.linux-foundation.org Subject: [RFC PATCH 04/23] iommu/vt-d/irq_remapping: Add support for IRQCHIP_CAN_DELIVER_AS_NMI Date: Wed, 13 Jun 2018 00:57:24 +0000 [thread overview] Message-ID: <1528851463-21140-5-git-send-email-ricardo.neri-calderon@linux.intel.com> (raw) In-Reply-To: <1528851463-21140-1-git-send-email-ricardo.neri-calderon@linux.intel.com> The Intel IOMMU is capable of delivering remapped interrupts as non- maskable. Add the IRQCHIP_CAN_DELIVER_AS_NMI flag to its irq_chip structure to declare this capability. The delivery mode of each interrupt can be set separately. By default, the deliver mode is taken from the configuration field of the interrupt data. If non-maskable delivery is requested in the interrupt state flags, the respective entry in the remapping table is updated. When remapping an interrupt from an IO APIC, modify the delivery field in the interrupt remapping table entry. When remapping an MSI interrupt, simply update the delivery mode when composing the message. Cc: Ashok Raj <ashok.raj@intel.com> Cc: Andi Kleen <andi.kleen@intel.com> Cc: Tony Luck <tony.luck@intel.com> Cc: Borislav Petkov <bp@suse.de> Cc: Jacob Pan <jacob.jun.pan@intel.com> Cc: Joerg Roedel <joro@8bytes.org> Cc: "Ravi V. Shankar" <ravi.v.shankar@intel.com> Cc: x86@kernel.org Cc: iommu@lists.linux-foundation.org Signed-off-by: Ricardo Neri <ricardo.neri-calderon@linux.intel.com> --- drivers/iommu/intel_irq_remapping.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/iommu/intel_irq_remapping.c b/drivers/iommu/intel_irq_remapping.c index 9f3a04d..b6cf7c4 100644 --- a/drivers/iommu/intel_irq_remapping.c +++ b/drivers/iommu/intel_irq_remapping.c @@ -1128,10 +1128,14 @@ static void intel_ir_reconfigure_irte(struct irq_data *irqd, bool force) struct irte *irte = &ir_data->irte_entry; struct irq_cfg *cfg = irqd_cfg(irqd); + if (irqd_deliver_as_nmi(irqd)) + cfg->delivery_mode = dest_NMI; + /* * Atomically updates the IRTE with the new destination, vector * and flushes the interrupt entry cache. */ + irte->dlvry_mode = cfg->delivery_mode; irte->vector = cfg->vector; irte->dest_id = IRTE_DEST(cfg->dest_apicid); @@ -1182,6 +1186,9 @@ static void intel_ir_compose_msi_msg(struct irq_data *irq_data, { struct intel_ir_data *ir_data = irq_data->chip_data; + if (irqd_deliver_as_nmi(irq_data)) + ir_data->irte_entry.dlvry_mode = dest_NMI; + *msg = ir_data->msi_entry; } @@ -1227,6 +1234,7 @@ static struct irq_chip intel_ir_chip = { .irq_set_affinity = intel_ir_set_affinity, .irq_compose_msi_msg = intel_ir_compose_msi_msg, .irq_set_vcpu_affinity = intel_ir_set_vcpu_affinity, + .flags = IRQCHIP_CAN_DELIVER_AS_NMI, }; static void intel_irq_remapping_prepare_irte(struct intel_ir_data *data, -- 2.7.4
next prev parent reply other threads:[~2018-06-13 1:06 UTC|newest] Thread overview: 200+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-06-13 0:57 [RFC PATCH 00/23] Implement an HPET-based hardlockup detector Ricardo Neri 2018-06-13 0:57 ` Ricardo Neri 2018-06-13 0:57 ` [RFC PATCH 01/23] x86/apic: Add a parameter for the APIC delivery mode Ricardo Neri 2018-06-13 0:57 ` Ricardo Neri 2018-06-13 0:57 ` Ricardo Neri 2018-06-13 0:57 ` [RFC PATCH 02/23] genirq: Introduce IRQD_DELIVER_AS_NMI Ricardo Neri 2018-06-13 0:57 ` Ricardo Neri 2018-06-13 0:57 ` [RFC PATCH 03/23] genirq: Introduce IRQF_DELIVER_AS_NMI Ricardo Neri 2018-06-13 0:57 ` Ricardo Neri 2018-06-13 0:57 ` Ricardo Neri 2018-06-13 8:34 ` Peter Zijlstra 2018-06-13 8:34 ` Peter Zijlstra 2018-06-13 8:34 ` Peter Zijlstra 2018-06-13 8:59 ` Julien Thierry 2018-06-13 8:59 ` Julien Thierry 2018-06-13 8:59 ` Julien Thierry 2018-06-13 9:20 ` Thomas Gleixner 2018-06-13 9:20 ` Thomas Gleixner 2018-06-13 9:20 ` Thomas Gleixner 2018-06-13 9:36 ` Julien Thierry 2018-06-13 9:36 ` Julien Thierry 2018-06-13 9:36 ` Julien Thierry 2018-06-13 9:49 ` Julien Thierry 2018-06-13 9:49 ` Julien Thierry 2018-06-13 9:49 ` Julien Thierry 2018-06-13 9:57 ` Thomas Gleixner 2018-06-13 9:57 ` Thomas Gleixner 2018-06-13 9:57 ` Thomas Gleixner 2018-06-13 10:25 ` Julien Thierry 2018-06-13 10:25 ` Julien Thierry 2018-06-13 10:25 ` Julien Thierry 2018-06-13 10:06 ` Marc Zyngier 2018-06-13 10:06 ` Marc Zyngier 2018-06-13 10:06 ` Marc Zyngier 2018-06-15 2:12 ` Ricardo Neri 2018-06-15 2:12 ` Ricardo Neri 2018-06-15 2:12 ` Ricardo Neri 2018-06-15 8:01 ` Julien Thierry 2018-06-15 8:01 ` Julien Thierry 2018-06-15 8:01 ` Julien Thierry 2018-06-16 0:39 ` Ricardo Neri 2018-06-16 0:39 ` Ricardo Neri 2018-06-16 0:39 ` Ricardo Neri 2018-06-16 13:36 ` Thomas Gleixner 2018-06-16 13:36 ` Thomas Gleixner 2018-06-16 13:36 ` Thomas Gleixner 2018-06-13 0:57 ` Ricardo Neri [this message] 2018-06-13 0:57 ` [RFC PATCH 04/23] iommu/vt-d/irq_remapping: Add support for IRQCHIP_CAN_DELIVER_AS_NMI Ricardo Neri 2018-06-13 0:57 ` [RFC PATCH 05/23] x86/msi: " Ricardo Neri 2018-06-13 0:57 ` Ricardo Neri 2018-06-13 0:57 ` [RFC PATCH 06/23] x86/ioapic: Add support for IRQCHIP_CAN_DELIVER_AS_NMI with interrupt remapping Ricardo Neri 2018-06-13 0:57 ` Ricardo Neri 2018-06-13 0:57 ` [RFC PATCH 07/23] x86/hpet: Expose more functions to read and write registers Ricardo Neri 2018-06-13 0:57 ` Ricardo Neri 2018-06-13 0:57 ` [RFC PATCH 08/23] x86/hpet: Calculate ticks-per-second in a separate function Ricardo Neri 2018-06-13 0:57 ` Ricardo Neri 2018-06-13 0:57 ` [RFC PATCH 09/23] x86/hpet: Reserve timer for the HPET hardlockup detector Ricardo Neri 2018-06-13 0:57 ` Ricardo Neri 2018-06-13 0:57 ` [RFC PATCH 10/23] x86/hpet: Relocate flag definitions to a header file Ricardo Neri 2018-06-13 0:57 ` Ricardo Neri 2018-06-13 0:57 ` [RFC PATCH 11/23] x86/hpet: Configure the timer used by the hardlockup detector Ricardo Neri 2018-06-13 0:57 ` Ricardo Neri 2018-06-13 0:57 ` [RFC PATCH 12/23] kernel/watchdog: Introduce a struct for NMI watchdog operations Ricardo Neri 2018-06-13 0:57 ` Ricardo Neri 2018-06-13 0:57 ` Ricardo Neri 2018-06-13 7:41 ` Nicholas Piggin 2018-06-13 7:41 ` Nicholas Piggin 2018-06-13 7:41 ` Nicholas Piggin 2018-06-13 8:42 ` Peter Zijlstra 2018-06-13 8:42 ` Peter Zijlstra 2018-06-13 8:42 ` Peter Zijlstra 2018-06-13 9:26 ` Thomas Gleixner 2018-06-13 9:26 ` Thomas Gleixner 2018-06-13 9:26 ` Thomas Gleixner 2018-06-13 11:52 ` Nicholas Piggin 2018-06-13 11:52 ` Nicholas Piggin 2018-06-13 11:52 ` Nicholas Piggin 2018-06-14 1:31 ` Ricardo Neri 2018-06-14 1:31 ` Ricardo Neri 2018-06-14 1:31 ` Ricardo Neri 2018-06-14 2:32 ` Nicholas Piggin 2018-06-14 2:32 ` Nicholas Piggin 2018-06-14 2:32 ` Nicholas Piggin 2018-06-14 8:32 ` Thomas Gleixner 2018-06-14 8:32 ` Thomas Gleixner 2018-06-14 8:32 ` Thomas Gleixner 2018-06-15 2:21 ` Ricardo Neri 2018-06-15 2:21 ` Ricardo Neri 2018-06-15 2:21 ` Ricardo Neri 2018-06-14 1:26 ` Ricardo Neri 2018-06-14 1:26 ` Ricardo Neri 2018-06-14 1:26 ` Ricardo Neri 2018-06-13 0:57 ` [RFC PATCH 13/23] watchdog/hardlockup: Define a generic function to detect hardlockups Ricardo Neri 2018-06-13 0:57 ` Ricardo Neri 2018-06-13 0:57 ` Ricardo Neri 2018-06-13 0:57 ` [RFC PATCH 14/23] watchdog/hardlockup: Decouple the hardlockup detector from perf Ricardo Neri 2018-06-13 0:57 ` Ricardo Neri 2018-06-13 0:57 ` Ricardo Neri 2018-06-13 8:43 ` Peter Zijlstra 2018-06-13 8:43 ` Peter Zijlstra 2018-06-13 8:43 ` Peter Zijlstra 2018-06-14 1:19 ` Ricardo Neri 2018-06-14 1:19 ` Ricardo Neri 2018-06-14 1:19 ` Ricardo Neri 2018-06-14 1:41 ` Nicholas Piggin 2018-06-14 1:41 ` Nicholas Piggin 2018-06-14 1:41 ` Nicholas Piggin 2018-06-15 2:23 ` Ricardo Neri 2018-06-15 2:23 ` Ricardo Neri 2018-06-15 2:23 ` Ricardo Neri 2018-06-13 0:57 ` [RFC PATCH 15/23] kernel/watchdog: Add a function to obtain the watchdog_allowed_mask Ricardo Neri 2018-06-13 0:57 ` Ricardo Neri 2018-06-13 0:57 ` Ricardo Neri 2018-06-13 0:57 ` [RFC PATCH 16/23] watchdog/hardlockup: Add an HPET-based hardlockup detector Ricardo Neri 2018-06-13 0:57 ` Ricardo Neri 2018-06-13 0:57 ` Ricardo Neri 2018-06-13 5:23 ` Randy Dunlap 2018-06-13 5:23 ` Randy Dunlap 2018-06-13 5:23 ` Randy Dunlap 2018-06-14 1:00 ` Ricardo Neri 2018-06-14 1:00 ` Ricardo Neri 2018-06-14 1:00 ` Ricardo Neri 2018-06-13 0:57 ` [RFC PATCH 17/23] watchdog/hardlockup/hpet: Convert the timer's interrupt to NMI Ricardo Neri 2018-06-13 0:57 ` Ricardo Neri 2018-06-13 0:57 ` Ricardo Neri 2018-06-13 9:07 ` Peter Zijlstra 2018-06-13 9:07 ` Peter Zijlstra 2018-06-13 9:07 ` Peter Zijlstra 2018-06-15 2:07 ` Ricardo Neri 2018-06-15 2:07 ` Ricardo Neri 2018-06-15 2:07 ` Ricardo Neri 2018-06-13 9:40 ` Thomas Gleixner 2018-06-13 9:40 ` Thomas Gleixner 2018-06-13 9:40 ` Thomas Gleixner 2018-06-15 2:03 ` Ricardo Neri 2018-06-15 2:03 ` Ricardo Neri 2018-06-15 2:03 ` Ricardo Neri 2018-06-15 9:19 ` Thomas Gleixner 2018-06-15 9:19 ` Thomas Gleixner 2018-06-15 9:19 ` Thomas Gleixner 2018-06-16 0:51 ` Ricardo Neri 2018-06-16 0:51 ` Ricardo Neri 2018-06-16 0:51 ` Ricardo Neri 2018-06-16 13:24 ` Thomas Gleixner 2018-06-16 13:24 ` Thomas Gleixner 2018-06-16 13:24 ` Thomas Gleixner 2018-06-20 0:15 ` Ricardo Neri 2018-06-20 0:15 ` Ricardo Neri 2018-06-20 0:15 ` Ricardo Neri 2018-06-20 0:25 ` Randy Dunlap 2018-06-20 0:25 ` Randy Dunlap 2018-06-20 0:25 ` Randy Dunlap 2018-06-21 0:25 ` Ricardo Neri 2018-06-21 0:25 ` Ricardo Neri 2018-06-21 0:25 ` Ricardo Neri 2018-06-20 7:47 ` Thomas Gleixner 2018-06-20 7:47 ` Thomas Gleixner 2018-06-20 7:47 ` Thomas Gleixner 2018-06-13 0:57 ` [RFC PATCH 18/23] watchdog/hardlockup/hpet: Add the NMI watchdog operations Ricardo Neri 2018-06-13 0:57 ` Ricardo Neri 2018-06-13 0:57 ` Ricardo Neri 2018-06-13 0:57 ` [RFC PATCH 19/23] watchdog/hardlockup: Make arch_touch_nmi_watchdog() to hpet-based implementation Ricardo Neri 2018-06-13 0:57 ` Ricardo Neri 2018-06-13 0:57 ` Ricardo Neri 2018-06-13 0:57 ` [RFC PATCH 20/23] watchdog/hardlockup/hpet: Rotate interrupt among all monitored CPUs Ricardo Neri 2018-06-13 0:57 ` Ricardo Neri 2018-06-13 0:57 ` Ricardo Neri 2018-06-13 9:48 ` Thomas Gleixner 2018-06-13 9:48 ` Thomas Gleixner 2018-06-13 9:48 ` Thomas Gleixner 2018-06-15 2:16 ` Ricardo Neri 2018-06-15 2:16 ` Ricardo Neri 2018-06-15 2:16 ` Ricardo Neri 2018-06-15 10:29 ` Thomas Gleixner 2018-06-15 10:29 ` Thomas Gleixner 2018-06-15 10:29 ` Thomas Gleixner 2018-06-16 0:46 ` Ricardo Neri 2018-06-16 0:46 ` Ricardo Neri 2018-06-16 0:46 ` Ricardo Neri 2018-06-16 13:27 ` Thomas Gleixner 2018-06-16 13:27 ` Thomas Gleixner 2018-06-16 13:27 ` Thomas Gleixner 2018-06-13 0:57 ` [RFC PATCH 21/23] watchdog/hardlockup/hpet: Adjust timer expiration on the number of " Ricardo Neri 2018-06-13 0:57 ` Ricardo Neri 2018-06-13 0:57 ` Ricardo Neri 2018-06-13 0:57 ` [RFC PATCH 22/23] watchdog/hardlockup/hpet: Only enable the HPET watchdog via a boot parameter Ricardo Neri 2018-06-13 0:57 ` Ricardo Neri 2018-06-13 0:57 ` Ricardo Neri 2018-06-13 5:26 ` Randy Dunlap 2018-06-13 5:26 ` Randy Dunlap 2018-06-13 5:26 ` Randy Dunlap 2018-06-14 0:58 ` Ricardo Neri 2018-06-14 0:58 ` Ricardo Neri 2018-06-14 0:58 ` Ricardo Neri 2018-06-14 3:30 ` Randy Dunlap 2018-06-14 3:30 ` Randy Dunlap 2018-06-14 3:30 ` Randy Dunlap 2018-06-13 0:57 ` [RFC PATCH 23/23] watchdog/hardlockup: Activate the HPET-based lockup detector Ricardo Neri 2018-06-13 0:57 ` Ricardo Neri 2018-06-13 0:57 ` Ricardo Neri
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1528851463-21140-5-git-send-email-ricardo.neri-calderon@linux.intel.com \ --to=ricardo.neri-calderon@linux.intel.com \ --cc=andi.kleen@intel.com \ --cc=ashok.raj@intel.com \ --cc=bp@suse.de \ --cc=hpa@zytor.com \ --cc=iommu@lists.linux-foundation.org \ --cc=jacob.jun.pan@intel.com \ --cc=joro@8bytes.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linuxppc-dev@lists.ozlabs.org \ --cc=mingo@kernel.org \ --cc=ravi.v.shankar@intel.com \ --cc=sparclinux@vger.kernel.org \ --cc=tglx@linutronix.de \ --cc=tony.luck@intel.com \ --cc=x86@kernel.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.