27 May, 2005

1 commit

  • There is a race in the kernel cpuset code, between the code
    to handle notify_on_release, and the code to remove a cpuset.
    The notify_on_release code can end up trying to access a
    cpuset that has been removed. In the most common case, this
    causes a NULL pointer dereference from the routine cpuset_path.
    However all manner of bad things are possible, in theory at least.

    The existing code decrements the cpuset use count, and if the
    count goes to zero, processes the notify_on_release request,
    if appropriate. However, once the count goes to zero, unless we
    are holding the global cpuset_sem semaphore, there is nothing to
    stop another task from immediately removing the cpuset entirely,
    and recycling its memory.

    The obvious fix would be to always hold the cpuset_sem
    semaphore while decrementing the use count and dealing with
    notify_on_release. However we don't want to force a global
    semaphore into the mainline task exit path, as that might create
    a scaling problem.

    The actual fix is almost as easy - since this is only an issue
    for cpusets using notify_on_release, which the top level big
    cpusets don't normally need to use, only take the cpuset_sem
    for cpusets using notify_on_release.

    This code has been run for hours without a hiccup, while running
    a cpuset create/destroy stress test that could crash the existing
    kernel in seconds. This patch applies to the current -linus
    git kernel.

    Signed-off-by: Paul Jackson
    Acked-by: Simon Derr
    Acked-by: Dinakar Guniguntala
    Signed-off-by: Linus Torvalds

    Paul Jackson
     

17 Apr, 2005

2 commits

  • gcc-4 warns with
    include/linux/cpuset.h:21: warning: type qualifiers ignored on function
    return type

    cpuset_cpus_allowed is declared with const
    extern const cpumask_t cpuset_cpus_allowed(const struct task_struct *p);

    First const should be __attribute__((const)), but the gcc manual
    explains that:

    "Note that a function that has pointer arguments and examines the data
    pointed to must not be declared const. Likewise, a function that calls a
    non-const function usually must not be const. It does not make sense for
    a const function to return void."

    The following patch remove const from the function declaration.

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

    Benoit Boissinot
     
  • 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