From: Grant Likely <grant.likely@secretlab.ca>
To: linux-kernel@vger.kernel.org,
Benjamin Herrenschmidt <benh@kernel.crashing.org>,
Thomas Gleixner <tglx@linutronix.de>,
Milton Miller <miltonm@bga.com>,
Rob Herring <rob.herring@calxeda.com>,
Stephen Rothwell <sfr@canb.auug.org.au>
Cc: devicetree-discuss@lists.ozlabs.org,
linuxppc-dev@lists.ozlabs.org,
linux-arm-kernel@lists.infradead.org
Subject: [PATCH v3 16/25] irq_domain: constify irq_domain_ops
Date: Fri, 27 Jan 2012 14:36:10 -0700 [thread overview]
Message-ID: <1327700179-17454-17-git-send-email-grant.likely@secretlab.ca> (raw)
In-Reply-To: <1327700179-17454-1-git-send-email-grant.likely@secretlab.ca>
Make irq_domain_ops pointer a constant to make it safer for multiple
instances to share the same ops pointer and change the irq_domain code
so that it does not modify the ops.
Signed-off-by: Grant Likely <grant.likely@secretlab.ca>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Milton Miller <miltonm@bga.com>
---
include/linux/irqdomain.h | 14 +++++++-------
kernel/irq/irqdomain.c | 31 +++++++++++++++----------------
2 files changed, 22 insertions(+), 23 deletions(-)
diff --git a/include/linux/irqdomain.h b/include/linux/irqdomain.h
index 1db30df..0b00f83 100644
--- a/include/linux/irqdomain.h
+++ b/include/linux/irqdomain.h
@@ -106,7 +106,7 @@ struct irq_domain {
} linear;
struct radix_tree_root tree;
} revmap_data;
- struct irq_domain_ops *ops;
+ const struct irq_domain_ops *ops;
void *host_data;
irq_hw_number_t inval_irq;
@@ -119,17 +119,17 @@ struct irq_domain *irq_domain_add_legacy(struct device_node *of_node,
unsigned int size,
unsigned int first_irq,
irq_hw_number_t first_hwirq,
- struct irq_domain_ops *ops,
+ const struct irq_domain_ops *ops,
void *host_data);
struct irq_domain *irq_domain_add_linear(struct device_node *of_node,
unsigned int size,
- struct irq_domain_ops *ops,
+ const struct irq_domain_ops *ops,
void *host_data);
struct irq_domain *irq_domain_add_nomap(struct device_node *of_node,
- struct irq_domain_ops *ops,
+ const struct irq_domain_ops *ops,
void *host_data);
struct irq_domain *irq_domain_add_tree(struct device_node *of_node,
- struct irq_domain_ops *ops,
+ const struct irq_domain_ops *ops,
void *host_data);
extern struct irq_domain *irq_find_host(struct device_node *node);
@@ -138,7 +138,7 @@ extern void irq_set_virq_count(unsigned int count);
static inline struct irq_domain *irq_domain_add_legacy_isa(
struct device_node *of_node,
- struct irq_domain_ops *ops,
+ const struct irq_domain_ops *ops,
void *host_data)
{
return irq_domain_add_legacy(of_node, NUM_ISA_INTERRUPTS, 0, 0, ops,
@@ -162,7 +162,7 @@ extern unsigned int irq_radix_revmap_lookup(struct irq_domain *host,
extern unsigned int irq_linear_revmap(struct irq_domain *host,
irq_hw_number_t hwirq);
-extern struct irq_domain_ops irq_domain_simple_ops;
+extern const struct irq_domain_ops irq_domain_simple_ops;
/* stock xlate functions */
int irq_domain_xlate_onecell(struct irq_domain *d, struct device_node *ctrlr,
diff --git a/kernel/irq/irqdomain.c b/kernel/irq/irqdomain.c
index b0ed3be..bf181ef 100644
--- a/kernel/irq/irqdomain.c
+++ b/kernel/irq/irqdomain.c
@@ -21,11 +21,6 @@ static DEFINE_MUTEX(revmap_trees_mutex);
static unsigned int irq_virq_count = NR_IRQS;
static struct irq_domain *irq_default_domain;
-static int default_irq_domain_match(struct irq_domain *d, struct device_node *np)
-{
- return d->of_node != NULL && d->of_node == np;
-}
-
/**
* irq_domain_alloc() - Allocate a new irq_domain data structure
* @of_node: optional device-tree node of the interrupt controller
@@ -39,7 +34,7 @@ static int default_irq_domain_match(struct irq_domain *d, struct device_node *np
*/
static struct irq_domain *irq_domain_alloc(struct device_node *of_node,
unsigned int revmap_type,
- struct irq_domain_ops *ops,
+ const struct irq_domain_ops *ops,
void *host_data)
{
struct irq_domain *domain;
@@ -54,9 +49,6 @@ static struct irq_domain *irq_domain_alloc(struct device_node *of_node,
domain->host_data = host_data;
domain->of_node = of_node_get(of_node);
- if (domain->ops->match == NULL)
- domain->ops->match = default_irq_domain_match;
-
return domain;
}
@@ -99,7 +91,7 @@ struct irq_domain *irq_domain_add_legacy(struct device_node *of_node,
unsigned int size,
unsigned int first_irq,
irq_hw_number_t first_hwirq,
- struct irq_domain_ops *ops,
+ const struct irq_domain_ops *ops,
void *host_data)
{
struct irq_domain *domain;
@@ -165,7 +157,7 @@ struct irq_domain *irq_domain_add_legacy(struct device_node *of_node,
*/
struct irq_domain *irq_domain_add_linear(struct device_node *of_node,
unsigned int size,
- struct irq_domain_ops *ops,
+ const struct irq_domain_ops *ops,
void *host_data)
{
struct irq_domain *domain;
@@ -187,7 +179,7 @@ struct irq_domain *irq_domain_add_linear(struct device_node *of_node,
}
struct irq_domain *irq_domain_add_nomap(struct device_node *of_node,
- struct irq_domain_ops *ops,
+ const struct irq_domain_ops *ops,
void *host_data)
{
struct irq_domain *domain = irq_domain_alloc(of_node,
@@ -206,7 +198,7 @@ struct irq_domain *irq_domain_add_nomap(struct device_node *of_node,
* (the reverse mapping will use the slow path until that happens).
*/
struct irq_domain *irq_domain_add_tree(struct device_node *of_node,
- struct irq_domain_ops *ops,
+ const struct irq_domain_ops *ops,
void *host_data)
{
struct irq_domain *domain = irq_domain_alloc(of_node,
@@ -225,6 +217,7 @@ struct irq_domain *irq_domain_add_tree(struct device_node *of_node,
struct irq_domain *irq_find_host(struct device_node *node)
{
struct irq_domain *h, *found = NULL;
+ int rc;
/* We might want to match the legacy controller last since
* it might potentially be set to match all interrupts in
@@ -232,11 +225,17 @@ struct irq_domain *irq_find_host(struct device_node *node)
* yet though...
*/
mutex_lock(&irq_domain_mutex);
- list_for_each_entry(h, &irq_domain_list, link)
- if (h->ops->match(h, node)) {
+ list_for_each_entry(h, &irq_domain_list, link) {
+ if (h->ops->match)
+ rc = h->ops->match(h, node);
+ else
+ rc = (h->of_node != NULL) && (h->of_node == node);
+
+ if (rc) {
found = h;
break;
}
+ }
mutex_unlock(&irq_domain_mutex);
return found;
}
@@ -766,7 +765,7 @@ int irq_domain_xlate_pci(struct irq_domain *d, struct device_node *ctrlr,
}
EXPORT_SYMBOL_GPL(irq_domain_xlate_pci);
-struct irq_domain_ops irq_domain_simple_ops = {
+const struct irq_domain_ops irq_domain_simple_ops = {
.map = irq_domain_simple_map,
.xlate = irq_domain_xlate_onetwocell,
};
--
1.7.5.4
next prev parent reply other threads:[~2012-01-27 21:36 UTC|newest]
Thread overview: 66+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-01-27 21:35 [PATCH v3 00/25] irq_domain generalization and refinement Grant Likely
2012-01-27 21:35 ` [PATCH v3 01/25] irq_domain: add documentation and MAINTAINERS entry Grant Likely
2012-01-28 18:23 ` Randy Dunlap
2012-01-28 19:59 ` Grant Likely
2012-01-27 21:35 ` [PATCH v3 02/25] dt: Make irqdomain less verbose Grant Likely
2012-01-27 21:35 ` [PATCH v3 03/25] irq_domain: Make irq_domain structure match powerpc's irq_host Grant Likely
2012-01-27 21:35 ` [PATCH v3 04/25] irq_domain: convert microblaze from irq_host to irq_domain Grant Likely
2012-01-27 21:35 ` [PATCH v3 05/25] irq_domain/powerpc: Use common irq_domain structure instead of irq_host Grant Likely
2012-01-27 21:36 ` [PATCH v3 06/25] irq_domain/powerpc: eliminate irq_map; use irq_alloc_desc() instead Grant Likely
2012-01-27 21:36 ` [PATCH v3 07/25] irq_domain/powerpc: Eliminate virq_is_host() Grant Likely
2012-01-27 21:36 ` [PATCH v3 08/25] irq_domain: Move irq_domain code from powerpc to kernel/irq Grant Likely
2012-01-27 21:36 ` [PATCH v3 09/25] irqdomain: remove NO_IRQ from irq domain code Grant Likely
2012-01-27 21:36 ` [PATCH v3 10/25] irq_domain: Remove references to old irq_host names Grant Likely
2012-01-27 21:36 ` [PATCH v3 11/25] irq_domain: Replace irq_alloc_host() with revmap-specific initializers Grant Likely
2012-01-27 21:36 ` [PATCH v3 12/25] irq_domain: Add support for base irq and hwirq in legacy mappings Grant Likely
2012-01-27 21:36 ` [PATCH v3 13/25] irq_domain: Remove 'new' irq_domain in favour of the ppc one Grant Likely
2012-02-03 14:48 ` Cousson, Benoit
2012-02-03 16:42 ` Grant Likely
2012-01-27 21:36 ` [PATCH v3 14/25] irq_domain: Remove irq_domain_add_simple() Grant Likely
2012-01-31 12:45 ` Shawn Guo
2012-01-31 13:15 ` Rob Herring
2012-01-31 13:58 ` Shawn Guo
2012-02-01 0:08 ` Grant Likely
2012-01-27 21:36 ` [PATCH v3 15/25] irq_domain: Create common xlate functions that device drivers can use Grant Likely
2012-01-27 21:36 ` Grant Likely [this message]
2012-01-27 21:36 ` [PATCH v3 17/25] irq_domain/c6x: Convert c6x to use generic irq_domain support Grant Likely
2012-01-27 21:36 ` [PATCH v3 18/25] irq_domain/c6x: constify irq_domain structures Grant Likely
2012-01-27 21:36 ` [PATCH v3 19/25] irq_domain/c6x: Use library of xlate functions Grant Likely
2012-01-27 21:36 ` [PATCH v3 20/25] irq_domain/powerpc: constify irq_domain_ops Grant Likely
2012-01-27 21:36 ` [PATCH v3 21/25] irqdomain/powerpc: Replace custom xlate functions with library functions Grant Likely
2012-02-06 5:22 ` Michael Neuling
2012-02-06 6:00 ` Grant Likely
2012-01-27 21:36 ` [PATCH v3 22/25] irq_domain/x86: Convert x86 (embedded) to use common irq_domain Grant Likely
2012-01-28 16:44 ` Sebastian Andrzej Siewior
2012-01-29 0:35 ` Grant Likely
2012-01-29 0:39 ` Grant Likely
2012-01-30 19:58 ` Grant Likely
2012-02-01 14:17 ` Sebastian Andrzej Siewior
2012-02-01 18:06 ` Grant Likely
2012-02-23 19:56 ` Grant Likely
2012-02-23 21:22 ` Sebastian Andrzej Siewior
2012-02-23 21:39 ` Grant Likely
2012-01-27 21:36 ` [PATCH v3 23/25] irq_domain: Include hwirq number in /proc/interrupts Grant Likely
2012-01-27 21:36 ` [PATCH v3 24/25] irq_domain: remove "hint" when allocating irq numbers Grant Likely
2012-02-07 18:07 ` Nicolas Ferre
2012-02-15 15:04 ` Nicolas Ferre
2012-02-15 20:21 ` Grant Likely
2012-02-15 21:50 ` Shawn Guo
2012-02-16 5:32 ` Grant Likely
2012-02-16 6:03 ` Shawn Guo
2012-01-27 21:36 ` [PATCH v3 25/25] irq_domain: mostly eliminate slow-path revmap lookups Grant Likely
2012-02-15 16:36 ` Nicolas Ferre
2012-02-15 20:29 ` Grant Likely
2012-01-28 18:38 ` [PATCH v3 00/25] irq_domain generalization and refinement Rob Herring
2012-01-28 19:10 ` Grant Likely
2012-01-31 4:53 ` Olof Johansson
2012-02-01 0:07 ` Grant Likely
2012-02-04 22:17 ` Russell King - ARM Linux
2012-02-04 22:31 ` Russell King - ARM Linux
2012-02-05 1:38 ` Tony Lindgren
2012-02-05 16:13 ` Russell King - ARM Linux
2012-02-07 15:26 ` Mark Brown
2012-02-15 20:33 ` Grant Likely
2012-02-05 0:01 ` Benjamin Herrenschmidt
2012-02-06 0:51 ` Rob Herring
2012-02-06 5:56 ` Grant Likely
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=1327700179-17454-17-git-send-email-grant.likely@secretlab.ca \
--to=grant.likely@secretlab.ca \
--cc=benh@kernel.crashing.org \
--cc=devicetree-discuss@lists.ozlabs.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=miltonm@bga.com \
--cc=rob.herring@calxeda.com \
--cc=sfr@canb.auug.org.au \
--cc=tglx@linutronix.de \
/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: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).