| From: Pavel Tikhomirov <ptikhomirov@virtuozzo.com> |
| Subject: kmemleak-enable-tracking-for-percpu-pointers-v2 |
| Date: Wed, 31 Jul 2024 10:54:09 +0800 |
| |
| rename confusing scan_pointer to pointer_update_refs and move it just |
| after update_refs |
| |
| Link: https://lkml.kernel.org/r/20240731025526.157529-2-ptikhomirov@virtuozzo.com |
| Signed-off-by: Pavel Tikhomirov <ptikhomirov@virtuozzo.com> |
| Reviewed-by: Catalin Marinas <catalin.marinas@arm.com> |
| Cc: Wei Yongjun <weiyongjun1@huawei.com> |
| Cc: Chen Jun <chenjun102@huawei.com> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| --- |
| |
| mm/kmemleak.c | 48 ++++++++++++++++++++++++------------------------ |
| 1 file changed, 24 insertions(+), 24 deletions(-) |
| |
| --- a/mm/kmemleak.c~kmemleak-enable-tracking-for-percpu-pointers-v2 |
| +++ a/mm/kmemleak.c |
| @@ -1362,28 +1362,7 @@ static void update_refs(struct kmemleak_ |
| } |
| } |
| |
| -/* |
| - * Memory scanning is a long process and it needs to be interruptible. This |
| - * function checks whether such interrupt condition occurred. |
| - */ |
| -static int scan_should_stop(void) |
| -{ |
| - if (!kmemleak_enabled) |
| - return 1; |
| - |
| - /* |
| - * This function may be called from either process or kthread context, |
| - * hence the need to check for both stop conditions. |
| - */ |
| - if (current->mm) |
| - return signal_pending(current); |
| - else |
| - return kthread_should_stop(); |
| - |
| - return 0; |
| -} |
| - |
| -static void scan_pointer(struct kmemleak_object *scanned, |
| +static void pointer_update_refs(struct kmemleak_object *scanned, |
| unsigned long pointer, unsigned int objflags) |
| { |
| struct kmemleak_object *object; |
| @@ -1442,6 +1421,27 @@ static void scan_pointer(struct kmemleak |
| } |
| |
| /* |
| + * Memory scanning is a long process and it needs to be interruptible. This |
| + * function checks whether such interrupt condition occurred. |
| + */ |
| +static int scan_should_stop(void) |
| +{ |
| + if (!kmemleak_enabled) |
| + return 1; |
| + |
| + /* |
| + * This function may be called from either process or kthread context, |
| + * hence the need to check for both stop conditions. |
| + */ |
| + if (current->mm) |
| + return signal_pending(current); |
| + else |
| + return kthread_should_stop(); |
| + |
| + return 0; |
| +} |
| + |
| +/* |
| * Scan a memory block (exclusive range) for valid pointers and add those |
| * found to the gray list. |
| */ |
| @@ -1464,8 +1464,8 @@ static void scan_block(void *_start, voi |
| pointer = *(unsigned long *)kasan_reset_tag((void *)ptr); |
| kasan_enable_current(); |
| |
| - scan_pointer(scanned, pointer, 0); |
| - scan_pointer(scanned, pointer, OBJECT_PERCPU); |
| + pointer_update_refs(scanned, pointer, 0); |
| + pointer_update_refs(scanned, pointer, OBJECT_PERCPU); |
| } |
| raw_spin_unlock_irqrestore(&kmemleak_lock, flags); |
| } |
| _ |