Currently there is no irq_free_host() routine, and that's
more or less OK - because all you need to do is free it.
However the next patch needs to introduce additional
tear down so we'll need a proper free routine.

Signed-off-by: Michael Ellerman <[EMAIL PROTECTED]>
---
 arch/powerpc/kernel/irq.c |   15 ++++++++-------
 include/asm-powerpc/irq.h |    8 ++++++++
 2 files changed, 16 insertions(+), 7 deletions(-)


ps.  This is 27 material.

diff --git a/arch/powerpc/kernel/irq.c b/arch/powerpc/kernel/irq.c
index 2f73f70..8ba8fbf 100644
--- a/arch/powerpc/kernel/irq.c
+++ b/arch/powerpc/kernel/irq.c
@@ -442,6 +442,13 @@ static int default_irq_host_match(struct irq_host *h, 
struct device_node *np)
        return h->of_node != NULL && h->of_node == np;
 }
 
+void irq_free_host(struct irq_host *host)
+{
+       /* If it's still very early in boot we can't free, oh well. */
+       if (mem_init_done)
+               kfree(host);
+}
+
 struct irq_host *irq_alloc_host(struct device_node *of_node,
                                unsigned int revmap_type,
                                unsigned int revmap_arg,
@@ -478,13 +485,7 @@ struct irq_host *irq_alloc_host(struct device_node 
*of_node,
        if (revmap_type == IRQ_HOST_MAP_LEGACY) {
                if (irq_map[0].host != NULL) {
                        spin_unlock_irqrestore(&irq_big_lock, flags);
-                       /* If we are early boot, we can't free the structure,
-                        * too bad...
-                        * this will be fixed once slab is made available early
-                        * instead of the current cruft
-                        */
-                       if (mem_init_done)
-                               kfree(host);
+                       irq_free_host(host);
                        return NULL;
                }
                irq_map[0].host = host;
diff --git a/include/asm-powerpc/irq.h b/include/asm-powerpc/irq.h
index 5089deb..7d9974a 100644
--- a/include/asm-powerpc/irq.h
+++ b/include/asm-powerpc/irq.h
@@ -165,6 +165,14 @@ extern struct irq_host *irq_alloc_host(struct device_node 
*of_node,
                                       struct irq_host_ops *ops,
                                       irq_hw_number_t inval_irq);
 
+/**
+ * irq_free_host - Free an irq_host data structure
+ * @host: The irq_host to free.
+ *
+ * Does any required cleanup and then frees the irq_host.
+ */
+extern void irq_free_host(struct irq_host *host);
+
 
 /**
  * irq_find_host - Locates a host for a given device node
-- 
1.5.5

_______________________________________________
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev

Reply via email to