x86: Further simplify mp_irq info handling
authorFeng Tang <feng.tang@intel.com>
Wed, 8 Dec 2010 07:18:57 +0000 (15:18 +0800)
committerThomas Gleixner <tglx@linutronix.de>
Thu, 9 Dec 2010 20:52:06 +0000 (21:52 +0100)
assign_to_mp_irq() is copying the struct mpc_intsrc members one by
one. That's silly. Use memcpy() and let the compiler figure it out.
Same for the identical function assign_to_mpc_intsrc()

mp_irq_mpc_intsrc_cmp() is comparing the struct members one by one,
but no caller ever checks the different return codes. Use memcmp()
instead.

Remove the extra printk in MP_ioapic_info()

Signed-off-by: Feng Tang <feng.tang@linux.intel.com>
Cc: Yinghai Lu <yinghai@kernel.org>
Cc: "Alan Cox <alan@linux.intel.com>
Cc: Len Brown <len.brown@intel.com>
LKML-Reference: <20101208151857.212f0018@feng-i7>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
arch/x86/kernel/apic/io_apic.c
arch/x86/kernel/mpparse.c

index c6b44f7..bb61a55 100644 (file)
@@ -126,39 +126,6 @@ static int __init parse_noapic(char *str)
 }
 early_param("noapic", parse_noapic);
 
-static void assign_to_mp_irq(struct mpc_intsrc *m,
-                                   struct mpc_intsrc *mp_irq)
-{
-       mp_irq->dstapic = m->dstapic;
-       mp_irq->type = m->type;
-       mp_irq->irqtype = m->irqtype;
-       mp_irq->irqflag = m->irqflag;
-       mp_irq->srcbus = m->srcbus;
-       mp_irq->srcbusirq = m->srcbusirq;
-       mp_irq->dstirq = m->dstirq;
-}
-
-static int mp_irq_mpc_intsrc_cmp(struct mpc_intsrc *mp_irq,
-                                       struct mpc_intsrc *m)
-{
-       if (mp_irq->dstapic != m->dstapic)
-               return 1;
-       if (mp_irq->type != m->type)
-               return 2;
-       if (mp_irq->irqtype != m->irqtype)
-               return 3;
-       if (mp_irq->irqflag != m->irqflag)
-               return 4;
-       if (mp_irq->srcbus != m->srcbus)
-               return 5;
-       if (mp_irq->srcbusirq != m->srcbusirq)
-               return 6;
-       if (mp_irq->dstirq != m->dstirq)
-               return 7;
-
-       return 0;
-}
-
 /* Will be called in mpparse/acpi/sfi codes for saving IRQ info */
 void mp_save_irq(struct mpc_intsrc *m)
 {
@@ -170,11 +137,11 @@ void mp_save_irq(struct mpc_intsrc *m)
                m->srcbusirq, m->dstapic, m->dstirq);
 
        for (i = 0; i < mp_irq_entries; i++) {
-               if (!mp_irq_mpc_intsrc_cmp(&mp_irqs[i], m))
+               if (!memcmp(&mp_irqs[i], m, sizeof(*m)))
                        return;
        }
 
-       assign_to_mp_irq(m, &mp_irqs[mp_irq_entries]);
+       memcpy(&mp_irqs[mp_irq_entries], m, sizeof(*m));
        if (++mp_irq_entries == MAX_IRQ_SOURCES)
                panic("Max # of irq sources exceeded!!\n");
 }
