FAILED: patch "[PATCH] genirq/irqdomain: Add an irq_create_mapping_affinity()" failed to apply to 4.14-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 4.14-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From bb4c6910c8b41623104c2e64a30615682689a54d Mon Sep 17 00:00:00 2001
From: Laurent Vivier <[email protected]>
Date: Thu, 26 Nov 2020 09:28:51 +0100
Subject: [PATCH] genirq/irqdomain: Add an irq_create_mapping_affinity()
function
There is currently no way to convey the affinity of an interrupt via irq_create_mapping(), which creates issues for devices that expect that affinity to be managed by the kernel.
In order to sort this out, rename irq_create_mapping() to irq_create_mapping_affinity() with an additional affinity parameter that can be passed down to irq_domain_alloc_descs().
irq_create_mapping() is re-implemented as a wrapper around irq_create_mapping_affinity().
No functional change.
include/linux/irqdomain.h +10 -2
@@ -384,11 +384,19 @@ extern void irq_domain_associate_many(struct irq_domain *domain,extern void irq_domain_disassociate (struct irq_domain *domain,unsigned int irq); -extern unsigned int irq_create_mapping (struct irq_domain *host, -irq_hw_number_t hwirq); +extern unsigned int irq_create_mapping_affinity (struct irq_domain *host, +irq_hw_number_t hwirq, +const struct irq_affinity_desc *affinity);extern unsigned int irq_create_fwspec_mapping (struct irq_fwspec *fwspec);extern void irq_dispose_mapping (unsigned int virq); +static inline unsigned int irq_create_mapping (struct irq_domain *host, +irq_hw_number_t hwirq) +{ +return irq_create_mapping_affinity (host, hwirq,NULL ); +} + +/** * irq_linear_revmap() - Find a linux irq from a hw irq number. * @domain: domain owning this hardware interrupt
kernel/irq/irqdomain.c +8 -5
@@ -624,17 +624,19 @@ unsigned int irq_create_direct_mapping(struct irq_domain *domain)EXPORT_SYMBOL_GPL (irq_create_direct_mapping);/** -* irq_create_mapping() - Map a hardware interrupt into linux irq space +* irq_create_mapping_affinity() - Map a hardware interrupt into linux irq space * @domain: domain owning this hardware interrupt or NULL for default domain * @hwirq: hardware irq number in that domain space +* @affinity: irq affinity * * Only one mapping per hardware interrupt is permitted. Returns a linux * irq number. * If the sense/trigger is to be specified, set_irq_type() should be called * on the number returned from that call. */ -unsigned int irq_create_mapping (struct irq_domain *domain, -irq_hw_number_t hwirq) +unsigned int irq_create_mapping_affinity (struct irq_domain *domain, +irq_hw_number_t hwirq, +const struct irq_affinity_desc *affinity) {struct device_node *of_node;int virq;
@@ -660,7 +662,8 @@ unsigned int irq_create_mapping(struct irq_domain *domain, }/* Allocate a virtual interrupt number */ - virq =irq_domain_alloc_descs (-1 ,1 , hwirq,of_node_to_nid (of_node),NULL ); + virq =irq_domain_alloc_descs (-1 ,1 , hwirq,of_node_to_nid (of_node), + affinity);if (virq <=0 ) {pr_debug ("-> virq allocation failed\n" );return 0 ;
@@ -676,7 +679,7 @@ unsigned int irq_create_mapping(struct irq_domain *domain,return virq; } -EXPORT_SYMBOL_GPL (irq_create_mapping); +EXPORT_SYMBOL_GPL (irq_create_mapping_affinity);/** * irq_create_strict_mappings() - Map a range of hw irqs to fixed linux irqs