arch/x86/kernel/cpu/sgx/encls.h
Source file repositories/reference/linux-study-clean/arch/x86/kernel/cpu/sgx/encls.h
File Facts
- System
- Linux kernel
- Corpus path
arch/x86/kernel/cpu/sgx/encls.h- Extension
.h- Size
- 6218 bytes
- Lines
- 242
- Domain
- Architecture Layer
- Bucket
- arch/x86
- Inferred role
- Architecture Layer: implementation source
- Status
- source implementation candidate
Why This File Exists
CPU and platform-specific kernel glue: boot entry, traps, syscall entry, interrupts, page tables, context switch, and low-level barriers.
- CPU and platform-specific kernel glue: boot entry, traps, syscall entry, interrupts, page tables, context switch, and low-level barriers.
- Defines or uses C structs; map object ownership, embedded links, reference counts, and lock ownership.
Dependency Surface
linux/bitops.hlinux/err.hlinux/io.hlinux/rwsem.hlinux/types.hasm/asm.hasm/traps.hsgx.h
Detected Declarations
function encls_faultedfunction encls_failedfunction __ecreatefunction __eextendfunction __eaddfunction __einitfunction __eremovefunction __edbgwrfunction __edbgrdfunction __etrackfunction __eldufunction __eblockfunction __epafunction __ewbfunction __emodprfunction __emodtfunction __eaugfunction __eupdatesvn
Annotated Snippet
#ifndef _X86_ENCLS_H
#define _X86_ENCLS_H
#include <linux/bitops.h>
#include <linux/err.h>
#include <linux/io.h>
#include <linux/rwsem.h>
#include <linux/types.h>
#include <asm/asm.h>
#include <asm/traps.h>
#include "sgx.h"
/* Retrieve the encoded trapnr from the specified return code. */
#define ENCLS_TRAPNR(r) ((r) & ~SGX_ENCLS_FAULT_FLAG)
/* Issue a WARN() about an ENCLS function. */
#define ENCLS_WARN(r, name) { \
do { \
int _r = (r); \
WARN_ONCE(_r, "%s returned %d (0x%x)\n", (name), _r, _r); \
} while (0); \
}
/*
* encls_faulted() - Check if an ENCLS leaf faulted given an error code
* @ret: the return value of an ENCLS leaf function call
*
* Return:
* - true: ENCLS leaf faulted.
* - false: Otherwise.
*/
static inline bool encls_faulted(int ret)
{
return ret & SGX_ENCLS_FAULT_FLAG;
}
/**
* encls_failed() - Check if an ENCLS function failed
* @ret: the return value of an ENCLS function call
*
* Check if an ENCLS function failed. This happens when the function causes a
* fault that is not caused by an EPCM conflict or when the function returns a
* non-zero value.
*/
static inline bool encls_failed(int ret)
{
if (encls_faulted(ret))
return ENCLS_TRAPNR(ret) != X86_TRAP_PF;
return !!ret;
}
/**
* __encls_ret_N - encode an ENCLS function that returns an error code in EAX
* @rax: function number
* @inputs: asm inputs for the function
*
* Emit assembly for an ENCLS function that returns an error code, e.g. EREMOVE.
* And because SGX isn't complex enough as it is, function that return an error
* code also modify flags.
*
* Return:
* 0 on success,
* SGX error code on failure
*/
#define __encls_ret_N(rax, inputs...) \
({ \
int ret; \
asm volatile( \
"1: encls\n" \
"2:\n" \
_ASM_EXTABLE_TYPE(1b, 2b, EX_TYPE_FAULT_SGX) \
: "=a"(ret) \
: "a"(rax), inputs \
: "memory", "cc"); \
ret; \
})
#define __encls_ret_1(rax, rcx) \
({ \
__encls_ret_N(rax, "c"(rcx)); \
})
#define __encls_ret_2(rax, rbx, rcx) \
({ \
__encls_ret_N(rax, "b"(rbx), "c"(rcx)); \
})
#define __encls_ret_3(rax, rbx, rcx, rdx) \
({ \
Annotation
- Immediate include surface: `linux/bitops.h`, `linux/err.h`, `linux/io.h`, `linux/rwsem.h`, `linux/types.h`, `asm/asm.h`, `asm/traps.h`, `sgx.h`.
- Detected declarations: `function encls_faulted`, `function encls_failed`, `function __ecreate`, `function __eextend`, `function __eadd`, `function __einit`, `function __eremove`, `function __edbgwr`, `function __edbgrd`, `function __etrack`.
- Atlas domain: Architecture Layer / arch/x86.
- Implementation status: source implementation candidate.
Implementation Notes
- This generated page is the file-by-file coverage layer; curated subsystem chapters should link here when they synthesize a multi-file control flow.
- Core OS pages should be promoted from atlas-only to deep-reviewed when they explain data structures, invariants, locking, lifecycle, and C implementation snippets.
- Driver-family pages are intentionally pattern-oriented unless they are part of the selected PCIe/NVMe representative device path.