Thread (140 messages) 140 messages, 21 authors, 2018-12-04

Re: [PATCH 12/17] prmem: linked list: set alignment

From: Peter Zijlstra <peterz@infradead.org>
Date: 2018-10-26 09:32:01
Also in: linux-integrity, lkml

On Wed, Oct 24, 2018 at 12:34:59AM +0300, Igor Stoppa wrote:
quoted hunk ↗ jump to hunk
As preparation to using write rare on the nodes of various types of
lists, specify that the fields in the basic data structures must be
aligned to sizeof(void *)

It is meant to ensure that any static allocation will not cross a page
boundary, to allow pointers to be updated in one step.

Signed-off-by: Igor Stoppa <redacted>
CC: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
CC: Andrew Morton <akpm@linux-foundation.org>
CC: Masahiro Yamada <redacted>
CC: Alexey Dobriyan <redacted>
CC: Pekka Enberg <penberg@kernel.org>
CC: "Paul E. McKenney" <redacted>
CC: Lihao Liang <redacted>
CC: linux-kernel@vger.kernel.org
---
 include/linux/types.h | 20 ++++++++++++++++----
 1 file changed, 16 insertions(+), 4 deletions(-)
diff --git a/include/linux/types.h b/include/linux/types.h
index 9834e90aa010..53609bbdcf0f 100644
--- a/include/linux/types.h
+++ b/include/linux/types.h
@@ -183,17 +183,29 @@ typedef struct {
 } atomic64_t;
 #endif
 
+#ifdef CONFIG_PRMEM
 struct list_head {
-	struct list_head *next, *prev;
-};
+	struct list_head *next __aligned(sizeof(void *));
+	struct list_head *prev __aligned(sizeof(void *));
+} __aligned(sizeof(void *));
 
-struct hlist_head {
-	struct hlist_node *first;
+struct hlist_node {
+	struct hlist_node *next __aligned(sizeof(void *));
+	struct hlist_node **pprev __aligned(sizeof(void *));
+} __aligned(sizeof(void *));
Argh.. are we really supporting platforms that do not naturally align
this? If so, which and can't we fix those?

Also, if you force alignment on a member, the structure as a whole
inherits the largest member alignment.

Also, you made something that was simple an unreadable mess without
proper justification (ie. you fail to show need).
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help