diff options
| -rw-r--r-- | mm/kmemleak.c | 80 |
1 files changed, 59 insertions, 21 deletions
diff --git a/mm/kmemleak.c b/mm/kmemleak.c index d33e990e0668..5f2eb5b23658 100644 --- a/mm/kmemleak.c +++ b/mm/kmemleak.c | |||
| @@ -843,10 +843,19 @@ out: | |||
| 843 | rcu_read_unlock(); | 843 | rcu_read_unlock(); |
| 844 | } | 844 | } |
| 845 | 845 | ||
| 846 | /* | 846 | /** |
| 847 | * Memory allocation function callback. This function is called from the | 847 | * kmemleak_alloc - register a newly allocated object |
| 848 | * kernel allocators when a new block is allocated (kmem_cache_alloc, kmalloc, | 848 | * @ptr: pointer to beginning of the object |
| 849 | * vmalloc etc.). | 849 | * @size: size of the object |
| 850 | * @min_count: minimum number of references to this object. If during memory | ||
| 851 | * scanning a number of references less than @min_count is found, | ||
| 852 | * the object is reported as a memory leak. If @min_count is 0, | ||
| 853 | * the object is never reported as a leak. If @min_count is -1, | ||
| 854 | * the object is ignored (not scanned and not reported as a leak) | ||
| 855 | * @gfp: kmalloc() flags used for kmemleak internal memory allocations | ||
| 856 | * | ||
| 857 | * This function is called from the kernel allocators when a new object | ||
| 858 | * (memory block) is allocated (kmem_cache_alloc, kmalloc, vmalloc etc.). | ||
| 850 | */ | 859 | */ |
| 851 | void __ref kmemleak_alloc(const void *ptr, size_t size, int min_count, | 860 | void __ref kmemleak_alloc(const void *ptr, size_t size, int min_count, |
| 852 | gfp_t gfp) | 861 | gfp_t gfp) |
| @@ -860,9 +869,12 @@ void __ref kmemleak_alloc(const void *ptr, size_t size, int min_count, | |||
| 860 | } | 869 | } |
| 861 | EXPORT_SYMBOL_GPL(kmemleak_alloc); | 870 | EXPORT_SYMBOL_GPL(kmemleak_alloc); |
| 862 | 871 | ||
| 863 | /* | 872 | /** |
| 864 | * Memory freeing function callback. This function is called from the kernel | 873 | * kmemleak_free - unregister a previously registered object |
| 865 | * allocators when a block is freed (kmem_cache_free, kfree, vfree etc.). | 874 | * @ptr: pointer to beginning of the object |
| 875 | * | ||
| 876 | * This function is called from the kernel allocators when an object (memory | ||
| 877 | * block) is freed (kmem_cache_free, kfree, vfree etc.). | ||
| 866 | */ | 878 | */ |
| 867 | void __ref kmemleak_free(const void *ptr) | 879 | void __ref kmemleak_free(const void *ptr) |
| 868 | { | 880 | { |
| @@ -875,9 +887,14 @@ void __ref kmemleak_free(const void *ptr) | |||
| 875 | } | 887 | } |
| 876 | EXPORT_SYMBOL_GPL(kmemleak_free); | 888 | EXPORT_SYMBOL_GPL(kmemleak_free); |
| 877 | 889 | ||
| 878 | /* | 890 | /** |
| 879 | * Partial memory freeing function callback. This function is usually called | 891 | * kmemleak_free_part - partially unregister a previously registered object |
| 880 | * from bootmem allocator when (part of) a memory block is freed. | 892 | * @ptr: pointer to the beginning or inside the object. This also |
| 893 | * represents the start of the range to be freed | ||
| 894 | * @size: size to be unregistered | ||
| 895 | * | ||
| 896 | * This function is called when only a part of a memory block is freed | ||
| 897 | * (usually from the bootmem allocator). | ||
| 881 | */ | 898 | */ |
| 882 | void __ref kmemleak_free_part(const void *ptr, size_t size) | 899 | void __ref kmemleak_free_part(const void *ptr, size_t size) |
| 883 | { | 900 | { |
| @@ -890,9 +907,12 @@ void __ref kmemleak_free_part(const void *ptr, size_t size) | |||
| 890 | } | 907 | } |
| 891 | EXPORT_SYMBOL_GPL(kmemleak_free_part); | 908 | EXPORT_SYMBOL_GPL(kmemleak_free_part); |
| 892 | 909 | ||
| 893 | /* | 910 | /** |
| 894 | * Mark an already allocated memory block as a false positive. This will cause | 911 | * kmemleak_not_leak - mark an allocated object as false positive |
| 895 | * the block to no longer be reported as leak and always be scanned. | 912 | * @ptr: pointer to beginning of the object |
| 913 | * | ||
| 914 | * Calling this function on an object will cause the memory block to no longer | ||
| 915 | * be reported as leak and always be scanned. | ||
| 896 | */ | 916 | */ |
| 897 | void __ref kmemleak_not_leak(const void *ptr) | 917 | void __ref kmemleak_not_leak(const void *ptr) |
| 898 | { | 918 | { |
| @@ -905,10 +925,14 @@ void __ref kmemleak_not_leak(const void *ptr) | |||
| 905 | } | 925 | } |
| 906 | EXPORT_SYMBOL(kmemleak_not_leak); | 926 | EXPORT_SYMBOL(kmemleak_not_leak); |
| 907 | 927 | ||
| 908 | /* | 928 | /** |
| 909 | * Ignore a memory block. This is usually done when it is known that the | 929 | * kmemleak_ignore - ignore an allocated object |
| 910 | * corresponding block is not a leak and does not contain any references to | 930 | * @ptr: pointer to beginning of the object |
| 911 | * other allocated memory blocks. | 931 | * |
| 932 | * Calling this function on an object will cause the memory block to be | ||
| 933 | * ignored (not scanned and not reported as a leak). This is usually done when | ||
| 934 | * it is known that the corresponding block is not a leak and does not contain | ||
| 935 | * any references to other allocated memory blocks. | ||
| 912 | */ | 936 | */ |
| 913 | void __ref kmemleak_ignore(const void *ptr) | 937 | void __ref kmemleak_ignore(const void *ptr) |
| 914 | { | 938 | { |
| @@ -921,8 +945,16 @@ void __ref kmemleak_ignore(const void *ptr) | |||
| 921 | } | 945 | } |
| 922 | EXPORT_SYMBOL(kmemleak_ignore); | 946 | EXPORT_SYMBOL(kmemleak_ignore); |
| 923 | 947 | ||
| 924 | /* | 948 | /** |
| 925 | * Limit the range to be scanned in an allocated memory block. | 949 | * kmemleak_scan_area - limit the range to be scanned in an allocated object |
| 950 | * @ptr: pointer to beginning or inside the object. This also | ||
| 951 | * represents the start of the scan area | ||
| 952 | * @size: size of the scan area | ||
| 953 | * @gfp: kmalloc() flags used for kmemleak internal memory allocations | ||
| 954 | * | ||
| 955 | * This function is used when it is known that only certain parts of an object | ||
| 956 | * contain references to other objects. Kmemleak will only scan these areas | ||
| 957 | * reducing the number false negatives. | ||
| 926 | */ | 958 | */ |
| 927 | void __ref kmemleak_scan_area(const void *ptr, size_t size, gfp_t gfp) | 959 | void __ref kmemleak_scan_area(const void *ptr, size_t size, gfp_t gfp) |
| 928 | { | 960 | { |
| @@ -935,8 +967,14 @@ void __ref kmemleak_scan_area(const void *ptr, size_t size, gfp_t gfp) | |||
| 935 | } | 967 | } |
| 936 | EXPORT_SYMBOL(kmemleak_scan_area); | 968 | EXPORT_SYMBOL(kmemleak_scan_area); |
| 937 | 969 | ||
| 938 | /* | 970 | /** |
| 939 | * Inform kmemleak not to scan the given memory block. | 971 | * kmemleak_no_scan - do not scan an allocated object |
| 972 | * @ptr: pointer to beginning of the object | ||
| 973 | * | ||
| 974 | * This function notifies kmemleak not to scan the given memory block. Useful | ||
| 975 | * in situations where it is known that the given object does not contain any | ||
| 976 | * references to other objects. Kmemleak will not scan such objects reducing | ||
| 977 | * the number of false negatives. | ||
| 940 | */ | 978 | */ |
| 941 | void __ref kmemleak_no_scan(const void *ptr) | 979 | void __ref kmemleak_no_scan(const void *ptr) |
| 942 | { | 980 | { |
