| /linux-6.15/arch/x86/coco/sev/ |
| H A D | shared.c | 193 static __always_inline void vc_ghcb_invalidate(struct ghcb *ghcb) in vc_ghcb_invalidate() argument 196 __builtin_memset(ghcb->save.valid_bitmap, 0, sizeof(ghcb->save.valid_bitmap)); in vc_ghcb_invalidate() 374 static enum es_result sev_es_ghcb_hv_call(struct ghcb *ghcb, in sev_es_ghcb_hv_call() argument 466 return ghcb ? __sev_cpuid_hv_ghcb(ghcb, ctxt, leaf) in sev_cpuid_hv() 580 snp_cpuid_postprocess(struct ghcb *ghcb, struct es_em_ctxt *ctxt, in snp_cpuid_postprocess() argument 1018 sw_scratch = __pa(ghcb) + offsetof(struct ghcb, shared_buffer); in vc_handle_ioio() 1076 static int vc_handle_cpuid_snp(struct ghcb *ghcb, struct es_em_ctxt *ctxt) in vc_handle_cpuid_snp() argument 1095 static enum es_result vc_handle_cpuid(struct ghcb *ghcb, in vc_handle_cpuid() argument 1137 static enum es_result vc_handle_rdtsc(struct ghcb *ghcb, in vc_handle_rdtsc() argument 1158 if (!(ghcb_rax_is_valid(ghcb) && ghcb_rdx_is_valid(ghcb) && in vc_handle_rdtsc() [all …]
|
| H A D | core.c | 146 struct ghcb *ghcb; member 237 struct ghcb *ghcb; in __sev_get_ghcb() local 633 struct ghcb *ghcb; in __sev_put_ghcb() local 659 struct ghcb *ghcb; in svsm_perform_call_protocol() local 696 struct ghcb *ghcb; in __sev_es_nmi_complete() local 735 struct ghcb *ghcb; in get_jump_table_addr() local 854 struct ghcb *ghcb; in __set_pages_state() local 967 struct ghcb *ghcb; in vmgexit_ap_control() local 1219 struct ghcb *ghcb; in snp_kexec_finish() local 1582 struct ghcb *ghcb; in snp_register_per_cpu_ghcb() local [all …]
|
| /linux-6.15/arch/x86/kernel/cpu/ |
| H A D | vmware.c | 549 static void vmware_sev_es_hcall_prepare(struct ghcb *ghcb, in vmware_sev_es_hcall_prepare() argument 553 ghcb_set_rip(ghcb, regs->ip); in vmware_sev_es_hcall_prepare() 554 ghcb_set_rbx(ghcb, regs->bx); in vmware_sev_es_hcall_prepare() 555 ghcb_set_rcx(ghcb, regs->cx); in vmware_sev_es_hcall_prepare() 556 ghcb_set_rdx(ghcb, regs->dx); in vmware_sev_es_hcall_prepare() 557 ghcb_set_rsi(ghcb, regs->si); in vmware_sev_es_hcall_prepare() 558 ghcb_set_rdi(ghcb, regs->di); in vmware_sev_es_hcall_prepare() 559 ghcb_set_rbp(ghcb, regs->bp); in vmware_sev_es_hcall_prepare() 562 static bool vmware_sev_es_hcall_finish(struct ghcb *ghcb, struct pt_regs *regs) in vmware_sev_es_hcall_finish() argument 572 regs->bx = ghcb_get_rbx(ghcb); in vmware_sev_es_hcall_finish() [all …]
|
| H A D | mshyperv.c | 679 static void hv_sev_es_hcall_prepare(struct ghcb *ghcb, struct pt_regs *regs) in hv_sev_es_hcall_prepare() argument 682 ghcb_set_rcx(ghcb, regs->cx); in hv_sev_es_hcall_prepare() 683 ghcb_set_rdx(ghcb, regs->dx); in hv_sev_es_hcall_prepare() 684 ghcb_set_r8(ghcb, regs->r8); in hv_sev_es_hcall_prepare() 687 static bool hv_sev_es_hcall_finish(struct ghcb *ghcb, struct pt_regs *regs) in hv_sev_es_hcall_finish() argument
|
| /linux-6.15/arch/x86/hyperv/ |
| H A D | ivm.c | 32 struct ghcb ghcb; member 100 hv_ghcb->ghcb.ghcb_usage = 0xffffffff; in hv_ghcb_hypercall() 101 memset(hv_ghcb->ghcb.save.valid_bitmap, 0, in hv_ghcb_hypercall() 121 static enum es_result hv_ghcb_hv_call(struct ghcb *ghcb, u64 exit_code, in hv_ghcb_hv_call() argument 125 ghcb->protocol_version = hv_ghcb_version; in hv_ghcb_hv_call() 126 ghcb->ghcb_usage = GHCB_DEFAULT_USAGE; in hv_ghcb_hv_call() 128 ghcb_set_sw_exit_code(ghcb, exit_code); in hv_ghcb_hv_call() 129 ghcb_set_sw_exit_info_1(ghcb, exit_info_1); in hv_ghcb_hv_call() 130 ghcb_set_sw_exit_info_2(ghcb, exit_info_2); in hv_ghcb_hv_call() 204 ghcb_set_rcx(&hv_ghcb->ghcb, msr); in hv_ghcb_msr_write() [all …]
|
| /linux-6.15/arch/x86/boot/compressed/ |
| H A D | sev.c | 29 static struct ghcb boot_ghcb_page __aligned(PAGE_SIZE); 30 struct ghcb *boot_ghcb; 144 struct ghcb *ghcb; in svsm_perform_call_protocol() local 148 ghcb = boot_ghcb; in svsm_perform_call_protocol() 150 ghcb = NULL; in svsm_perform_call_protocol() 153 ret = ghcb ? svsm_perform_ghcb_protocol(ghcb, call) in svsm_perform_call_protocol() 276 static void __noreturn sev_es_ghcb_terminate(struct ghcb *ghcb, unsigned int set, in sev_es_ghcb_terminate() argument 281 vc_ghcb_invalidate(ghcb); in sev_es_ghcb_terminate() 283 ghcb_set_sw_exit_info_1(ghcb, exit_info_1); in sev_es_ghcb_terminate() 284 ghcb_set_sw_exit_info_2(ghcb, exit_info_2); in sev_es_ghcb_terminate() [all …]
|
| /linux-6.15/arch/x86/include/asm/ |
| H A D | svm.h | 507 struct ghcb { struct 582 BUILD_BUG_RESERVED_OFFSET(ghcb, 0xff0); in __unused_size_checks() 646 static __always_inline bool ghcb_##field##_is_valid(const struct ghcb *ghcb) \ 649 (unsigned long *)&ghcb->save.valid_bitmap); \ 652 static __always_inline u64 ghcb_get_##field(struct ghcb *ghcb) \ 654 return ghcb->save.field; \ 657 static __always_inline u64 ghcb_get_##field##_if_valid(struct ghcb *ghcb) \ 659 return ghcb_##field##_is_valid(ghcb) ? ghcb->save.field : 0; \ 662 static __always_inline void ghcb_set_##field(struct ghcb *ghcb, u64 value) \ 665 (unsigned long *)&ghcb->save.valid_bitmap); \ [all …]
|
| H A D | x86_init.h | 5 struct ghcb; 282 void (*sev_es_hcall_prepare)(struct ghcb *ghcb, struct pt_regs *regs); 283 bool (*sev_es_hcall_finish)(struct ghcb *ghcb, struct pt_regs *regs);
|
| /linux-6.15/arch/x86/kernel/ |
| H A D | kvm.c | 989 static void kvm_sev_es_hcall_prepare(struct ghcb *ghcb, struct pt_regs *regs) in kvm_sev_es_hcall_prepare() argument 992 ghcb_set_rbx(ghcb, regs->bx); in kvm_sev_es_hcall_prepare() 993 ghcb_set_rcx(ghcb, regs->cx); in kvm_sev_es_hcall_prepare() 994 ghcb_set_rdx(ghcb, regs->dx); in kvm_sev_es_hcall_prepare() 995 ghcb_set_rsi(ghcb, regs->si); in kvm_sev_es_hcall_prepare() 998 static bool kvm_sev_es_hcall_finish(struct ghcb *ghcb, struct pt_regs *regs) in kvm_sev_es_hcall_finish() argument
|
| /linux-6.15/arch/x86/kvm/svm/ |
| H A D | svm.h | 218 struct ghcb *ghcb; member 587 ghcb_set_sw_exit_info_1(svm->sev_es.ghcb, response); in svm_vmgexit_set_return_code() 588 ghcb_set_sw_exit_info_2(svm->sev_es.ghcb, data); in svm_vmgexit_set_return_code() 834 …static __always_inline u64 kvm_ghcb_get_##field##_if_valid(struct vcpu_svm *svm, struct ghcb *ghcb… 836 return kvm_ghcb_##field##_is_valid(svm) ? ghcb->save.field : 0; \
|
| H A D | sev.c | 3215 struct ghcb *ghcb = svm->sev_es.ghcb; in sev_es_sync_to_ghcb() local 3235 struct ghcb *ghcb = svm->sev_es.ghcb; in sev_es_sync_from_ghcb() local 3253 memcpy(&svm->sev_es.valid_bitmap, &ghcb->save.valid_bitmap, sizeof(ghcb->save.valid_bitmap)); in sev_es_sync_from_ghcb() 3264 vcpu->arch.xcr0 = ghcb_get_xcr0(ghcb); in sev_es_sync_from_ghcb() 3269 exit_code = ghcb_get_sw_exit_code(ghcb); in sev_es_sync_from_ghcb() 3277 memset(ghcb->save.valid_bitmap, 0, sizeof(ghcb->save.valid_bitmap)); in sev_es_sync_from_ghcb() 3294 if (svm->sev_es.ghcb->ghcb_usage) { in sev_es_validate_vmgexit() 3409 svm->sev_es.ghcb->ghcb_usage); in sev_es_validate_vmgexit() 3430 if (!svm->sev_es.ghcb) in sev_es_unmap_ghcb() 3457 svm->sev_es.ghcb = NULL; in sev_es_unmap_ghcb() [all …]
|
| H A D | svm.c | 3044 if (!err || !sev_es_guest(vcpu->kvm) || WARN_ON_ONCE(!svm->sev_es.ghcb)) in svm_complete_emulated_msr()
|
| /linux-6.15/arch/x86/kvm/ |
| H A D | trace.h | 1769 TP_PROTO(unsigned int vcpu_id, struct ghcb *ghcb), 1770 TP_ARGS(vcpu_id, ghcb), 1781 __entry->exit_reason = ghcb->save.sw_exit_code; 1782 __entry->info1 = ghcb->save.sw_exit_info_1; 1783 __entry->info2 = ghcb->save.sw_exit_info_2; 1795 TP_PROTO(unsigned int vcpu_id, struct ghcb *ghcb), 1796 TP_ARGS(vcpu_id, ghcb), 1807 __entry->exit_reason = ghcb->save.sw_exit_code; 1808 __entry->info1 = ghcb->save.sw_exit_info_1; 1809 __entry->info2 = ghcb->save.sw_exit_info_2;
|