All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <519224DF.3070807@gmail.com>

diff --git a/a/2.txt b/N1/2.txt
index 8b13789..9d5080e 100644
--- a/a/2.txt
+++ b/N1/2.txt
@@ -1 +1,63 @@
+>From a76e17c129d2f779f1588aa7ae319b76854068eb Mon Sep 17 00:00:00 2001
+From: Jianpeng Ma <majianpeng@gmail.com>
+Date: Tue, 14 May 2013 19:32:06 +0800
+Subject: [PATCH 3/3] mm/kmemleak.c: Merge the consecutive scan-areas.
 
+If the scan-areas are adjacent,it can merge in order to reduce memomy.
+And using pr_warn instead of pr_warning.
+
+Signed-off-by: Jianpeng Ma <majianpeng@gmail.com>
+---
+ mm/kmemleak.c | 26 +++++++++++++++++++-------
+ 1 file changed, 19 insertions(+), 7 deletions(-)
+
+diff --git a/mm/kmemleak.c b/mm/kmemleak.c
+index f0ece93..9590a57 100644
+--- a/mm/kmemleak.c
++++ b/mm/kmemleak.c
+@@ -746,24 +746,36 @@ static void add_scan_area(unsigned long ptr, size_t size, gfp_t gfp)
+ 		return;
+ 	}
+ 
+-	area = kmem_cache_alloc(scan_area_cache, gfp_kmemleak_mask(gfp));
+-	if (!area) {
+-		pr_warning("Cannot allocate a scan area\n");
+-		goto out;
+-	}
+-
+ 	spin_lock_irqsave(&object->lock, flags);
+ 	if (ptr + size > object->pointer + object->size) {
+ 		kmemleak_warn("Scan area larger than object 0x%08lx\n", ptr);
+ 		dump_object_info(object);
+-		kmem_cache_free(scan_area_cache, area);
+ 		goto out_unlock;
+ 	}
++	hlist_for_each_entry(area, &object->area_list, node) {
++		if (ptr + size == area->start) {
++			area->start = ptr;
++			area->size += size;
++			goto out_unlock;
++		} else if (ptr == area->start + area->size) {
++			area->size += size;
++			goto out_unlock;
++		}
++
++	}
++	spin_unlock_irqrestore(&object->lock, flags);
++
++	area = kmem_cache_alloc(scan_area_cache, gfp_kmemleak_mask(gfp));
++	if (!area) {
++		pr_warn("Cannot allocate a scan area\n");
++		goto out;
++	}
+ 
+ 	INIT_HLIST_NODE(&area->node);
+ 	area->start = ptr;
+ 	area->size = size;
+ 
++	spin_lock_irqsave(&object->lock, flags);
+ 	hlist_add_head(&area->node, &object->area_list);
+ out_unlock:
+ 	spin_unlock_irqrestore(&object->lock, flags);
+-- 
+1.8.3.rc1.44.gb387c77
diff --git a/a/content_digest b/N1/content_digest
index f0191a9..7b915ea 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -67,5 +67,68 @@
  "\01:2\0"
  "fn\00003-mm-kmemleak.c-Merge-the-consecutive-scan-areas.patch\0"
  "b\0"
+ ">From a76e17c129d2f779f1588aa7ae319b76854068eb Mon Sep 17 00:00:00 2001\n"
+ "From: Jianpeng Ma <majianpeng@gmail.com>\n"
+ "Date: Tue, 14 May 2013 19:32:06 +0800\n"
+ "Subject: [PATCH 3/3] mm/kmemleak.c: Merge the consecutive scan-areas.\n"
+ "\n"
+ "If the scan-areas are adjacent,it can merge in order to reduce memomy.\n"
+ "And using pr_warn instead of pr_warning.\n"
+ "\n"
+ "Signed-off-by: Jianpeng Ma <majianpeng@gmail.com>\n"
+ "---\n"
+ " mm/kmemleak.c | 26 +++++++++++++++++++-------\n"
+ " 1 file changed, 19 insertions(+), 7 deletions(-)\n"
+ "\n"
+ "diff --git a/mm/kmemleak.c b/mm/kmemleak.c\n"
+ "index f0ece93..9590a57 100644\n"
+ "--- a/mm/kmemleak.c\n"
+ "+++ b/mm/kmemleak.c\n"
+ "@@ -746,24 +746,36 @@ static void add_scan_area(unsigned long ptr, size_t size, gfp_t gfp)\n"
+ " \t\treturn;\n"
+ " \t}\n"
+ " \n"
+ "-\tarea = kmem_cache_alloc(scan_area_cache, gfp_kmemleak_mask(gfp));\n"
+ "-\tif (!area) {\n"
+ "-\t\tpr_warning(\"Cannot allocate a scan area\\n\");\n"
+ "-\t\tgoto out;\n"
+ "-\t}\n"
+ "-\n"
+ " \tspin_lock_irqsave(&object->lock, flags);\n"
+ " \tif (ptr + size > object->pointer + object->size) {\n"
+ " \t\tkmemleak_warn(\"Scan area larger than object 0x%08lx\\n\", ptr);\n"
+ " \t\tdump_object_info(object);\n"
+ "-\t\tkmem_cache_free(scan_area_cache, area);\n"
+ " \t\tgoto out_unlock;\n"
+ " \t}\n"
+ "+\thlist_for_each_entry(area, &object->area_list, node) {\n"
+ "+\t\tif (ptr + size == area->start) {\n"
+ "+\t\t\tarea->start = ptr;\n"
+ "+\t\t\tarea->size += size;\n"
+ "+\t\t\tgoto out_unlock;\n"
+ "+\t\t} else if (ptr == area->start + area->size) {\n"
+ "+\t\t\tarea->size += size;\n"
+ "+\t\t\tgoto out_unlock;\n"
+ "+\t\t}\n"
+ "+\n"
+ "+\t}\n"
+ "+\tspin_unlock_irqrestore(&object->lock, flags);\n"
+ "+\n"
+ "+\tarea = kmem_cache_alloc(scan_area_cache, gfp_kmemleak_mask(gfp));\n"
+ "+\tif (!area) {\n"
+ "+\t\tpr_warn(\"Cannot allocate a scan area\\n\");\n"
+ "+\t\tgoto out;\n"
+ "+\t}\n"
+ " \n"
+ " \tINIT_HLIST_NODE(&area->node);\n"
+ " \tarea->start = ptr;\n"
+ " \tarea->size = size;\n"
+ " \n"
+ "+\tspin_lock_irqsave(&object->lock, flags);\n"
+ " \thlist_add_head(&area->node, &object->area_list);\n"
+ " out_unlock:\n"
+ " \tspin_unlock_irqrestore(&object->lock, flags);\n"
+ "-- \n"
+ 1.8.3.rc1.44.gb387c77
 
-be1324d831bd0d4ded8e4e5f13df78444f9b0976f6fd17f803ce13ded2cd974d
+0e41b396a1677a5962a090e0365154cdcf26bf3303f9a8f91afd14e370333901

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.