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