Skip to content

Commit 9496de8

Browse files
romank-msftBrian Perkins
authored andcommitted
drivers: hv: mshv_vtl: Support for Secure AVIC
Signed-off-by: Roman Kisel <romank@linux.microsoft.com> Signed-off-by: Tianyu Lan <tiala@microsoft.com>
1 parent 310fd8b commit 9496de8

8 files changed

Lines changed: 624 additions & 225 deletions

File tree

Microsoft/hcl-x64.config

Lines changed: 13 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -2,23 +2,20 @@
22
# Automatically generated file; DO NOT EDIT.
33
# Linux/x86_64 6.18.0 Kernel Configuration
44
#
5-
CONFIG_CC_VERSION_TEXT="gcc (Ubuntu 13.3.0-6ubuntu2~24.04) 13.3.0"
5+
CONFIG_CC_VERSION_TEXT="gcc (Ubuntu 9.4.0-1ubuntu1~20.04.2) 9.4.0"
66
CONFIG_CC_IS_GCC=y
7-
CONFIG_GCC_VERSION=130300
7+
CONFIG_GCC_VERSION=90400
88
CONFIG_CLANG_VERSION=0
99
CONFIG_AS_IS_GNU=y
10-
CONFIG_AS_VERSION=24200
10+
CONFIG_AS_VERSION=23400
1111
CONFIG_LD_IS_BFD=y
12-
CONFIG_LD_VERSION=24200
12+
CONFIG_LD_VERSION=23400
1313
CONFIG_LLD_VERSION=0
14-
CONFIG_RUSTC_VERSION=109101
15-
CONFIG_RUSTC_LLVM_VERSION=210102
14+
CONFIG_RUSTC_VERSION=109500
15+
CONFIG_RUSTC_LLVM_VERSION=220102
1616
CONFIG_CC_CAN_LINK=y
17-
CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y
18-
CONFIG_CC_HAS_ASM_GOTO_TIED_OUTPUT=y
19-
CONFIG_TOOLS_SUPPORT_RELR=y
17+
CONFIG_GCC_ASM_GOTO_OUTPUT_BROKEN=y
2018
CONFIG_CC_HAS_ASM_INLINE=y
21-
CONFIG_CC_HAS_ASSUME=y
2219
CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y
2320
CONFIG_LD_CAN_USE_KEEP_IN_OVERLAY=y
2421
CONFIG_RUSTC_HAS_COERCE_POINTEE=y
@@ -305,6 +302,7 @@ CONFIG_ARCH_CPUIDLE_HALTPOLL=y
305302
# CONFIG_JAILHOUSE_GUEST is not set
306303
# CONFIG_ACRN_GUEST is not set
307304
# CONFIG_BHYVE_GUEST is not set
305+
# CONFIG_INTEL_TDX_GUEST is not set
308306
CONFIG_CC_HAS_MARCH_NATIVE=y
309307
# CONFIG_X86_NATIVE_CPU is not set
310308
CONFIG_X86_INTERNODE_CACHE_SHIFT=6
@@ -356,6 +354,7 @@ CONFIG_MICROCODE=y
356354
CONFIG_X86_MSR=y
357355
# CONFIG_X86_CPUID is not set
358356
CONFIG_X86_DIRECT_GBPAGES=y
357+
# CONFIG_AMD_MEM_ENCRYPT is not set
359358
CONFIG_NUMA=y
360359
CONFIG_AMD_NUMA=y
361360
CONFIG_NODES_SHIFT=6
@@ -410,26 +409,16 @@ CONFIG_X86_BUS_LOCK_DETECT=y
410409
CONFIG_CC_HAS_NAMED_AS=y
411410
CONFIG_CC_HAS_NAMED_AS_FIXED_SANITIZERS=y
412411
CONFIG_USE_X86_SEG_SUPPORT=y
413-
CONFIG_CC_HAS_SLS=y
414412
CONFIG_CC_HAS_RETURN_THUNK=y
415413
CONFIG_CC_HAS_ENTRY_PADDING=y
416414
CONFIG_FUNCTION_PADDING_CFI=11
417415
CONFIG_FUNCTION_PADDING_BYTES=16
418-
CONFIG_CALL_PADDING=y
419-
CONFIG_HAVE_CALL_THUNKS=y
420-
CONFIG_CALL_THUNKS=y
421-
CONFIG_PREFIX_SYMBOLS=y
422416
CONFIG_CPU_MITIGATIONS=y
423417
# CONFIG_MITIGATION_PAGE_TABLE_ISOLATION is not set
424418
CONFIG_MITIGATION_RETPOLINE=y
425419
# CONFIG_MITIGATION_RETHUNK is not set
426-
# CONFIG_MITIGATION_UNRET_ENTRY is not set
427-
# CONFIG_MITIGATION_CALL_DEPTH_TRACKING is not set
428-
# CONFIG_CALL_THUNKS_DEBUG is not set
429420
CONFIG_MITIGATION_IBPB_ENTRY=y
430421
CONFIG_MITIGATION_IBRS_ENTRY=y
431-
# CONFIG_MITIGATION_SRSO is not set
432-
# CONFIG_MITIGATION_SLS is not set
433422
# CONFIG_MITIGATION_GDS is not set
434423
# CONFIG_MITIGATION_RFDS is not set
435424
# CONFIG_MITIGATION_SPECTRE_BHI is not set
@@ -442,7 +431,6 @@ CONFIG_MITIGATION_IBRS_ENTRY=y
442431
# CONFIG_MITIGATION_SPECTRE_V2 is not set
443432
# CONFIG_MITIGATION_SRBDS is not set
444433
# CONFIG_MITIGATION_SSB is not set
445-
# CONFIG_MITIGATION_ITS is not set
446434
# CONFIG_MITIGATION_TSA is not set
447435
CONFIG_ARCH_HAS_ADD_PAGES=y
448436

