Unverified Commit ed6f512d authored by Shu Hang's avatar Shu Hang Committed by Liu Zhehui
Browse files

HAOC: Add support for x86 Isolated Execution Environment

community inclusion
category: feature
bugzilla: https://gitee.com/openeuler/kernel/issues/IBQKOW



-------------------------------------------------

Support Isolated Execution Environment for x86.
IEE depends on CR0.wp

Signed-off-by: default avatarShu Hang <shuh2023@zgclab.edu.cn>
Signed-off-by: default avatarHu Bing <&lt;hubing2023@zgclab.edu.cn>
Signed-off-by: default avatarLiu Zhehui <liuzhh@zgclab.edu.cn>
parent 80e5830c
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -1549,6 +1549,9 @@ config AMD_MEM_ENCRYPT
	  This requires an AMD processor that supports Secure Memory
	  Encryption (SME).

config IEE
	depends on X86_64
	def_bool n
# Common NUMA Features
config NUMA
	bool "NUMA Memory Allocation and Scheduler Support"
+21 −0
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * HAOC feature support
 *
 * Copyright (C) 2025 ZGCLAB
 * Authors: Shu Hang <shuh2023@zgclab.edu.cn>
 *          Hu Bing <hubing2023@zgclab.edu.cn>
 */

#ifndef _LINUX_HAOC_DEF_H
#define _LINUX_HAOC_DEF_H

enum {
	IEE_OP_MEMCPY,
	IEE_OP_MEMSET,
	IEE_OP_SET_FREEPTR,
	IEE_OP_TEST_CLEAR_BIT,
	IEE_FLAG_END
};

#endif
+20 −0
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * HAOC feature support
 *
 * Copyright (C) 2025 ZGCLAB
 * Authors: Shu Hang <shuh2023@zgclab.edu.cn>
 *          Hu Bing <hubing2023@zgclab.edu.cn>
 */

#ifndef _LINUX_HAOC_H
#define _LINUX_HAOC_H

#include <linux/types.h>

void _iee_memcpy(unsigned long __unused, void *dst, void *src, size_t n);
void _iee_memset(unsigned long __unused, void *ptr, int data, size_t n);
void _iee_set_freeptr(unsigned long __unused, void **pptr, void *ptr);
unsigned long _iee_test_and_clear_bit(unsigned long __unused,
					long nr, unsigned long *addr);
#endif
+37 −0
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * HAOC feature support
 *
 * Copyright (C) 2025 ZGCLAB
 * Authors: Shu Hang <shuh2023@zgclab.edu.cn>
 *          Hu Bing <hubing2023@zgclab.edu.cn>
 */

#ifndef _LINUX_IEE_ACCESS_H
#define _LINUX_IEE_ACCESS_H

#include <asm/haoc/haoc-def.h>

extern unsigned long long iee_rw_gate(int flag, ...);

static inline void iee_memcpy(void *dst, const void *src, size_t n)
{
	iee_rw_gate(IEE_OP_MEMCPY, dst, src, n);
}

static inline void iee_memset(void *ptr, int data, size_t n)
{
	iee_rw_gate(IEE_OP_MEMSET, ptr, data, n);
}

static inline void iee_set_freeptr(void **pptr, void *ptr)
{
	iee_rw_gate(IEE_OP_SET_FREEPTR, pptr, ptr);
}

static inline unsigned long iee_test_and_clear_bit(long nr, unsigned long *addr)
{
	return iee_rw_gate(IEE_OP_TEST_CLEAR_BIT, nr, addr);
}

#endif
+16 −0
Original line number Diff line number Diff line
/* SPDX-License-Identifier: GPL-2.0 */
/*
 * HAOC feature support
 *
 * Copyright (C) 2025 ZGCLAB
 * Authors: Shu Hang <shuh2023@zgclab.edu.cn>
 *          Hu Bing <hubing2023@zgclab.edu.cn>
 */

#ifndef _LINUX_IEE_FUNC_H
#define _LINUX_IEE_FUNC_H

extern void set_iee_page(unsigned long addr, unsigned int order);
extern void unset_iee_page(unsigned long addr, unsigned int order);

#endif  /* _LINUX_IEE_FUNC_H */
Loading