Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=bb74b734a68544ad8f1537a33a7e22c73c87ed1c
Commit:     bb74b734a68544ad8f1537a33a7e22c73c87ed1c
Parent:     42d5f99b1d801b87c45c87d7392f610d5aef351b
Author:     David S. Miller <[EMAIL PROTECTED]>
AuthorDate: Sat Oct 13 23:27:48 2007 -0700
Committer:  David S. Miller <[EMAIL PROTECTED]>
CommitDate: Sat Oct 13 23:27:48 2007 -0700

    [SPARC64]: Kill ugly __irq_ino() macro.
    
    We have a place to stick INO information in the
    virt_to_real_irq_table[], which is currently only used for VIRQs.
    And that is readily accessible from the one __irq_ino() call site.
    
    Signed-off-by: David S. Miller <[EMAIL PROTECTED]>
---
 arch/sparc64/kernel/irq.c     |   22 +++++++++++-----------
 arch/sparc64/kernel/pci_msi.c |    2 +-
 include/asm-sparc64/irq.h     |    4 +++-
 3 files changed, 15 insertions(+), 13 deletions(-)

diff --git a/arch/sparc64/kernel/irq.c b/arch/sparc64/kernel/irq.c
index dc51bdf..f8f7045 100644
--- a/arch/sparc64/kernel/irq.c
+++ b/arch/sparc64/kernel/irq.c
@@ -122,8 +122,6 @@ static void bucket_set_virt_irq(unsigned long bucket_pa,
                               "i" (ASI_PHYS_USE_EC));
 }
 
-#define __irq_ino(irq) \
-        (((struct ino_bucket *)(irq)) - &ivector_table[0])
 #define __bucket(irq) ((struct ino_bucket *)(irq))
 #define __irq(bucket) ((unsigned long)(bucket))
 
@@ -136,7 +134,9 @@ static struct {
 } virt_to_real_irq_table[NR_IRQS];
 static DEFINE_SPINLOCK(virt_irq_alloc_lock);
 
-unsigned char virt_irq_alloc(unsigned long real_irq)
+unsigned char virt_irq_alloc(unsigned long real_irq,
+                            unsigned int dev_handle,
+                            unsigned int dev_ino)
 {
        unsigned long flags;
        unsigned char ent;
@@ -154,6 +154,8 @@ unsigned char virt_irq_alloc(unsigned long real_irq)
                ent = 0;
        } else {
                virt_to_real_irq_table[ent].irq = real_irq;
+               virt_to_real_irq_table[ent].dev_handle = dev_handle;
+               virt_to_real_irq_table[ent].dev_ino = dev_ino;
        }
 
        spin_unlock_irqrestore(&virt_irq_alloc_lock, flags);
@@ -554,11 +556,12 @@ static void sun4v_virq_end(unsigned int virt_irq)
 
 static void run_pre_handler(unsigned int virt_irq)
 {
-       struct ino_bucket *bucket = virt_irq_to_bucket(virt_irq);
        struct irq_handler_data *data = get_irq_chip_data(virt_irq);
+       unsigned int ino;
 
+       ino = virt_to_real_irq_table[virt_irq].dev_ino;
        if (likely(data->pre_handler)) {
-               data->pre_handler(__irq_ino(__irq(bucket)),
+               data->pre_handler(ino,
                                  data->pre_handler_arg1,
                                  data->pre_handler_arg2);
        }
@@ -633,7 +636,7 @@ unsigned int build_irq(int inofixup, unsigned long iclr, 
unsigned long imap)
        bucket = &ivector_table[ino];
        virt_irq = bucket_get_virt_irq(__pa(bucket));
        if (!virt_irq) {
-               virt_irq = virt_irq_alloc(__irq(bucket));
+               virt_irq = virt_irq_alloc(__irq(bucket), 0, ino);
                bucket_set_virt_irq(__pa(bucket), virt_irq);
                set_irq_chip(virt_irq, &sun4u_irq);
        }
@@ -668,7 +671,7 @@ static unsigned int sun4v_build_common(unsigned long sysino,
        bucket = &ivector_table[sysino];
        virt_irq = bucket_get_virt_irq(__pa(bucket));
        if (!virt_irq) {
-               virt_irq = virt_irq_alloc(__irq(bucket));
+               virt_irq = virt_irq_alloc(__irq(bucket), 0, sysino);
                bucket_set_virt_irq(__pa(bucket), virt_irq);
                set_irq_chip(virt_irq, chip);
        }
@@ -716,7 +719,7 @@ unsigned int sun4v_build_virq(u32 devhandle, unsigned int 
devino)
                             ((unsigned long) bucket +
                              sizeof(struct ino_bucket)));
 
-       virt_irq = virt_irq_alloc(__irq(bucket));
+       virt_irq = virt_irq_alloc(__irq(bucket), devhandle, devino);
        bucket_set_virt_irq(__pa(bucket), virt_irq);
        set_irq_chip(virt_irq, &sun4v_virq);
 
@@ -741,9 +744,6 @@ unsigned int sun4v_build_virq(u32 devhandle, unsigned int 
devino)
                prom_halt();
        }
 
-       virt_to_real_irq_table[virt_irq].dev_handle = devhandle;
-       virt_to_real_irq_table[virt_irq].dev_ino = devino;
-
        return virt_irq;
 }
 
diff --git a/arch/sparc64/kernel/pci_msi.c b/arch/sparc64/kernel/pci_msi.c
index 0fa33b1..e4920cf 100644
--- a/arch/sparc64/kernel/pci_msi.c
+++ b/arch/sparc64/kernel/pci_msi.c
@@ -123,7 +123,7 @@ int sparc64_setup_msi_irq(unsigned int *virt_irq_p,
        int msi, err;
        u32 msiqid;
 
-       *virt_irq_p = virt_irq_alloc(~0);
+       *virt_irq_p = virt_irq_alloc(~0, 0, 0);
        err = -ENOMEM;
        if (!*virt_irq_p)
                goto out_err;
diff --git a/include/asm-sparc64/irq.h b/include/asm-sparc64/irq.h
index 24841c2..fd34d73 100644
--- a/include/asm-sparc64/irq.h
+++ b/include/asm-sparc64/irq.h
@@ -59,7 +59,9 @@ extern unsigned int sun4u_build_msi(u32 portid, unsigned int 
*virt_irq_p,
 extern void sun4u_destroy_msi(unsigned int virt_irq);
 extern unsigned int sbus_build_irq(void *sbus, unsigned int ino);
 
-extern unsigned char virt_irq_alloc(unsigned long real_irq);
+extern unsigned char virt_irq_alloc(unsigned long real_irq,
+                                   unsigned int dev_handle,
+                                   unsigned int dev_ino);
 #ifdef CONFIG_PCI_MSI
 extern void virt_irq_free(unsigned int virt_irq);
 #endif
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to