@@ -471,7 +459,6 @@ CONFIG_ARCH_SUPPORTS_ACPI=y
471459
# Bus options (PCI etc.)
472460
#
473461
CONFIG_PCI_DIRECT=y
474-
# CONFIG_PCI_CNB20LE_QUIRK is not set
475462
# CONFIG_ISA_BUS is not set
476463
# CONFIG_ISA_DMA_API is not set
477464
CONFIG_AMD_NB=y
@@ -508,6 +495,9 @@ CONFIG_X86_DISABLED_FEATURE_CENTAUR_MCR=y
508495
CONFIG_X86_DISABLED_FEATURE_PKU=y
509496
CONFIG_X86_DISABLED_FEATURE_OSPKE=y
510497
CONFIG_X86_DISABLED_FEATURE_PTI=y
498+
CONFIG_X86_DISABLED_FEATURE_RETHUNK=y
499+
CONFIG_X86_DISABLED_FEATURE_UNRET=y
500+
CONFIG_X86_DISABLED_FEATURE_CALL_DEPTH=y
511501
CONFIG_X86_DISABLED_FEATURE_LAM=y
512502
CONFIG_X86_DISABLED_FEATURE_ENQCMD=y
513503
CONFIG_X86_DISABLED_FEATURE_SGX=y
@@ -544,6 +534,7 @@ CONFIG_JUMP_LABEL=y
544534
# CONFIG_STATIC_CALL_SELFTEST is not set
545535
CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
546536
CONFIG_ARCH_USE_BUILTIN_BSWAP=y
537+
CONFIG_USER_RETURN_NOTIFIER=y
547538
CONFIG_HAVE_IOREMAP_PROT=y
548539
CONFIG_HAVE_KPROBES=y
549540
CONFIG_HAVE_KRETPROBES=y
@@ -1909,16 +1900,9 @@ CONFIG_DEFAULT_SECURITY_DAC=y
19091900
#
19101901
# Memory initialization
19111902
#
1912-
CONFIG_CC_HAS_AUTO_VAR_INIT_PATTERN=y
1913-
CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO_BARE=y
1914-
CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO=y
19151903
CONFIG_INIT_STACK_NONE=y
1916-
# CONFIG_INIT_STACK_ALL_PATTERN is not set
1917-
# CONFIG_INIT_STACK_ALL_ZERO is not set
19181904
# CONFIG_INIT_ON_ALLOC_DEFAULT_ON is not set
19191905
# CONFIG_INIT_ON_FREE_DEFAULT_ON is not set
1920-
CONFIG_CC_HAS_ZERO_CALL_USED_REGS=y
1921-
# CONFIG_ZERO_CALL_USED_REGS is not set
19221906
# end of Memory initialization
19231907