index 4318687..01b0f6d 100644 (file)
@@ -118,21 +118,8 @@ static void __init MP_bus_info(struct mpc_bus *m)
 
 static void __init MP_ioapic_info(struct mpc_ioapic *m)
 {
-       if (!(m->flags & MPC_APIC_USABLE))
-               return;
-
-       printk(KERN_INFO "I/O APIC #%d Version %d at 0x%X.\n",
-              m->apicid, m->apicver, m->apicaddr);
-
-       mp_register_ioapic(m->apicid, m->apicaddr, gsi_top);
-}
-
-static void print_MP_intsrc_info(struct mpc_intsrc *m)
-{
-       apic_printk(APIC_VERBOSE, "Int: type %d, pol %d, trig %d, bus %02x,"
-               " IRQ %02x, APIC ID %x, APIC INT %02x\n",
-               m->irqtype, m->irqflag & 3, (m->irqflag >> 2) & 3, m->srcbus,
-               m->srcbusirq, m->dstapic, m->dstirq);
+       if (m->flags & MPC_APIC_USABLE)
+               mp_register_ioapic(m->apicid, m->apicaddr, gsi_top);
 }
 
 static void __init print_mp_irq_info(struct mpc_intsrc *mp_irq)
@@ -144,23 +131,11 @@ static void __init print_mp_irq_info(struct mpc_intsrc *mp_irq)
                mp_irq->srcbusirq, mp_irq->dstapic, mp_irq->dstirq);
 }
 
-static void __init assign_to_mpc_intsrc(struct mpc_intsrc *mp_irq,
-                                       struct mpc_intsrc *m)
-{
-       m->dstapic = mp_irq->dstapic;
-       m->type = mp_irq->type;
-       m->irqtype = mp_irq->irqtype;
-       m->irqflag = mp_irq->irqflag;
-       m->srcbus = mp_irq->srcbus;
-       m->srcbusirq = mp_irq->srcbusirq;
-       m->dstirq = mp_irq->dstirq;
-}
 #else /* CONFIG_X86_IO_APIC */
 static inline void __init MP_bus_info(struct mpc_bus *m) {}
 static inline void __init MP_ioapic_info(struct mpc_ioapic *m) {}
 #endif /* CONFIG_X86_IO_APIC */
 
-
 static void __init MP_lintsrc_info(struct mpc_lintsrc *m)
 {
        apic_printk(APIC_VERBOSE, "Lint: type %d, pol %d, trig %d, bus %02x,"
@@ -172,7 +147,6 @@ static void __init MP_lintsrc_info(struct mpc_lintsrc *m)
 /*
  * Read/parse the MPC
  */
-
 static int __init smp_check_mpc(struct mpc_table *mpc, char *oem, char *str)
 {
 
@@ -718,11 +692,11 @@ static void __init check_irq_src(struct mpc_intsrc *m, int *nr_m_spare)
        int i;
 
        apic_printk(APIC_VERBOSE, "OLD ");
-       print_MP_intsrc_info(m);
+       print_mp_irq_info(m);
 
        i = get_MP_intsrc_index(m);
        if (i > 0) {
-               assign_to_mpc_intsrc(&mp_irqs[i], m);
+               memcpy(m, &mp_irqs[i], sizeof(*m));
                apic_printk(APIC_VERBOSE, "NEW ");
                print_mp_irq_info(&mp_irqs[i]);
                return;
@@ -809,14 +783,14 @@ static int  __init replace_intsrc_all(struct mpc_table *mpc,
                if (nr_m_spare > 0) {
                        apic_printk(APIC_VERBOSE, "*NEW* found\n");
                        nr_m_spare--;
-                       assign_to_mpc_intsrc(&mp_irqs[i], m_spare[nr_m_spare]);
+                       memcpy(m_spare[nr_m_spare], &mp_irqs[i], sizeof(mp_irqs[i]));
                        m_spare[nr_m_spare] = NULL;
                } else {
                        struct mpc_intsrc *m = (struct mpc_intsrc *)mpt;
                        count += sizeof(struct mpc_intsrc);
                        if (check_slot(mpc_new_phys, mpc_new_length, count) < 0)
                                goto out;
-                       assign_to_mpc_intsrc(&mp_irqs[i], m);
+                       memcpy(m, &mp_irqs[i], sizeof(*m));
                        mpc->length = count;
                        mpt += sizeof(struct mpc_intsrc);
                }