21 Feb, 2007

1 commit

  • We frequently need the maximum number of possible processors in order to
    allocate arrays for all processors. So far this was done using
    highest_possible_processor_id(). However, we do need the number of
    processors not the highest id. Moreover the number was so far dynamically
    calculated on each invokation. The number of possible processors does not
    change when the system is running. We can therefore calculate that number
    once.

    Signed-off-by: Christoph Lameter
    Cc: Frederik Deweerdt
    Cc: Neil Brown
    Cc: Trond Myklebust
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Christoph Lameter
     

12 Oct, 2006

1 commit

  • lib/bitmap.c:bitmap_parse() is a library function that received as input a
    user buffer. This seemed to have originated from the way the write_proc
    function of the /proc filesystem operates.

    This has been reworked to not use kmalloc and eliminates a lot of
    get_user() overhead by performing one access_ok before using __get_user().

    We need to test if we are in kernel or user space (is_user) and access the
    buffer differently. We cannot use __get_user() to access kernel addresses
    in all cases, for example in architectures with separate address space for
    kernel and user.

    This function will be useful for other uses as well; for example, taking
    input for /sysfs instead of /proc, so it was changed to accept kernel
    buffers. We have this use for the Linux UWB project, as part as the
    upcoming bandwidth allocator code.

    Only a few routines used this function and they were changed too.

    Signed-off-by: Reinette Chatre
    Signed-off-by: Inaky Perez-Gonzalez
    Cc: Paul Jackson
    Cc: Joe Korty
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Reinette Chatre
     

26 Jun, 2006

2 commits

  • On UP, this:

    cpumask_t mask = node_to_cpumask(numa_node_id());

    for_each_cpu_mask(cpu, mask)

    does this:

    mm/readahead.c: In function `node_readahead_aging':
    mm/readahead.c:850: warning: unused variable `mask'

    which is unpleasantly fixed by this:

    Acked-by: Paul Jackson
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andrew Morton
     
  • Convert a few stragglers over to for_each_possible_cpu(), remove
    for_each_cpu().

    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andrew Morton
     

29 Mar, 2006

1 commit

  • for_each_cpu() is a for-loop over cpu_possible_map. for_each_online_cpu is
    for-loop cpu over cpu_online_map. .....for_each_cpu() is not sufficiently
    explicit and can lead to mistakes.

    This patch adds for_each_possible_cpu() in preparation for the removal of
    for_each_cpu().

    Signed-off-by: KAMEZAWA Hiroyuki
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    KAMEZAWA Hiroyuki
     

26 Mar, 2006

4 commits

  • text data bss dec hex filename
    before: 3605597 1363528 363328 5332453 515de5 vmlinux
    after: 3605295 1363612 363200 5332107 515c8b vmlinux

    218 bytes saved.

    Also, optimise any_online_cpu() out of existence on CONFIG_SMP=n.

    This function seems inefficient. Can't we simply AND the two masks, then use
    find_first_bit()?

    Cc: Paul Jackson
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andrew Morton
     
  • Shrinks the only caller (net/bridge/netfilter/ebtables.c) by 174 bytes.

    Also, optimise highest_possible_processor_id() out of existence on
    CONFIG_SMP=n.

    Cc: Paul Jackson
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andrew Morton
     
  • text data bss dec hex filename
    before: 3488027 1322496 360128 5170651 4ee5db vmlinux
    after: 3485112 1322480 359968 5167560 4ed9c8 vmlinux

    2931 bytes saved

    Cc: Paul Jackson
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andrew Morton
     
  • text data bss dec hex filename
    before: 3490577 1322408 360000 5172985 4eeef9 vmlinux
    after: 3488027 1322496 360128 5170651 4ee5db vmlinux

    Cc: Paul Jackson
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andrew Morton
     

11 Feb, 2006

1 commit

  • Initialising cpu_possible_map to all-ones with CONFIG_HOTPLUG_CPU means that

    a) All for_each_cpu() loops will iterate across all NR_CPUS CPUs, rather
    than over possible ones. That can be quite expensive.

    b) Soon we'll be allocating per-cpu areas only for possible CPUs. So with
    CPU_MASK_ALL, we'll be wasting memory.

    I also switched voyager over to not use CPU_MASK_ALL in the non-CPU-hotplug
    case. Should be OK..

    I note that parisc is also using CPU_MASK_ALL. Suggest that it stop doing
    that.

    Cc: James Bottomley
    Cc: Kyle McMartin
    Cc: Paul Jackson
    Cc: Ashok Raj
    Cc: Zwane Mwaikambo
    Cc: Paul Jackson
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Andrew Morton
     

08 Feb, 2006

1 commit


31 Oct, 2005

1 commit

  • In the forthcoming task migration support, a key calculation will be
    mapping cpu and node numbers from the old set to the new set while
    preserving cpuset-relative offset.

    For example, if a task and its pages on nodes 8-11 are being migrated to
    nodes 24-27, then pages on node 9 (the 2nd node in the old set) should be
    moved to node 25 (the 2nd node in the new set.)

    As with other bitmap operations, the proper way to code this is to provide
    the underlying calculation in lib/bitmap.c, and then to provide the usual
    cpumask and nodemask wrappers.

    This patch provides that. These operations are termed 'remap' operations.
    Both remapping a single bit and a set of bits is supported.

    Signed-off-by: Paul Jackson
    Signed-off-by: Andrew Morton
    Signed-off-by: Linus Torvalds

    Paul Jackson
     

16 Oct, 2005

1 commit

  • ... otherwise, things like alpha and sparc64 break and break
    badly. They define cpu_possible_map to something else in smp.h
    *AFTER* having included cpumask.h.

    If that puppy is a macro, expansion will happen at the actual
    caller, when we'd already seen #define cpu_possible_map ... and we will
    get the right thing used.

    As an inline helper it will be tokenized before we get to that
    define and that's it; no matter what we define later, it won't affect
    anything. We get modules with dependency on cpu_possible_map instead
    of the right symbol (phys_cpu_present_map in case of sparc64), or outright
    link errors if they are built-in.

    Signed-off-by: Al Viro
    Signed-off-by: David S. Miller

    Al Viro
     

14 Oct, 2005

1 commit

  • Original patch by Harald Welte, with feedback from Herbert Xu
    and testing by Sébastien Bernard.

    EBTABLES, ARP tables, and IP/IP6 tables all assume that cpus
    are numbered linearly. That is not necessarily true.

    This patch fixes that up by calculating the largest possible
    cpu number, and allocating enough per-cpu structure space given
    that.

    Signed-off-by: David S. Miller

    David S. Miller
     

17 Apr, 2005

1 commit

  • Initial git repository build. I'm not bothering with the full history,
    even though we have it. We can create a separate "historical" git
    archive of that later if we want to, and in the meantime it's about
    3.2GB when imported into git - space that would just make the early
    git days unnecessarily complicated, when we don't have a lot of good
    infrastructure for it.

    Let it rip!

    Linus Torvalds