19241908
#
@@ -2213,7 +2197,6 @@ CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT=y
22132197
# CONFIG_DEBUG_INFO_REDUCED is not set
22142198
CONFIG_DEBUG_INFO_COMPRESSED_NONE=y
22152199
# CONFIG_DEBUG_INFO_COMPRESSED_ZLIB is not set
2216-
# CONFIG_DEBUG_INFO_COMPRESSED_ZSTD is not set
22172200
# CONFIG_DEBUG_INFO_SPLIT is not set
22182201
CONFIG_GDB_SCRIPTS=y
22192202
CONFIG_FRAME_WARN=2048
@@ -2242,8 +2225,6 @@ CONFIG_HAVE_ARCH_KGDB=y
22422225
CONFIG_ARCH_HAS_UBSAN=y
22432226
# CONFIG_UBSAN is not set
22442227
CONFIG_HAVE_ARCH_KCSAN=y
2245-
CONFIG_HAVE_KCSAN_COMPILER=y
2246-
# CONFIG_KCSAN is not set
22472228
# end of Generic Kernel Debugging Instruments
22482229

22492230
#

arch/x86/include/asm/apic.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -241,6 +241,12 @@ static inline u64 native_x2apic_icr_read(void)
241241
return val;
242242
}
243243

244+
#if defined(CONFIG_AMD_SECURE_AVIC)
245+
extern void x2apic_savic_init_backing_page(void *backing_page);
246+
#else
247+
static inline void x2apic_savic_init_backing_page(void *backing_page) {}
248+
#endif
249+
244250
extern int x2apic_mode;
245251
extern int x2apic_phys;
246252
extern void __init x2apic_set_max_apicid(u32 apicid);

arch/x86/include/asm/sev.h

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,12 @@ struct rmp_state {
141141
u32 asid;
142142
} __packed;
143143

144-
#define RMPADJUST_VMSA_PAGE_BIT BIT(16)
144+
/* Target VMPL takes the first byte */
145+
#define RMPADJUST_ENABLE_READ BIT(8)
146+
#define RMPADJUST_ENABLE_WRITE BIT(9)
147+
#define RMPADJUST_USER_EXECUTE BIT(10)
148+
#define RMPADJUST_KERNEL_EXECUTE BIT(11)
149+
#define RMPADJUST_VMSA_PAGE_BIT BIT(16)
145150

146151
/* SNP Guest message request */
147152
struct snp_req_data {

arch/x86/include/asm/svm.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,9 @@ struct __attribute__ ((__packed__)) vmcb_control_area {
190190
#define V_GIF_SHIFT 9
191191
#define V_GIF_MASK (1 << V_GIF_SHIFT)
192192

193+
#define V_INT_SHADOW_SHIFT 10
194+
#define V_INT_SHADOW_MASK (1 << V_INT_SHADOW_SHIFT)
195+
193196
#define V_NMI_PENDING_SHIFT 11
194197
#define V_NMI_PENDING_MASK (1 << V_NMI_PENDING_SHIFT)
195198

@@ -202,6 +205,9 @@ struct __attribute__ ((__packed__)) vmcb_control_area {
202205
#define V_IGN_TPR_SHIFT 20
203206
#define V_IGN_TPR_MASK (1 << V_IGN_TPR_SHIFT)
204207

208+
#define V_GUEST_BUSY_SHIFT 63
209+
#define V_GUEST_BUSY_MASK (1ULL << V_GUEST_BUSY_SHIFT)
210+
205211
#define V_IRQ_INJECTION_BITS_MASK (V_IRQ_MASK | V_INTR_PRIO_MASK | V_IGN_TPR_MASK)
206212

207213
#define V_INTR_MASKING_SHIFT 24

arch/x86/kernel/apic/x2apic_savic.c

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -331,6 +331,18 @@ static void savic_eoi(void)
331331
}
332332
}
333333

334+
void x2apic_savic_init_backing_page(void *ap)
335+
{
336+
u32 apic_id;
337+
338+
/*
339+
* Before Secure AVIC is enabled, APIC msr reads are intercepted.
340+
* APIC_ID msr read returns the value from the Hypervisor.
341+
*/
342+
apic_id = native_apic_msr_read(APIC_ID);
343+
apic_set_reg(ap, APIC_ID, apic_id);
344+
}
345+
334346
static void savic_teardown(void)
335347
{
336348
/* Disable Secure AVIC */
@@ -348,12 +360,7 @@ static void savic_setup(void)
348360
if (!cc_platform_has(CC_ATTR_SNP_SECURE_AVIC))
349361
return;
350362

351-
/*
352-
* Before Secure AVIC is enabled, APIC MSR reads are intercepted.
353-
* APIC_ID MSR read returns the value from the hypervisor.
354-
*/
355-
apic_set_reg(ap, APIC_ID, native_apic_msr_read(APIC_ID));
356-
363+
x2apic_savic_init_backing_page(ap);
357364
gpa = __pa(ap);
358365

359366
gfn = gpa >> PAGE_SHIFT;

0 commit comments

Comments
 (0)