lkml.org 
[lkml]   [2012]   [Feb]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    SubjectRe: [PATCH] lib/cpumask.c: Optimize __any_online_cpu() calculation
    On 02/15/2012 06:27 PM, Eric Dumazet wrote:

    > Le mercredi 15 février 2012 à 18:05 +0530, Srivatsa S. Bhat a écrit :
    >> __any_online_cpu() uses a for loop at the moment.
    >> Instead, use cpumask_* operations to speed it up.
    >>
    >> Signed-off-by: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
    >> ---
    >> Actually, the patch posted at https://lkml.org/lkml/2012/2/15/101 removed
    >> the last user of any_online_cpu() (and hence __any_online_cpu()).
    >> However, since this is an exported symbol, I refrained from removing this
    >> function altogether.
    >
    > Just remove the export/function and eventually leave the helper ?
    >
    > #define any_online_cpu(mask) cpumask_any_and(mask, cpu_online_mask)
    >


    That sounds good. Here is v2 of the patch.
    (Since this v2 touches include/linux/cpumask.h, I rebased it on top of the
    patch posted at: https://lkml.org/lkml/2012/2/15/2. Even without that
    patch it should apply with minor line number changes..)

    ---
    From: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
    Subject: [PATCH v2] lib/cpumask.c: Remove __any_online_cpu()

    __any_online_cpu() is not optimal and also unnecessary.
    So, replace its use by faster cpumask_* operations.

    Signed-off-by: Srivatsa S. Bhat <srivatsa.bhat@linux.vnet.ibm.com>
    ---

    include/linux/cpumask.h | 3 +--
    lib/cpumask.c | 12 ------------
    2 files changed, 1 insertions(+), 14 deletions(-)

    diff --git a/include/linux/cpumask.h b/include/linux/cpumask.h
    index 42fec19..d3ccd2d 100644
    --- a/include/linux/cpumask.h
    +++ b/include/linux/cpumask.h
    @@ -808,11 +808,10 @@ static inline const struct cpumask *get_cpu_mask(unsigned int cpu)
    #else /* NR_CPUS > 1 */
    int __first_cpu(const cpumask_t *srcp);
    int __next_cpu(int n, const cpumask_t *srcp);
    -int __any_online_cpu(const cpumask_t *mask);

    #define first_cpu(src) __first_cpu(&(src))
    #define next_cpu(n, src) __next_cpu((n), &(src))
    -#define any_online_cpu(mask) __any_online_cpu(&(mask))
    +#define any_online_cpu(mask) cpumask_any_and(&mask, cpu_online_mask)
    #define for_each_cpu_mask(cpu, mask) \
    for ((cpu) = -1; \
    (cpu) = next_cpu((cpu), (mask)), \
    diff --git a/lib/cpumask.c b/lib/cpumask.c
    index af3e5817..0470742 100644
    --- a/lib/cpumask.c
    +++ b/lib/cpumask.c
    @@ -26,18 +26,6 @@ int __next_cpu_nr(int n, const cpumask_t *srcp)
    EXPORT_SYMBOL(__next_cpu_nr);
    #endif

    -int __any_online_cpu(const cpumask_t *mask)
    -{
    - int cpu;
    -
    - for_each_cpu(cpu, mask) {
    - if (cpu_online(cpu))
    - break;
    - }
    - return cpu;
    -}
    -EXPORT_SYMBOL(__any_online_cpu);
    -
    /**
    * cpumask_next_and - get the next cpu in *src1p & *src2p
    * @n: the cpu prior to the place to search (ie. return will be > @n)

    --
    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: 2012-02-15 15:21    [W:0.028 / U:0.192 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site