lkml.org 
[lkml]   [2009]   [Jun]   [11]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 2/4] irq/cpumask: make memoryless node zero happy
    From: Yinghai Lu <yinghai@kernel.org>

    Don't hardcode to node zero for early boot IRQ setup memory allocations.

    [ penberg@cs.helsinki.fi: minor cleanups ]
    Cc: Ingo Molnar <mingo@elte.hu>
    Cc: Johannes Weiner <hannes@cmpxchg.org>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Signed-off-by: Yinghai Lu <yinghai@kernel.org>
    Signed-off-by: Pekka Enberg <penberg@cs.helsinki.fi>
    ---
    arch/x86/kernel/apic/io_apic.c | 6 ++++--
    kernel/irq/handle.c | 9 +++++----
    2 files changed, 9 insertions(+), 6 deletions(-)

    diff --git a/arch/x86/kernel/apic/io_apic.c b/arch/x86/kernel/apic/io_apic.c
    index 139201a..94605e7 100644
    --- a/arch/x86/kernel/apic/io_apic.c
    +++ b/arch/x86/kernel/apic/io_apic.c
    @@ -177,16 +177,18 @@ int __init arch_early_irq_init(void)
    struct irq_cfg *cfg;
    struct irq_desc *desc;
    int count;
    + int node;
    int i;

    cfg = irq_cfgx;
    count = ARRAY_SIZE(irq_cfgx);
    + node= cpu_to_node(boot_cpu_id);

    for (i = 0; i < count; i++) {
    desc = irq_to_desc(i);
    desc->chip_data = &cfg[i];
    - alloc_cpumask_var(&cfg[i].domain, GFP_NOWAIT);
    - alloc_cpumask_var(&cfg[i].old_domain, GFP_NOWAIT);
    + alloc_cpumask_var_node(&cfg[i].domain, GFP_NOWAIT, node);
    + alloc_cpumask_var_node(&cfg[i].old_domain, GFP_NOWAIT, node);
    if (i < NR_IRQS_LEGACY)
    cpumask_setall(cfg[i].domain);
    }
    diff --git a/kernel/irq/handle.c b/kernel/irq/handle.c
    index a600184..e161999 100644
    --- a/kernel/irq/handle.c
    +++ b/kernel/irq/handle.c
    @@ -150,6 +150,7 @@ int __init early_irq_init(void)
    {
    struct irq_desc *desc;
    int legacy_count;
    + int node;
    int i;

    init_irq_default_affinity();
    @@ -160,20 +161,20 @@ int __init early_irq_init(void)

    desc = irq_desc_legacy;
    legacy_count = ARRAY_SIZE(irq_desc_legacy);
    + node = first_online_node;

    /* allocate irq_desc_ptrs array based on nr_irqs */
    irq_desc_ptrs = alloc_bootmem(nr_irqs * sizeof(void *));

    /* allocate based on nr_cpu_ids */
    - /* FIXME: invert kstat_irgs, and it'd be a per_cpu_alloc'd thing */
    - kstat_irqs_legacy = alloc_bootmem(NR_IRQS_LEGACY * nr_cpu_ids *
    - sizeof(int));
    + kstat_irqs_legacy = kzalloc_node(NR_IRQS_LEGACY * nr_cpu_ids *
    + sizeof(int), GFP_NOWAIT, node);

    for (i = 0; i < legacy_count; i++) {
    desc[i].irq = i;
    desc[i].kstat_irqs = kstat_irqs_legacy + i * nr_cpu_ids;
    lockdep_set_class(&desc[i].lock, &irq_desc_lock_class);
    - alloc_desc_masks(&desc[i], 0, true);
    + alloc_desc_masks(&desc[i], node, true);
    init_desc_masks(&desc[i]);
    irq_desc_ptrs[i] = desc + i;
    }
    --
    1.6.0.4


    \
     
     \ /
      Last update: 2009-06-11 07:23    [W:0.023 / U:59.492 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site