From: Catalin Marinas <catalin.mari...@arm.com>

commit 04f70d13ca274d62a347815ca01fea871f9b9a40 upstream.

scan_block() updates the number of references (pointers) to objects,
adding them to the gray_list when object->min_count is reached.  The
patch factors out this functionality into a separate update_refs()
function.

Link: 
http://lkml.kernel.org/r/1495726937-23557-3-git-send-email-catalin.mari...@arm.com
Signed-off-by: Catalin Marinas <catalin.mari...@arm.com>
Cc: Michal Hocko <mho...@kernel.org>
Cc: Andy Lutomirski <l...@amacapital.net>
Cc: "Luis R. Rodriguez" <mcg...@kernel.org>
Signed-off-by: Andrew Morton <a...@linux-foundation.org>
Signed-off-by: Linus Torvalds <torva...@linux-foundation.org>
Signed-off-by: Liwei Song <liwei.s...@windriver.com>
---
 mm/kmemleak.c | 43 +++++++++++++++++++++++++------------------
 1 file changed, 25 insertions(+), 18 deletions(-)

diff --git a/mm/kmemleak.c b/mm/kmemleak.c
index 964b12eba2c1..266482f460c2 100644
--- a/mm/kmemleak.c
+++ b/mm/kmemleak.c
@@ -1188,6 +1188,30 @@ static bool update_checksum(struct kmemleak_object 
*object)
 }
 
 /*
+ * Update an object's references. object->lock must be held by the caller.
+ */
+static void update_refs(struct kmemleak_object *object)
+{
+       if (!color_white(object)) {
+               /* non-orphan, ignored or new */
+               return;
+       }
+
+       /*
+        * Increase the object's reference count (number of pointers to the
+        * memory block). If this count reaches the required minimum, the
+        * object's color will become gray and it will be added to the
+        * gray_list.
+        */
+       object->count++;
+       if (color_gray(object)) {
+               /* put_object() called when removing from gray_list */
+               WARN_ON(!get_object(object));
+               list_add_tail(&object->gray_list, &gray_list);
+       }
+}
+
+/*
  * Memory scanning is a long process and it needs to be interruptable. This
  * function checks whether such interrupt condition occurred.
  */
@@ -1259,24 +1283,7 @@ static void scan_block(void *_start, void *_end,
                 * enclosed by scan_mutex.
                 */
                spin_lock_nested(&object->lock, SINGLE_DEPTH_NESTING);
-               if (!color_white(object)) {
-                       /* non-orphan, ignored or new */
-                       spin_unlock(&object->lock);
-                       continue;
-               }
-
-               /*
-                * Increase the object's reference count (number of pointers
-                * to the memory block). If this count reaches the required
-                * minimum, the object's color will become gray and it will be
-                * added to the gray_list.
-                */
-               object->count++;
-               if (color_gray(object)) {
-                       /* put_object() called when removing from gray_list */
-                       WARN_ON(!get_object(object));
-                       list_add_tail(&object->gray_list, &gray_list);
-               }
+               update_refs(object);
                spin_unlock(&object->lock);
        }
        read_unlock_irqrestore(&kmemleak_lock, flags);
-- 
2.7.4

-- 
_______________________________________________
linux-yocto mailing list
linux-yocto@yoctoproject.org
https://lists.yoctoproject.org/listinfo/linux-yocto

Reply via email to