All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <57AABC8B.1040409@zoho.com>

diff --git a/a/1.txt b/N1/1.txt
index 441e62b..6a20fec 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -68,3 +68,82 @@ it have following correction against original patch v1
 any comments about new patch is welcome
 
 this new patch called patch v2 is shown below
+
+>From 868d3c100f41e16136eed50e47bbfb03d4a16d25 Mon Sep 17 00:00:00 2001
+From: zijun_hu <zijun_hu@htc.com>
+Date: Wed, 10 Aug 2016 12:13:41 +0800
+Subject: [PATCH v2 1/1] mm/vmalloc: fix align value calculation error
+
+it causes double align requirement for __get_vm_area_node() if parameter
+size is power of 2 and VM_IOREMAP is set in parameter flags, for example
+size=0x10000 -> fls_long(0x10000)=17 -> align=0x20000
+
+get_count_order_long() is implemented and used instead of fls_long() for
+fixing the bug, for example
+size=0x10000 -> get_count_order_long(0x10000)=16 -> align=0x10000
+
+Signed-off-by: zijun_hu <zijun_hu@htc.com>
+---
+ include/linux/bitops.h | 16 ++++++++++++++++
+ mm/vmalloc.c           |  8 ++++----
+ 2 files changed, 20 insertions(+), 4 deletions(-)
+
+diff --git a/include/linux/bitops.h b/include/linux/bitops.h
+index 299e76b..93a07d1 100644
+--- a/include/linux/bitops.h
++++ b/include/linux/bitops.h
+@@ -192,6 +192,22 @@ static inline unsigned fls_long(unsigned long l)
+ }
+ 
+ /**
++ * get_count_order_long - get order after rounding @l up to power of 2
++ * @l: parameter
++ *
++ * it is same as get_count_order() but with long type parameter
++ */
++static inline int get_count_order_long(unsigned long l)
++{
++	if (l == 0UL)
++		return -1;
++	else if (l & (l - 1UL))
++		return (int)fls_long(l);
++	else
++		return (int)fls_long(l) - 1;
++}
++
++/**
+  * __ffs64 - find first set bit in a 64 bit word
+  * @word: The 64 bit word
+  *
+diff --git a/mm/vmalloc.c b/mm/vmalloc.c
+index 91f44e7..80660a0 100644
+--- a/mm/vmalloc.c
++++ b/mm/vmalloc.c
+@@ -1359,14 +1359,14 @@ static struct vm_struct *__get_vm_area_node(unsigned long size,
+ 	struct vm_struct *area;
+ 
+ 	BUG_ON(in_interrupt());
+-	if (flags & VM_IOREMAP)
+-		align = 1ul << clamp_t(int, fls_long(size),
+-				       PAGE_SHIFT, IOREMAP_MAX_ORDER);
+-
+ 	size = PAGE_ALIGN(size);
+ 	if (unlikely(!size))
+ 		return NULL;
+ 
++	if (flags & VM_IOREMAP)
++		align = 1ul << clamp_t(int, get_count_order_long(size),
++				       PAGE_SHIFT, IOREMAP_MAX_ORDER);
++
+ 	area = kzalloc_node(sizeof(*area), gfp_mask & GFP_RECLAIM_MASK, node);
+ 	if (unlikely(!area))
+ 		return NULL;
+-- 
+1.9.1
+
+> get_count_order() is a weird name and perhaps both of these should be
+> renamed to things which actually make sense.  That's a separate issue.
+> 
+okay, perhaps, another patch is applied to correct this weird name issue
+in the future due to it is a separate issue now
+we use get_count_order_long() to consist with get_order_long() now
diff --git a/a/content_digest b/N1/content_digest
index 650467d..da0ae3b 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -86,6 +86,85 @@
  "5) more commit message is offered to make issue and approach clear\n"
  "any comments about new patch is welcome\n"
  "\n"
- this new patch called patch v2 is shown below
+ "this new patch called patch v2 is shown below\n"
+ "\n"
+ ">From 868d3c100f41e16136eed50e47bbfb03d4a16d25 Mon Sep 17 00:00:00 2001\n"
+ "From: zijun_hu <zijun_hu@htc.com>\n"
+ "Date: Wed, 10 Aug 2016 12:13:41 +0800\n"
+ "Subject: [PATCH v2 1/1] mm/vmalloc: fix align value calculation error\n"
+ "\n"
+ "it causes double align requirement for __get_vm_area_node() if parameter\n"
+ "size is power of 2 and VM_IOREMAP is set in parameter flags, for example\n"
+ "size=0x10000 -> fls_long(0x10000)=17 -> align=0x20000\n"
+ "\n"
+ "get_count_order_long() is implemented and used instead of fls_long() for\n"
+ "fixing the bug, for example\n"
+ "size=0x10000 -> get_count_order_long(0x10000)=16 -> align=0x10000\n"
+ "\n"
+ "Signed-off-by: zijun_hu <zijun_hu@htc.com>\n"
+ "---\n"
+ " include/linux/bitops.h | 16 ++++++++++++++++\n"
+ " mm/vmalloc.c           |  8 ++++----\n"
+ " 2 files changed, 20 insertions(+), 4 deletions(-)\n"
+ "\n"
+ "diff --git a/include/linux/bitops.h b/include/linux/bitops.h\n"
+ "index 299e76b..93a07d1 100644\n"
+ "--- a/include/linux/bitops.h\n"
+ "+++ b/include/linux/bitops.h\n"
+ "@@ -192,6 +192,22 @@ static inline unsigned fls_long(unsigned long l)\n"
+ " }\n"
+ " \n"
+ " /**\n"
+ "+ * get_count_order_long - get order after rounding @l up to power of 2\n"
+ "+ * @l: parameter\n"
+ "+ *\n"
+ "+ * it is same as get_count_order() but with long type parameter\n"
+ "+ */\n"
+ "+static inline int get_count_order_long(unsigned long l)\n"
+ "+{\n"
+ "+\tif (l == 0UL)\n"
+ "+\t\treturn -1;\n"
+ "+\telse if (l & (l - 1UL))\n"
+ "+\t\treturn (int)fls_long(l);\n"
+ "+\telse\n"
+ "+\t\treturn (int)fls_long(l) - 1;\n"
+ "+}\n"
+ "+\n"
+ "+/**\n"
+ "  * __ffs64 - find first set bit in a 64 bit word\n"
+ "  * @word: The 64 bit word\n"
+ "  *\n"
+ "diff --git a/mm/vmalloc.c b/mm/vmalloc.c\n"
+ "index 91f44e7..80660a0 100644\n"
+ "--- a/mm/vmalloc.c\n"
+ "+++ b/mm/vmalloc.c\n"
+ "@@ -1359,14 +1359,14 @@ static struct vm_struct *__get_vm_area_node(unsigned long size,\n"
+ " \tstruct vm_struct *area;\n"
+ " \n"
+ " \tBUG_ON(in_interrupt());\n"
+ "-\tif (flags & VM_IOREMAP)\n"
+ "-\t\talign = 1ul << clamp_t(int, fls_long(size),\n"
+ "-\t\t\t\t       PAGE_SHIFT, IOREMAP_MAX_ORDER);\n"
+ "-\n"
+ " \tsize = PAGE_ALIGN(size);\n"
+ " \tif (unlikely(!size))\n"
+ " \t\treturn NULL;\n"
+ " \n"
+ "+\tif (flags & VM_IOREMAP)\n"
+ "+\t\talign = 1ul << clamp_t(int, get_count_order_long(size),\n"
+ "+\t\t\t\t       PAGE_SHIFT, IOREMAP_MAX_ORDER);\n"
+ "+\n"
+ " \tarea = kzalloc_node(sizeof(*area), gfp_mask & GFP_RECLAIM_MASK, node);\n"
+ " \tif (unlikely(!area))\n"
+ " \t\treturn NULL;\n"
+ "-- \n"
+ "1.9.1\n"
+ "\n"
+ "> get_count_order() is a weird name and perhaps both of these should be\n"
+ "> renamed to things which actually make sense.  That's a separate issue.\n"
+ "> \n"
+ "okay, perhaps, another patch is applied to correct this weird name issue\n"
+ "in the future due to it is a separate issue now\n"
+ we use get_count_order_long() to consist with get_order_long() now
 
-d36d7f7ff124c0add363b0817d484281eb389366145b03647af79ac8a9e1c018
+6001944f43b87ca54f5def4ba5676a694cf2ae4c11d721552ffb8338dde925a1

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.