Skip to content

Commit

Permalink
kmemleak: When the early log buffer is exceeded, report the actual nu…
Browse files Browse the repository at this point in the history
…mber

Just telling that the early log buffer has been exceeded doesn't mean
much. This patch moves the error printing to the kmemleak_init()
function and displays the actual calls to the kmemleak API during early
logging.

Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
  • Loading branch information
Catalin Marinas committed Dec 2, 2011
1 parent 5f79020 commit b669300
Showing 1 changed file with 15 additions and 6 deletions.
21 changes: 15 additions & 6 deletions mm/kmemleak.c
Original file line number Diff line number Diff line change
Expand Up @@ -797,9 +797,13 @@ static void __init log_early(int op_type, const void *ptr, size_t size,
unsigned long flags;
struct early_log *log;

if (atomic_read(&kmemleak_error)) {
/* kmemleak stopped recording, just count the requests */
crt_early_log++;
return;
}

if (crt_early_log >= ARRAY_SIZE(early_log)) {
pr_warning("Early log buffer exceeded, "
"please increase DEBUG_KMEMLEAK_EARLY_LOG_SIZE\n");
kmemleak_disable();
return;
}
Expand Down Expand Up @@ -1634,7 +1638,6 @@ static void kmemleak_disable(void)
return;

/* stop any memory operation tracing */
atomic_set(&kmemleak_early_log, 0);
atomic_set(&kmemleak_enabled, 0);

/* check whether it is too early for a kernel thread */
Expand Down Expand Up @@ -1694,12 +1697,18 @@ void __init kmemleak_init(void)
scan_area_cache = KMEM_CACHE(kmemleak_scan_area, SLAB_NOLEAKTRACE);
INIT_PRIO_TREE_ROOT(&object_tree_root);

if (crt_early_log >= ARRAY_SIZE(early_log))
pr_warning("Early log buffer exceeded (%d), please increase "
"DEBUG_KMEMLEAK_EARLY_LOG_SIZE\n", crt_early_log);

/* the kernel is still in UP mode, so disabling the IRQs is enough */
local_irq_save(flags);
if (!atomic_read(&kmemleak_error)) {
atomic_set(&kmemleak_early_log, 0);
if (atomic_read(&kmemleak_error)) {
local_irq_restore(flags);
return;
} else
atomic_set(&kmemleak_enabled, 1);
atomic_set(&kmemleak_early_log, 0);
}
local_irq_restore(flags);

/*
Expand Down

0 comments on commit b669300

Please sign in to comment.