lkml.org 
[lkml]   [2006]   [Jun]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    Subject[RFC -mm] more cpu_relax() places?
    Hi all,

    while reviewing 2.6.17-rc6-mm1, I found some places that might
    want to make use of cpu_relax() in order to not block secondary
    pipelines while busy-polling (probably especially useful on SMT CPUs):

    arch/i386/kernel/smp.c/flush_tlb_others():

    while (!cpus_empty(flush_cpumask))
    /* nothing. lockup detection does not belong here */
    mb();

    should probably be made

    while (!cpus_empty(flush_cpumask)) {
    cpu_relax();
    /* nothing. lockup detection does not belong here */
    mb();
    }

    (to have memory barrier directly before flush_cpumask is read).


    Second,
    include/asm-i386/apic.h/apic_wait_icr_idle() does use cpu_relax(),
    but the version in asm-x86_64/ NOT!
    Is this because there's not much use doing cpu_relax() on SMP non-SMT
    machines, and x86_64 are always non-SMT? Or rather because someone
    screwed up?


    And what about include/asm-i386/acpi.h/__acpi_acquire/release_global_lock()?

    static inline int
    __acpi_acquire_global_lock (unsigned int *lock)
    {
    unsigned int old, new, val;
    do {
    old = *lock;
    new = (((old & ~0x3) + 2) + ((old >> 1) & 0x1));
    val = cmpxchg(lock, old, new);
    } while (unlikely (val != old));
    return (new < 3) ? -1 : 0;
    }

    could probably be made

    static inline int
    __acpi_acquire_global_lock (unsigned int *lock)
    {
    unsigned int old, new, val;
    while (1) {
    old = *lock;
    new = (((old & ~0x3) + 2) + ((old >> 1) & 0x1));
    val = cmpxchg(lock, old, new);
    if (likely(val == old))
    break;
    cpu_relax();
    }
    return (new < 3) ? -1 : 0;
    }

    Andreas Mohr
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2006-06-12 20:40    [W:0.020 / U:220.804 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site