lkml.org 
[lkml]   [2008]   [Apr]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    SubjectRe: [PATCH 1/3] x86: modify show_shared_cpu_map in intel_cacheinfo v3
    Bert Wesarg wrote:
    > On Tue, Apr 8, 2008 at 8:43 PM, Mike Travis <travis@sgi.com> wrote:
    >> --- linux-2.6.x86.sched.orig/arch/x86/kernel/cpu/intel_cacheinfo.c
    >> +++ linux-2.6.x86.sched/arch/x86/kernel/cpu/intel_cacheinfo.c
    >> @@ -591,20 +591,34 @@ static ssize_t show_size(struct _cpuid4_
    >> return sprintf (buf, "%luK\n", this_leaf->size / 1024);
    >> }
    >>
    >> -static ssize_t show_shared_cpu_map(struct _cpuid4_info *this_leaf, char *buf)
    >> +static ssize_t show_shared_cpu_map_func(struct _cpuid4_info *this_leaf,
    >> + int type, char *buf)
    > I don't know if this is more efficient or better or cleaner, but how
    > about to pass the function pointer (ie. cpulist_scnprintf or
    > cpumap_scnprintf)? You safe at least one condition.
    >
    >> + n = type?
    >> + cpulist_scnprintf(buf, len-2, *mask):
    >> + cpumask_scnprintf(buf, len-2, *mask);
    >
    > Thanks.
    > Bert

    I have to subvert the cpumask interface a bit, but the resultant
    code size is about 7 instructions smaller.

    static ssize_t show_shared_cpu_map_func(struct _cpuid4_info *this_leaf,
    int (*cpumap_func)(char *, int, const cpumask_t *, int),
    char *buf)
    {
    ptrdiff_t len = PTR_ALIGN(buf + PAGE_SIZE - 1, PAGE_SIZE) - buf;
    int n = 0;

    if (len > 1) {
    cpumask_t *mask = &this_leaf->shared_cpu_map;
    n = cpumap_func(buf, len-2, mask, NR_CPUS);
    buf[n++] = '\n';
    buf[n] = '\0';
    }
    return n;
    }

    static inline ssize_t show_shared_cpu_map(struct _cpuid4_info *leaf, char *buf)
    {
    return show_shared_cpu_map_func(leaf, &__cpumask_scnprintf, buf);
    }

    static inline ssize_t show_shared_cpu_list(struct _cpuid4_info *leaf, char *buf)
    {
    return show_shared_cpu_map_func(leaf, &__cpulist_scnprintf, buf);
    }

    Btw, you were asking about how to determine NR_CPUS. Here's one way:

    root@newton:~# cat /sys/devices/system/cpu/online
    0-2,4-7
    root@newton:~# cat /sys/devices/system/cpu/possible
    0-511
    root@newton:~# cat /sys/devices/system/cpu/present
    0-7
    root@newton:~# cat /sys/devices/system/cpu/system
    0-4095

    Thanks,
    Mike


    \
     
     \ /
      Last update: 2008-04-08 22:47    [W:4.154 / U:0.064 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site