All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <20100821142215.202094497@efficios.com>

diff --git a/a/1.txt b/N1/1.txt
index beff98b..3c00a51 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -1,3 +1,182 @@
-An embedded and charset-unspecified text was scrubbed...
-Name: create-generic-alignment-api.patch
-URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20100821/f3db84e4/attachment.ksh>
+Rather than re-doing the "alignment on a type size" trick all over again at
+different levels, import the "ltt_align" from LTTng into kernel.h and make this
+available to everyone. Renaming to:
+
+- object_align()
+- object_align_floor()
+- offset_align()
+- offset_align_floor()
+
+Changelog since v8:
+- Remove unnecessary braces.
+- Update object_align/object_align_floor comments.
+
+Changelog since v7:
+- Add missing include/linux/Kconfig header-y.
+
+Changelog since v6:
+- Adapt to changes introduced by
+  commit a79ff731a1b277d0e92d9453bdf374e04cec717a
+- Use __alignof__() instead of sizeof() to support compound types.
+
+Changelog since v5:
+- moved alignment apis to a separate header file so that it is possible
+  to use them from other header files which are, for example, included
+  from kernel.h.
+
+Changelog since v4:
+- add missing ( ) around parameters within object_align() and
+  object_align_floor().
+- More coding style cleanups to ALIGN() (checkpatch.pl is happy now).
+
+Changelog since v3:
+- optimize object_align*() so fewer instructions are needed for alignment of
+  addresses known dynamically. Use the (already existing) "ALIGN()", and create
+  the "ALIGN_FLOOR()" macro.
+- While we are there, let's clean up the ALIGN() macros wrt coding style. e.g.
+  missing parenthesis around the first use of the "x" parameter in ALIGN().
+
+Changelog since v2:
+- Fix object_align*(): should use object size alignment, not pointer alignment.
+
+Changelog since v1:
+- Align on the object natural alignment
+    (rather than min(arch word alignment, natural alignment))
+
+The advantage of separating the API in "object alignment" and "offset alignment"
+is that it gives more freedom to play with offset alignment. Very useful to
+implement a tracer ring-buffer alignment. (hint hint)
+
+Typical users will use "object alignment", but infrastructures like tracers
+which need to perform alignment of statically known base+offsets will typically
+use "offset alignment", because it allows to align with respect to a base rather
+than to pass an absolute address.
+
+Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+Signed-off-by: Alexander Shishkin <virtuoso@slind.org>
+Reviewed-by: Steven Rostedt <rostedt@goodmis.org>
+Reviewed-by: "Kirill A. Shutemov" <kirill@shutemov.name>
+CC: Russell King - ARM Linux <linux@arm.linux.org.uk>
+CC: linux-arm-kernel@lists.infradead.org
+CC: Imre Deak <imre.deak@nokia.com>
+CC: Jamie Lokier <jamie@shareable.org>
+CC: mingo@elte.hu
+CC: Alexey Dobriyan <adobriyan@gmail.com>
+---
+ include/linux/Kbuild   |    1 
+ include/linux/align.h  |   59 +++++++++++++++++++++++++++++++++++++++++++++++++
+ include/linux/kernel.h |   10 ++------
+ 3 files changed, 63 insertions(+), 7 deletions(-)
+ create mode 100644 include/linux/align.h
+
+Index: linux.trees.git/include/linux/align.h
+===================================================================
+--- /dev/null	1970-01-01 00:00:00.000000000 +0000
++++ linux.trees.git/include/linux/align.h	2010-08-17 22:12:37.000000000 -0400
+@@ -0,0 +1,59 @@
++#ifndef _LINUX_ALIGN_H
++#define _LINUX_ALIGN_H
++
++#define __ALIGN_KERNEL(x, a)	__ALIGN_KERNEL_MASK(x, (typeof(x))(a) - 1)
++#define __ALIGN_KERNEL_MASK(x, mask) \
++				(((x) + (mask)) & ~(mask))
++
++#ifdef __KERNEL__
++
++#include <linux/types.h>
++#include <linux/log2.h>
++
++#define ALIGN(x, a)		__ALIGN_KERNEL(x, a)
++#define __ALIGN_MASK(x, mask)	__ALIGN_KERNEL_MASK(x, mask)
++#define PTR_ALIGN(p, a)		((typeof(p)) ALIGN((unsigned long) (p), a))
++#define ALIGN_FLOOR(x, a)	__ALIGN_FLOOR_MASK(x, (typeof(x)) (a) - 1)
++#define __ALIGN_FLOOR_MASK(x, mask)	((x) & ~(mask))
++#define PTR_ALIGN_FLOOR(p, a) \
++			((typeof(p)) ALIGN_FLOOR((unsigned long) (p), a))
++#define IS_ALIGNED(x, a)	(((x) & ((typeof(x)) (a) - 1)) == 0)
++
++/*
++ * Align pointer on natural object alignment.
++ */
++#define object_align(obj)	PTR_ALIGN(obj, __alignof__(*(obj)))
++#define object_align_floor(obj)	PTR_ALIGN_FLOOR(obj, __alignof__(*(obj)))
++
++/**
++ * offset_align - Calculate the offset needed to align an object on its natural
++ *                alignment towards higher addresses.
++ * @align_drift:  object offset from an "alignment"-aligned address.
++ * @alignment:    natural object alignment. Must be non-zero, power of 2.
++ *
++ * Returns the offset that must be added to align towards higher
++ * addresses.
++ */
++#define offset_align(align_drift, alignment)			\
++	({							\
++		MAYBE_BUILD_BUG_ON_NOT_POWER_OF_2(alignment);	\
++		((alignment - align_drift) & (alignment - 1));	\
++	})
++
++/**
++ * offset_align_floor - Calculate the offset needed to align an object
++ *                      on its natural alignment towards lower addresses.
++ * @align_drift:  object offset from an "alignment"-aligned address.
++ * @alignment:    natural object alignment. Must be non-zero, power of 2.
++ *
++ * Returns the offset that must be substracted to align towards lower addresses.
++ */
++#define offset_align_floor(align_drift, alignment)		\
++	({							\
++		MAYBE_BUILD_BUG_ON_NOT_POWER_OF_2(alignment);	\
++		((align_drift - alignment) & (alignment - 1);	\
++	})
++
++#endif /* __KERNEL__ */
++
++#endif
+Index: linux.trees.git/include/linux/kernel.h
+===================================================================
+--- linux.trees.git.orig/include/linux/kernel.h	2010-08-17 22:12:11.000000000 -0400
++++ linux.trees.git/include/linux/kernel.h	2010-08-17 22:13:31.000000000 -0400
+@@ -4,8 +4,6 @@
+ /*
+  * 'kernel.h' contains some often-used function prototypes etc
+  */
+-#define __ALIGN_KERNEL(x, a)		__ALIGN_KERNEL_MASK(x, (typeof(x))(a) - 1)
+-#define __ALIGN_KERNEL_MASK(x, mask)	(((x) + (mask)) & ~(mask))
+ 
+ #ifdef __KERNEL__
+ 
+@@ -39,11 +37,6 @@ extern const char linux_proc_banner[];
+ 
+ #define STACK_MAGIC	0xdeadbeef
+ 
+-#define ALIGN(x, a)		__ALIGN_KERNEL((x), (a))
+-#define __ALIGN_MASK(x, mask)	__ALIGN_KERNEL_MASK((x), (mask))
+-#define PTR_ALIGN(p, a)		((typeof(p))ALIGN((unsigned long)(p), (a)))
+-#define IS_ALIGNED(x, a)		(((x) & ((typeof(x))(a) - 1)) == 0)
+-
+ #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr))
+ 
+ /*
+@@ -771,6 +764,9 @@ struct sysinfo {
+ #define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); }))
+ #define BUILD_BUG_ON_NULL(e) ((void *)sizeof(struct { int:-!!(e); }))
+ 
++/* The header align.h depends on MAYBE_BUILD_BUG_ON_NOT_POWER_OF_2() */
++#include <linux/align.h>
++
+ /* Trap pasters of __FUNCTION__ at compile-time */
+ #define __FUNCTION__ (__func__)
+ 
+Index: linux.trees.git/include/linux/Kbuild
+===================================================================
+--- linux.trees.git.orig/include/linux/Kbuild	2010-08-17 22:12:11.000000000 -0400
++++ linux.trees.git/include/linux/Kbuild	2010-08-17 22:12:37.000000000 -0400
+@@ -38,6 +38,7 @@ header-y += adfs_fs.h
+ header-y += affs_hardblocks.h
+ header-y += agpgart.h
+ header-y += aio_abi.h
++header-y += align.h
+ header-y += apm_bios.h
+ header-y += arcfb.h
+ header-y += atalk.h
diff --git a/a/content_digest b/N1/content_digest
index 556e4f9..d04ff67 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -1,12 +1,216 @@
  "ref\020100821141750.770348530@efficios.com\0"
- "From\0mathieu.desnoyers@efficios.com (Mathieu Desnoyers)\0"
+ "From\0Mathieu Desnoyers <mathieu.desnoyers@efficios.com>\0"
  "Subject\0[PATCH for -tip 2/2] Create generic alignment API (v9)\0"
  "Date\0Sat, 21 Aug 2010 10:17:52 -0400\0"
- "To\0linux-arm-kernel@lists.infradead.org\0"
+ "To\0LKML <linux-kernel@vger.kernel.org>\0"
+ "Cc\0ltt-dev@lists.casi.polymtl.ca"
+  Linus Torvalds <torvalds@linux-foundation.org>
+  Andrew Morton <akpm@linux-foundation.org>
+  Ingo Molnar <mingo@elte.hu>
+  Peter Zijlstra <peterz@infradead.org>
+  Steven Rostedt <rostedt@goodmis.org>
+  Frederic Weisbecker <fweisbec@gmail.com>
+  Thomas Gleixner <tglx@linutronix.de>
+  Christoph Hellwig <hch@lst.de>
+  Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
+  Li Zefan <lizf@cn.fujitsu.com>
+  Lai Jiangshan <laijs@cn.fujitsu.com>
+  Johannes Berg <johannes.berg@intel.com>
+  Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
+  Arnaldo Carvalho de Melo <acme@infradead.org>
+  Tom Zanussi <tzanussi@gmail.com>
+  KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
+  Andi Kleen <andi@firstfloor.org>
+  Alexander Shishkin <virtuoso@slind.org>
+  Russell King - ARM Linux <linux@arm.linux.org.uk>
+  linux-arm-kernel@lists.infradead.org
+  Imre Deak <imre.deak@nokia.com>
+  Jamie Lokier <jamie@shareable.org>
+ " Alexey Dobriyan <adobriyan@gmail.com>\0"
  "\00:1\0"
+ "fn\0create-generic-alignment-api.patch\0"
  "b\0"
- "An embedded and charset-unspecified text was scrubbed...\n"
- "Name: create-generic-alignment-api.patch\n"
- URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20100821/f3db84e4/attachment.ksh>
+ "Rather than re-doing the \"alignment on a type size\" trick all over again at\n"
+ "different levels, import the \"ltt_align\" from LTTng into kernel.h and make this\n"
+ "available to everyone. Renaming to:\n"
+ "\n"
+ "- object_align()\n"
+ "- object_align_floor()\n"
+ "- offset_align()\n"
+ "- offset_align_floor()\n"
+ "\n"
+ "Changelog since v8:\n"
+ "- Remove unnecessary braces.\n"
+ "- Update object_align/object_align_floor comments.\n"
+ "\n"
+ "Changelog since v7:\n"
+ "- Add missing include/linux/Kconfig header-y.\n"
+ "\n"
+ "Changelog since v6:\n"
+ "- Adapt to changes introduced by\n"
+ "  commit a79ff731a1b277d0e92d9453bdf374e04cec717a\n"
+ "- Use __alignof__() instead of sizeof() to support compound types.\n"
+ "\n"
+ "Changelog since v5:\n"
+ "- moved alignment apis to a separate header file so that it is possible\n"
+ "  to use them from other header files which are, for example, included\n"
+ "  from kernel.h.\n"
+ "\n"
+ "Changelog since v4:\n"
+ "- add missing ( ) around parameters within object_align() and\n"
+ "  object_align_floor().\n"
+ "- More coding style cleanups to ALIGN() (checkpatch.pl is happy now).\n"
+ "\n"
+ "Changelog since v3:\n"
+ "- optimize object_align*() so fewer instructions are needed for alignment of\n"
+ "  addresses known dynamically. Use the (already existing) \"ALIGN()\", and create\n"
+ "  the \"ALIGN_FLOOR()\" macro.\n"
+ "- While we are there, let's clean up the ALIGN() macros wrt coding style. e.g.\n"
+ "  missing parenthesis around the first use of the \"x\" parameter in ALIGN().\n"
+ "\n"
+ "Changelog since v2:\n"
+ "- Fix object_align*(): should use object size alignment, not pointer alignment.\n"
+ "\n"
+ "Changelog since v1:\n"
+ "- Align on the object natural alignment\n"
+ "    (rather than min(arch word alignment, natural alignment))\n"
+ "\n"
+ "The advantage of separating the API in \"object alignment\" and \"offset alignment\"\n"
+ "is that it gives more freedom to play with offset alignment. Very useful to\n"
+ "implement a tracer ring-buffer alignment. (hint hint)\n"
+ "\n"
+ "Typical users will use \"object alignment\", but infrastructures like tracers\n"
+ "which need to perform alignment of statically known base+offsets will typically\n"
+ "use \"offset alignment\", because it allows to align with respect to a base rather\n"
+ "than to pass an absolute address.\n"
+ "\n"
+ "Signed-off-by: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>\n"
+ "Signed-off-by: Alexander Shishkin <virtuoso@slind.org>\n"
+ "Reviewed-by: Steven Rostedt <rostedt@goodmis.org>\n"
+ "Reviewed-by: \"Kirill A. Shutemov\" <kirill@shutemov.name>\n"
+ "CC: Russell King - ARM Linux <linux@arm.linux.org.uk>\n"
+ "CC: linux-arm-kernel@lists.infradead.org\n"
+ "CC: Imre Deak <imre.deak@nokia.com>\n"
+ "CC: Jamie Lokier <jamie@shareable.org>\n"
+ "CC: mingo@elte.hu\n"
+ "CC: Alexey Dobriyan <adobriyan@gmail.com>\n"
+ "---\n"
+ " include/linux/Kbuild   |    1 \n"
+ " include/linux/align.h  |   59 +++++++++++++++++++++++++++++++++++++++++++++++++\n"
+ " include/linux/kernel.h |   10 ++------\n"
+ " 3 files changed, 63 insertions(+), 7 deletions(-)\n"
+ " create mode 100644 include/linux/align.h\n"
+ "\n"
+ "Index: linux.trees.git/include/linux/align.h\n"
+ "===================================================================\n"
+ "--- /dev/null\t1970-01-01 00:00:00.000000000 +0000\n"
+ "+++ linux.trees.git/include/linux/align.h\t2010-08-17 22:12:37.000000000 -0400\n"
+ "@@ -0,0 +1,59 @@\n"
+ "+#ifndef _LINUX_ALIGN_H\n"
+ "+#define _LINUX_ALIGN_H\n"
+ "+\n"
+ "+#define __ALIGN_KERNEL(x, a)\t__ALIGN_KERNEL_MASK(x, (typeof(x))(a) - 1)\n"
+ "+#define __ALIGN_KERNEL_MASK(x, mask) \\\n"
+ "+\t\t\t\t(((x) + (mask)) & ~(mask))\n"
+ "+\n"
+ "+#ifdef __KERNEL__\n"
+ "+\n"
+ "+#include <linux/types.h>\n"
+ "+#include <linux/log2.h>\n"
+ "+\n"
+ "+#define ALIGN(x, a)\t\t__ALIGN_KERNEL(x, a)\n"
+ "+#define __ALIGN_MASK(x, mask)\t__ALIGN_KERNEL_MASK(x, mask)\n"
+ "+#define PTR_ALIGN(p, a)\t\t((typeof(p)) ALIGN((unsigned long) (p), a))\n"
+ "+#define ALIGN_FLOOR(x, a)\t__ALIGN_FLOOR_MASK(x, (typeof(x)) (a) - 1)\n"
+ "+#define __ALIGN_FLOOR_MASK(x, mask)\t((x) & ~(mask))\n"
+ "+#define PTR_ALIGN_FLOOR(p, a) \\\n"
+ "+\t\t\t((typeof(p)) ALIGN_FLOOR((unsigned long) (p), a))\n"
+ "+#define IS_ALIGNED(x, a)\t(((x) & ((typeof(x)) (a) - 1)) == 0)\n"
+ "+\n"
+ "+/*\n"
+ "+ * Align pointer on natural object alignment.\n"
+ "+ */\n"
+ "+#define object_align(obj)\tPTR_ALIGN(obj, __alignof__(*(obj)))\n"
+ "+#define object_align_floor(obj)\tPTR_ALIGN_FLOOR(obj, __alignof__(*(obj)))\n"
+ "+\n"
+ "+/**\n"
+ "+ * offset_align - Calculate the offset needed to align an object on its natural\n"
+ "+ *                alignment towards higher addresses.\n"
+ "+ * @align_drift:  object offset from an \"alignment\"-aligned address.\n"
+ "+ * @alignment:    natural object alignment. Must be non-zero, power of 2.\n"
+ "+ *\n"
+ "+ * Returns the offset that must be added to align towards higher\n"
+ "+ * addresses.\n"
+ "+ */\n"
+ "+#define offset_align(align_drift, alignment)\t\t\t\\\n"
+ "+\t({\t\t\t\t\t\t\t\\\n"
+ "+\t\tMAYBE_BUILD_BUG_ON_NOT_POWER_OF_2(alignment);\t\\\n"
+ "+\t\t((alignment - align_drift) & (alignment - 1));\t\\\n"
+ "+\t})\n"
+ "+\n"
+ "+/**\n"
+ "+ * offset_align_floor - Calculate the offset needed to align an object\n"
+ "+ *                      on its natural alignment towards lower addresses.\n"
+ "+ * @align_drift:  object offset from an \"alignment\"-aligned address.\n"
+ "+ * @alignment:    natural object alignment. Must be non-zero, power of 2.\n"
+ "+ *\n"
+ "+ * Returns the offset that must be substracted to align towards lower addresses.\n"
+ "+ */\n"
+ "+#define offset_align_floor(align_drift, alignment)\t\t\\\n"
+ "+\t({\t\t\t\t\t\t\t\\\n"
+ "+\t\tMAYBE_BUILD_BUG_ON_NOT_POWER_OF_2(alignment);\t\\\n"
+ "+\t\t((align_drift - alignment) & (alignment - 1);\t\\\n"
+ "+\t})\n"
+ "+\n"
+ "+#endif /* __KERNEL__ */\n"
+ "+\n"
+ "+#endif\n"
+ "Index: linux.trees.git/include/linux/kernel.h\n"
+ "===================================================================\n"
+ "--- linux.trees.git.orig/include/linux/kernel.h\t2010-08-17 22:12:11.000000000 -0400\n"
+ "+++ linux.trees.git/include/linux/kernel.h\t2010-08-17 22:13:31.000000000 -0400\n"
+ "@@ -4,8 +4,6 @@\n"
+ " /*\n"
+ "  * 'kernel.h' contains some often-used function prototypes etc\n"
+ "  */\n"
+ "-#define __ALIGN_KERNEL(x, a)\t\t__ALIGN_KERNEL_MASK(x, (typeof(x))(a) - 1)\n"
+ "-#define __ALIGN_KERNEL_MASK(x, mask)\t(((x) + (mask)) & ~(mask))\n"
+ " \n"
+ " #ifdef __KERNEL__\n"
+ " \n"
+ "@@ -39,11 +37,6 @@ extern const char linux_proc_banner[];\n"
+ " \n"
+ " #define STACK_MAGIC\t0xdeadbeef\n"
+ " \n"
+ "-#define ALIGN(x, a)\t\t__ALIGN_KERNEL((x), (a))\n"
+ "-#define __ALIGN_MASK(x, mask)\t__ALIGN_KERNEL_MASK((x), (mask))\n"
+ "-#define PTR_ALIGN(p, a)\t\t((typeof(p))ALIGN((unsigned long)(p), (a)))\n"
+ "-#define IS_ALIGNED(x, a)\t\t(((x) & ((typeof(x))(a) - 1)) == 0)\n"
+ "-\n"
+ " #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0]) + __must_be_array(arr))\n"
+ " \n"
+ " /*\n"
+ "@@ -771,6 +764,9 @@ struct sysinfo {\n"
+ " #define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); }))\n"
+ " #define BUILD_BUG_ON_NULL(e) ((void *)sizeof(struct { int:-!!(e); }))\n"
+ " \n"
+ "+/* The header align.h depends on MAYBE_BUILD_BUG_ON_NOT_POWER_OF_2() */\n"
+ "+#include <linux/align.h>\n"
+ "+\n"
+ " /* Trap pasters of __FUNCTION__ at compile-time */\n"
+ " #define __FUNCTION__ (__func__)\n"
+ " \n"
+ "Index: linux.trees.git/include/linux/Kbuild\n"
+ "===================================================================\n"
+ "--- linux.trees.git.orig/include/linux/Kbuild\t2010-08-17 22:12:11.000000000 -0400\n"
+ "+++ linux.trees.git/include/linux/Kbuild\t2010-08-17 22:12:37.000000000 -0400\n"
+ "@@ -38,6 +38,7 @@ header-y += adfs_fs.h\n"
+ " header-y += affs_hardblocks.h\n"
+ " header-y += agpgart.h\n"
+ " header-y += aio_abi.h\n"
+ "+header-y += align.h\n"
+ " header-y += apm_bios.h\n"
+ " header-y += arcfb.h\n"
+  header-y += atalk.h
 
-b70ba747f0e011bd38de5899140d5cfd0837d2d9a703cb0b6ebfff7aeec05248
+5d88254f9eec73c4105756283d84d8083e4759efb412f0f04f9a4a4628499971

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.