lkml.org 
[lkml]   [2009]   [Jul]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Subject[PATCH 8/8] kmemleak: Always scan the task stacks
    From
    Date
    This patch removes the stack scanning on/off run-time configuration. The
    thread stacks are now automatically scanned as any other allocated
    object (and avoid many false positives).

    Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
    ---
    Documentation/kmemleak.txt | 11 +++++------
    mm/kmemleak.c | 22 ----------------------
    2 files changed, 5 insertions(+), 28 deletions(-)

    diff --git a/Documentation/kmemleak.txt b/Documentation/kmemleak.txt
    index c223785..fa93249 100644
    --- a/Documentation/kmemleak.txt
    +++ b/Documentation/kmemleak.txt
    @@ -35,8 +35,6 @@ Memory scanning parameters can be modified at run-time by writing to the
    /sys/kernel/debug/kmemleak file. The following parameters are supported:

    off - disable kmemleak (irreversible)
    - stack=on - enable the task stacks scanning (default)
    - stack=off - disable the tasks stacks scanning
    scan=on - start the automatic memory scanning thread (default)
    scan=off - stop the automatic memory scanning thread
    scan=<secs> - set the automatic memory scanning period in seconds
    @@ -111,7 +109,8 @@ reported by kmemleak because values found during the memory scanning
    point to such objects. To reduce the number of false negatives, kmemleak
    provides the kmemleak_ignore, kmemleak_scan_area, kmemleak_no_scan and
    kmemleak_erase functions (see above). The task stacks also increase the
    -amount of false negatives and their scanning is not enabled by default.
    +amount of false negatives (enabling CONFIG_DEBUG_STACK_USAGE would help
    +by zeroing newly allocated stacks).

    The false positives are objects wrongly reported as being memory leaks
    (orphan). For objects known not to be leaks, kmemleak provides the
    @@ -120,9 +119,9 @@ the memory block is known not to contain other pointers and it will no
    longer be scanned.

    Some of the reported leaks are only transient, especially on SMP
    -systems, because of pointers temporarily stored in CPU registers or
    -stacks. Kmemleak defines MSECS_MIN_AGE (defaulting to 1000) representing
    -the minimum age of an object to be reported as a memory leak.
    +systems, because of pointers temporarily stored in CPU registers.
    +Kmemleak defines MSECS_MIN_AGE (defaulting to 5000) representing the
    +minimum age of an object to be reported as a memory leak.

    Limitations and Drawbacks
    -------------------------
    diff --git a/mm/kmemleak.c b/mm/kmemleak.c
    index 983f3f6..752a276 100644
    --- a/mm/kmemleak.c
    +++ b/mm/kmemleak.c
    @@ -203,8 +203,6 @@ static unsigned long jiffies_min_age;
    static unsigned long jiffies_last_scan;
    /* delay between automatic memory scannings */
    static signed long jiffies_scan_wait;
    -/* enables or disables the task stacks scanning */
    -static int kmemleak_stack_scan = 1;
    /* protects the memory scanning, parameters and debug/kmemleak file access */
    static DEFINE_MUTEX(scan_mutex);

    @@ -1064,7 +1062,6 @@ static void kmemleak_scan(void)
    {
    unsigned long flags;
    struct kmemleak_object *object, *tmp;
    - struct task_struct *task;
    int i;
    int new_leaks = 0;
    int gray_list_pass = 0;
    @@ -1131,19 +1128,6 @@ static void kmemleak_scan(void)
    }

    /*
    - * Scanning the task stacks may introduce false negatives and it is
    - * not enabled by default.
    - */
    - if (kmemleak_stack_scan) {
    - read_lock(&tasklist_lock);
    - for_each_process(task)
    - scan_block(task_stack_page(task),
    - task_stack_page(task) + THREAD_SIZE,
    - NULL, 0);
    - read_unlock(&tasklist_lock);
    - }
    -
    - /*
    * Scan the objects already referenced from the sections scanned
    * above. More objects will be referenced and, if there are no memory
    * leaks, all the objects will be scanned. The list traversal is safe
    @@ -1413,8 +1397,6 @@ static int dump_str_object_info(const char *str)
    * File write operation to configure kmemleak at run-time. The following
    * commands can be written to the /sys/kernel/debug/kmemleak file:
    * off - disable kmemleak (irreversible)
    - * stack=on - enable the task stacks scanning
    - * stack=off - disable the tasks stacks scanning
    * scan=on - start the automatic memory scanning thread
    * scan=off - stop the automatic memory scanning thread
    * scan=... - set the automatic memory scanning period in seconds (0 to
    @@ -1440,10 +1422,6 @@ static ssize_t kmemleak_write(struct file *file, const char __user *user_buf,

    if (strncmp(buf, "off", 3) == 0)
    kmemleak_disable();
    - else if (strncmp(buf, "stack=on", 8) == 0)
    - kmemleak_stack_scan = 1;
    - else if (strncmp(buf, "stack=off", 9) == 0)
    - kmemleak_stack_scan = 0;
    else if (strncmp(buf, "scan=on", 7) == 0)
    start_scan_thread();
    else if (strncmp(buf, "scan=off", 8) == 0)


    \
     
     \ /
      Last update: 2009-07-24 18:15    [W:0.038 / U:31.464 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site