On 5/4/2017 9:36 AM, Borislav Petkov wrote: > On Thu, May 04, 2017 at 09:24:11AM -0500, Tom Lendacky wrote: >> I did this so that an the include order wouldn't cause issues (including >> asm/mem_encrypt.h followed by later by a linux/mem_encrypt.h include). >> I can make this a bit clearer by having separate #defines for each >> thing, e.g.: >> >> #ifndef sme_me_mask >> #define sme_me_mask 0UL >> #endif >> >> #ifndef sme_active >> #define sme_active sme_active >> static inline ... >> #endif >> >> Is that better/clearer? > > I guess but where do we have to include both the asm/ and the linux/ > version? It's more of the sequence of various includes. For example, init/do_mounts.c includes <linux/module.h> that eventually gets down to <asm/pgtable_types.h> and then <asm/mem_encrypt.h>. However, a bit further down <linux/nfs_fs.h> is included which eventually gets down to <linux/dma-mapping.h> and then <linux/mem_encyrpt.h>. > > IOW, can we avoid these issues altogether by partitioning symbol > declarations differently among the headers? It's most problematic when CONFIG_AMD_MEM_ENCRYPT is not defined since we never include an asm/ version from the linux/ path. I could create a mem_encrypt.h in include/asm-generic/ that contains the info that is in the !CONFIG_AMD_MEM_ENCRYPT path of the linux/ version. Let me look into that. Thanks, Tom >