|
Message-Id: <20181023213504.28905-13-igor.stoppa@huawei.com> Date: Wed, 24 Oct 2018 00:34:59 +0300 From: Igor Stoppa <igor.stoppa@...il.com> To: Mimi Zohar <zohar@...ux.vnet.ibm.com>, Kees Cook <keescook@...omium.org>, Matthew Wilcox <willy@...radead.org>, Dave Chinner <david@...morbit.com>, James Morris <jmorris@...ei.org>, Michal Hocko <mhocko@...nel.org>, kernel-hardening@...ts.openwall.com, linux-integrity@...r.kernel.org, linux-security-module@...r.kernel.org Cc: igor.stoppa@...wei.com, Dave Hansen <dave.hansen@...ux.intel.com>, Jonathan Corbet <corbet@....net>, Laura Abbott <labbott@...hat.com>, Greg Kroah-Hartman <gregkh@...uxfoundation.org>, Andrew Morton <akpm@...ux-foundation.org>, Masahiro Yamada <yamada.masahiro@...ionext.com>, Alexey Dobriyan <adobriyan@...il.com>, Pekka Enberg <penberg@...nel.org>, "Paul E. McKenney" <paulmck@...ux.vnet.ibm.com>, Lihao Liang <lianglihao@...wei.com>, linux-kernel@...r.kernel.org Subject: [PATCH 12/17] prmem: linked list: set alignment 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 <igor.stoppa@...wei.com> CC: Greg Kroah-Hartman <gregkh@...uxfoundation.org> CC: Andrew Morton <akpm@...ux-foundation.org> CC: Masahiro Yamada <yamada.masahiro@...ionext.com> CC: Alexey Dobriyan <adobriyan@...il.com> CC: Pekka Enberg <penberg@...nel.org> CC: "Paul E. McKenney" <paulmck@...ux.vnet.ibm.com> CC: Lihao Liang <lianglihao@...wei.com> CC: linux-kernel@...r.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 *)); +#else +struct list_head { + struct list_head *next, *prev; }; struct hlist_node { struct hlist_node *next, **pprev; }; +#endif + +struct hlist_head { + struct hlist_node *first; +}; struct ustat { __kernel_daddr_t f_tfree; -- 2.17.1
Powered by blists - more mailing lists
Confused about mailing lists and their use? Read about mailing lists on Wikipedia and check out these guidelines on proper formatting of your messages.