/Linux-v5.15/arch/x86/kernel/ |
D | sev.c | 37 static struct ghcb boot_ghcb_page __bss_decrypted __aligned(PAGE_SIZE); 43 static struct ghcb __initdata *boot_ghcb; 47 struct ghcb ghcb_page; 66 struct ghcb backup_ghcb; 93 struct ghcb *ghcb; member 200 static noinstr struct ghcb *__sev_get_ghcb(struct ghcb_state *state) in __sev_get_ghcb() 203 struct ghcb *ghcb; in __sev_get_ghcb() local 208 ghcb = &data->ghcb_page; in __sev_get_ghcb() 231 state->ghcb = &data->backup_ghcb; in __sev_get_ghcb() 234 *state->ghcb = *ghcb; in __sev_get_ghcb() [all …]
|
D | sev-shared.c | 64 static __always_inline void vc_ghcb_invalidate(struct ghcb *ghcb) in vc_ghcb_invalidate() argument 66 ghcb->save.sw_exit_code = 0; in vc_ghcb_invalidate() 67 memset(ghcb->save.valid_bitmap, 0, sizeof(ghcb->save.valid_bitmap)); in vc_ghcb_invalidate() 97 static enum es_result sev_es_ghcb_hv_call(struct ghcb *ghcb, in sev_es_ghcb_hv_call() argument 105 ghcb->protocol_version = GHCB_PROTOCOL_MAX; in sev_es_ghcb_hv_call() 106 ghcb->ghcb_usage = GHCB_DEFAULT_USAGE; in sev_es_ghcb_hv_call() 108 ghcb_set_sw_exit_code(ghcb, exit_code); in sev_es_ghcb_hv_call() 109 ghcb_set_sw_exit_info_1(ghcb, exit_info_1); in sev_es_ghcb_hv_call() 110 ghcb_set_sw_exit_info_2(ghcb, exit_info_2); in sev_es_ghcb_hv_call() 112 sev_es_wr_ghcb_msr(__pa(ghcb)); in sev_es_ghcb_hv_call() [all …]
|
D | kvm.c | 815 static void kvm_sev_es_hcall_prepare(struct ghcb *ghcb, struct pt_regs *regs) in kvm_sev_es_hcall_prepare() argument 818 ghcb_set_rbx(ghcb, regs->bx); in kvm_sev_es_hcall_prepare() 819 ghcb_set_rcx(ghcb, regs->cx); in kvm_sev_es_hcall_prepare() 820 ghcb_set_rdx(ghcb, regs->dx); in kvm_sev_es_hcall_prepare() 821 ghcb_set_rsi(ghcb, regs->si); in kvm_sev_es_hcall_prepare() 824 static bool kvm_sev_es_hcall_finish(struct ghcb *ghcb, struct pt_regs *regs) in kvm_sev_es_hcall_finish() argument
|
/Linux-v5.15/arch/x86/kernel/cpu/ |
D | vmware.c | 484 static void vmware_sev_es_hcall_prepare(struct ghcb *ghcb, in vmware_sev_es_hcall_prepare() argument 488 ghcb_set_rip(ghcb, regs->ip); in vmware_sev_es_hcall_prepare() 489 ghcb_set_rbx(ghcb, regs->bx); in vmware_sev_es_hcall_prepare() 490 ghcb_set_rcx(ghcb, regs->cx); in vmware_sev_es_hcall_prepare() 491 ghcb_set_rdx(ghcb, regs->dx); in vmware_sev_es_hcall_prepare() 492 ghcb_set_rsi(ghcb, regs->si); in vmware_sev_es_hcall_prepare() 493 ghcb_set_rdi(ghcb, regs->di); in vmware_sev_es_hcall_prepare() 494 ghcb_set_rbp(ghcb, regs->bp); in vmware_sev_es_hcall_prepare() 497 static bool vmware_sev_es_hcall_finish(struct ghcb *ghcb, struct pt_regs *regs) in vmware_sev_es_hcall_finish() argument 499 if (!(ghcb_rbx_is_valid(ghcb) && in vmware_sev_es_hcall_finish() [all …]
|
/Linux-v5.15/arch/x86/kvm/svm/ |
D | sev.c | 2050 struct ghcb *ghcb = svm->ghcb; in dump_ghcb() local 2059 nbits = sizeof(ghcb->save.valid_bitmap) * 8; in dump_ghcb() 2063 ghcb->save.sw_exit_code, ghcb_sw_exit_code_is_valid(ghcb)); in dump_ghcb() 2065 ghcb->save.sw_exit_info_1, ghcb_sw_exit_info_1_is_valid(ghcb)); in dump_ghcb() 2067 ghcb->save.sw_exit_info_2, ghcb_sw_exit_info_2_is_valid(ghcb)); in dump_ghcb() 2069 ghcb->save.sw_scratch, ghcb_sw_scratch_is_valid(ghcb)); in dump_ghcb() 2070 pr_err("%-20s%*pb\n", "valid_bitmap", nbits, ghcb->save.valid_bitmap); in dump_ghcb() 2076 struct ghcb *ghcb = svm->ghcb; in sev_es_sync_to_ghcb() local 2086 ghcb_set_rax(ghcb, vcpu->arch.regs[VCPU_REGS_RAX]); in sev_es_sync_to_ghcb() 2087 ghcb_set_rbx(ghcb, vcpu->arch.regs[VCPU_REGS_RBX]); in sev_es_sync_to_ghcb() [all …]
|
D | svm.h | 188 struct ghcb *ghcb; member
|
D | svm.c | 2765 if (!err || !sev_es_guest(vcpu->kvm) || WARN_ON_ONCE(!svm->ghcb)) in svm_complete_emulated_msr() 2768 ghcb_set_sw_exit_info_1(svm->ghcb, 1); in svm_complete_emulated_msr() 2769 ghcb_set_sw_exit_info_2(svm->ghcb, in svm_complete_emulated_msr()
|
/Linux-v5.15/arch/x86/include/asm/ |
D | svm.h | 312 struct ghcb { struct 332 BUILD_BUG_ON(sizeof(struct ghcb) != EXPECTED_GHCB_SIZE); in __unused_size_checks() argument 403 static inline bool ghcb_##field##_is_valid(const struct ghcb *ghcb) \ 406 (unsigned long *)&ghcb->save.valid_bitmap); \ 409 static inline u64 ghcb_get_##field(struct ghcb *ghcb) \ 411 return ghcb->save.field; \ 414 static inline u64 ghcb_get_##field##_if_valid(struct ghcb *ghcb) \ 416 return ghcb_##field##_is_valid(ghcb) ? ghcb->save.field : 0; \ 419 static inline void ghcb_set_##field(struct ghcb *ghcb, u64 value) \ 422 (unsigned long *)&ghcb->save.valid_bitmap); \ [all …]
|
D | x86_init.h | 7 struct ghcb; 250 void (*sev_es_hcall_prepare)(struct ghcb *ghcb, struct pt_regs *regs); 251 bool (*sev_es_hcall_finish)(struct ghcb *ghcb, struct pt_regs *regs);
|
/Linux-v5.15/arch/x86/boot/compressed/ |
D | sev.c | 26 struct ghcb boot_ghcb_page __aligned(PAGE_SIZE); 27 struct ghcb *boot_ghcb;
|
/Linux-v5.15/arch/x86/kvm/ |
D | trace.h | 1637 TP_PROTO(unsigned int vcpu_id, struct ghcb *ghcb), 1638 TP_ARGS(vcpu_id, ghcb), 1649 __entry->exit_reason = ghcb->save.sw_exit_code; 1650 __entry->info1 = ghcb->save.sw_exit_info_1; 1651 __entry->info2 = ghcb->save.sw_exit_info_2; 1663 TP_PROTO(unsigned int vcpu_id, struct ghcb *ghcb), 1664 TP_ARGS(vcpu_id, ghcb), 1675 __entry->exit_reason = ghcb->save.sw_exit_code; 1676 __entry->info1 = ghcb->save.sw_exit_info_1; 1677 __entry->info2 = ghcb->save.sw_exit_info_2;
|