lkml.org 
[lkml]   [2008]   [Apr]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 9/9] x86: use bitmap library for pin_programmed
    Use bitmap library for pin_programmed rather than reinvent
    bitmaps.

    Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com>
    ---
    arch/x86/kernel/mpparse_32.c | 15 ++++++---------
    arch/x86/kernel/mpparse_64.c | 16 +++++++---------
    2 files changed, 13 insertions(+), 18 deletions(-)

    Index: 2.6-git/arch/x86/kernel/mpparse_64.c
    ===================================================================
    --- 2.6-git.orig/arch/x86/kernel/mpparse_64.c
    +++ 2.6-git/arch/x86/kernel/mpparse_64.c
    @@ -21,6 +21,7 @@
    #include <linux/mc146818rtc.h>
    #include <linux/acpi.h>
    #include <linux/module.h>
    +#include <linux/bitmap.h>

    #include <asm/smp.h>
    #include <asm/mtrr.h>
    @@ -643,7 +644,7 @@ static struct mp_ioapic_routing {
    int apic_id;
    int gsi_start;
    int gsi_end;
    - u32 pin_programmed[4];
    + DECLARE_BITMAP(pin_programmed, MP_MAX_IOAPIC_PIN + 1);
    } mp_ioapic_routing[MAX_IO_APICS];

    static int mp_find_ioapic(int gsi)
    @@ -802,9 +803,8 @@ void __init mp_config_acpi_legacy_irqs(v

    int mp_register_gsi(u32 gsi, int triggering, int polarity)
    {
    - int ioapic = -1;
    - int ioapic_pin = 0;
    - int idx, bit = 0;
    + int ioapic;
    + int ioapic_pin;

    if (acpi_irq_model != ACPI_IRQ_MODEL_IOAPIC)
    return gsi;
    @@ -826,21 +826,19 @@ int mp_register_gsi(u32 gsi, int trigger
    * with redundant pin->gsi mappings (but unique PCI devices);
    * we only program the IOAPIC on the first.
    */
    - bit = ioapic_pin % 32;
    - idx = (ioapic_pin < 32) ? 0 : (ioapic_pin / 32);
    - if (idx > 3) {
    + if (ioapic_pin > MP_MAX_IOAPIC_PIN) {
    printk(KERN_ERR "Invalid reference to IOAPIC pin "
    "%d-%d\n", mp_ioapic_routing[ioapic].apic_id,
    ioapic_pin);
    return gsi;
    }
    - if ((1<<bit) & mp_ioapic_routing[ioapic].pin_programmed[idx]) {
    + if (test_bit(ioapic_pin, mp_ioapic_routing[ioapic].pin_programmed)) {
    Dprintk(KERN_DEBUG "Pin %d-%d already programmed\n",
    mp_ioapic_routing[ioapic].apic_id, ioapic_pin);
    return gsi;
    }

    - mp_ioapic_routing[ioapic].pin_programmed[idx] |= (1<<bit);
    + set_bit(ioapic_pin, mp_ioapic_routing[ioapic].pin_programmed);

    io_apic_set_pci_routing(ioapic, ioapic_pin, gsi,
    triggering == ACPI_EDGE_SENSITIVE ? 0 : 1,
    Index: 2.6-git/arch/x86/kernel/mpparse_32.c
    ===================================================================
    --- 2.6-git.orig/arch/x86/kernel/mpparse_32.c
    +++ 2.6-git/arch/x86/kernel/mpparse_32.c
    @@ -859,7 +859,7 @@ static struct mp_ioapic_routing {
    int apic_id;
    int gsi_base;
    int gsi_end;
    - u32 pin_programmed[4];
    + DECLARE_BITMAP(pin_programmed, MP_MAX_IOAPIC_PIN + 1);
    } mp_ioapic_routing[MAX_IO_APICS];

    static int mp_find_ioapic (int gsi)
    @@ -1031,9 +1031,8 @@ void __init mp_config_acpi_legacy_irqs (

    int mp_register_gsi(u32 gsi, int triggering, int polarity)
    {
    - int ioapic = -1;
    - int ioapic_pin = 0;
    - int idx, bit = 0;
    + int ioapic;
    + int ioapic_pin;
    static int pci_irq = IRQ_COMPRESSION_START;
    /*
    * Mapping between Global System Interrupts, which
    @@ -1062,21 +1061,19 @@ int mp_register_gsi(u32 gsi, int trigger
    * with redundant pin->gsi mappings (but unique PCI devices);
    * we only program the IOAPIC on the first.
    */
    - bit = ioapic_pin % 32;
    - idx = (ioapic_pin < 32) ? 0 : (ioapic_pin / 32);
    - if (idx > 3) {
    + if (ioapic_pin > MP_MAX_IOAPIC_PIN) {
    printk(KERN_ERR "Invalid reference to IOAPIC pin "
    "%d-%d\n", mp_ioapic_routing[ioapic].apic_id,
    ioapic_pin);
    return gsi;
    }
    - if ((1<<bit) & mp_ioapic_routing[ioapic].pin_programmed[idx]) {
    + if (test_bit(ioapic_pin, mp_ioapic_routing[ioapic].pin_programmed)) {
    Dprintk(KERN_DEBUG "Pin %d-%d already programmed\n",
    mp_ioapic_routing[ioapic].apic_id, ioapic_pin);
    return (gsi < IRQ_COMPRESSION_START ? gsi : gsi_to_irq[gsi]);
    }

    - mp_ioapic_routing[ioapic].pin_programmed[idx] |= (1<<bit);
    + set_bit(ioapic_pin, mp_ioapic_routing[ioapic].pin_programmed);

    /*
    * For GSI >= 64, use IRQ compression
    --


    \
     
     \ /
      Last update: 2008-04-05 15:55    [W:0.027 / U:1.472 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site