Home
last modified time | relevance | path

Searched refs:ghcb (Results 1 – 12 of 12) sorted by relevance

/linux/arch/x86/coco/sev/
H A Dnoinstr.c95 struct ghcb *ghcb; in __sev_es_nmi_complete() local
97 ghcb = __sev_get_ghcb(&state); in __sev_es_nmi_complete()
99 vc_ghcb_invalidate(ghcb); in __sev_es_nmi_complete()
100 ghcb_set_sw_exit_code(ghcb, SVM_VMGEXIT_NMI_COMPLETE); in __sev_es_nmi_complete()
101 ghcb_set_sw_exit_info_1(ghcb, 0); in __sev_es_nmi_complete()
102 ghcb_set_sw_exit_info_2(ghcb, 0); in __sev_es_nmi_complete()
104 sev_es_wr_ghcb_msr(__pa_nodebug(ghcb)); in __sev_es_nmi_complete()
116 noinstr struct ghcb *__sev_get_ghcb(struct ghcb_state *state) in __sev_get_ghcb()
119 struct ghcb *ghcb; in __sev_get_ghcb() local
124 ghcb = &data->ghcb_page; in __sev_get_ghcb()
[all …]
H A Dcore.c159 static struct ghcb boot_ghcb_page __bss_decrypted __aligned(PAGE_SIZE);
165 struct ghcb *boot_ghcb __section(".data");
191 struct ghcb *ghcb; in get_jump_table_addr() local
199 ghcb = __sev_get_ghcb(&state); in get_jump_table_addr()
201 vc_ghcb_invalidate(ghcb); in get_jump_table_addr()
202 ghcb_set_sw_exit_code(ghcb, SVM_VMGEXIT_AP_JUMP_TABLE); in get_jump_table_addr()
203 ghcb_set_sw_exit_info_1(ghcb, SVM_VMGEXIT_GET_AP_JUMP_TABLE); in get_jump_table_addr()
204 ghcb_set_sw_exit_info_2(ghcb, 0); in get_jump_table_addr()
206 sev_es_wr_ghcb_msr(__pa(ghcb)); in get_jump_table_addr()
209 if (ghcb_sw_exit_info_1_is_valid(ghcb) && in get_jump_table_addr()
[all …]
/linux/arch/x86/include/asm/
H A Dsev-internal.h10 struct ghcb ghcb_page;
19 struct ghcb backup_ghcb;
46 struct ghcb *ghcb; member
51 struct ghcb *__sev_get_ghcb(struct ghcb_state *state);
65 enum es_result verify_exception_info(struct ghcb *ghcb, struct es_em_ctxt *ctxt);
83 enum es_result sev_es_ghcb_handle_msr(struct ghcb *ghcb, struct es_em_ctxt *ctxt, bool write);
H A Dsvm.h522 struct ghcb { struct
564 BUILD_BUG_ON(sizeof(struct ghcb) != EXPECTED_GHCB_SIZE); in __unused_size_checks()
597 BUILD_BUG_RESERVED_OFFSET(ghcb, 0xff0); in __unused_size_checks()
661 static __always_inline bool ghcb_##field##_is_valid(const struct ghcb *ghcb) \
664 (unsigned long *)&ghcb->save.valid_bitmap); \
667 static __always_inline u64 ghcb_get_##field(struct ghcb *ghcb) \
669 return ghcb->save.field; \
672 static __always_inline u64 ghcb_get_##field##_if_valid(struct ghcb *ghcb) \
674 return ghcb_##field##_is_valid(ghcb) ? ghcb->save.field : 0; \
677 static __always_inline void ghcb_set_##field(struct ghcb *ghcb, u64 value) \
[all …]
H A Dx86_init.h5 struct ghcb;
284 void (*sev_es_hcall_prepare)(struct ghcb *ghcb, struct pt_regs *regs);
285 bool (*sev_es_hcall_finish)(struct ghcb *ghcb, struct pt_regs *regs);
H A Dsev.h539 static __always_inline void vc_ghcb_invalidate(struct ghcb *ghcb) in vc_ghcb_invalidate() argument
541 ghcb->save.sw_exit_code = 0; in vc_ghcb_invalidate()
542 __builtin_memset(ghcb->save.valid_bitmap, 0, sizeof(ghcb->save.valid_bitmap)); in vc_ghcb_invalidate()
564 enum es_result sev_es_ghcb_hv_call(struct ghcb *ghcb,
573 extern struct ghcb *boot_ghcb;
/linux/arch/x86/kernel/cpu/
H A Dvmware.c549 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
564 if (!(ghcb_rbx_is_valid(ghcb) && in vmware_sev_es_hcall_finish()
[all …]
H A Dmshyperv.c744 static void hv_sev_es_hcall_prepare(struct ghcb *ghcb, struct pt_regs *regs) in hv_sev_es_hcall_prepare() argument
747 ghcb_set_rcx(ghcb, regs->cx); in hv_sev_es_hcall_prepare()
748 ghcb_set_rdx(ghcb, regs->dx); in hv_sev_es_hcall_prepare()
749 ghcb_set_r8(ghcb, regs->r8); in hv_sev_es_hcall_prepare()
752 static bool hv_sev_es_hcall_finish(struct ghcb *ghcb, struct pt_regs *regs) in hv_sev_es_hcall_finish() argument
/linux/arch/x86/hyperv/
H A Divm.c35 struct ghcb ghcb; member
91 hv_ghcb->ghcb.protocol_version = GHCB_PROTOCOL_MAX; in hv_ghcb_hypercall()
92 hv_ghcb->ghcb.ghcb_usage = GHCB_USAGE_HYPERV_CALL; in hv_ghcb_hypercall()
103 hv_ghcb->ghcb.ghcb_usage = 0xffffffff; in hv_ghcb_hypercall()
104 memset(hv_ghcb->ghcb.save.valid_bitmap, 0, in hv_ghcb_hypercall()
105 sizeof(hv_ghcb->ghcb.save.valid_bitmap)); in hv_ghcb_hypercall()
124 static enum es_result hv_ghcb_hv_call(struct ghcb *ghcb, u64 exit_code, in hv_ghcb_hv_call() argument
128 ghcb->protocol_version = hv_ghcb_version; in hv_ghcb_hv_call()
129 ghcb->ghcb_usage = GHCB_DEFAULT_USAGE; in hv_ghcb_hv_call()
131 ghcb_set_sw_exit_code(ghcb, exit_code); in hv_ghcb_hv_call()
[all …]
/linux/arch/x86/kernel/
H A Dkvm.c1011 static void kvm_sev_es_hcall_prepare(struct ghcb *ghcb, struct pt_regs *regs) in kvm_sev_es_hcall_prepare() argument
1014 ghcb_set_rbx(ghcb, regs->bx); in kvm_sev_es_hcall_prepare()
1015 ghcb_set_rcx(ghcb, regs->cx); in kvm_sev_es_hcall_prepare()
1016 ghcb_set_rdx(ghcb, regs->dx); in kvm_sev_es_hcall_prepare()
1017 ghcb_set_rsi(ghcb, regs->si); in kvm_sev_es_hcall_prepare()
1020 static bool kvm_sev_es_hcall_finish(struct ghcb *ghcb, struct pt_regs *regs) in kvm_sev_es_hcall_finish() argument
/linux/arch/x86/kvm/
H A Dtrace.h1845 TP_PROTO(unsigned int vcpu_id, struct ghcb *ghcb),
1846 TP_ARGS(vcpu_id, ghcb),
1857 __entry->exit_reason = ghcb->save.sw_exit_code;
1858 __entry->info1 = ghcb->save.sw_exit_info_1;
1859 __entry->info2 = ghcb->save.sw_exit_info_2;
1871 TP_PROTO(unsigned int vcpu_id, struct ghcb *ghcb),
1872 TP_ARGS(vcpu_id, ghcb),
1883 __entry->exit_reason = ghcb->save.sw_exit_code;
1884 __entry->info1 = ghcb->save.sw_exit_info_1;
1885 __entry->info2 = ghcb->save.sw_exit_info_2;
/linux/arch/x86/kvm/svm/
H A Dsev.c3317 struct ghcb *ghcb = svm->sev_es.ghcb; in sev_es_sync_to_ghcb() local
3327 ghcb_set_rax(ghcb, vcpu->arch.regs[VCPU_REGS_RAX]); in sev_es_sync_to_ghcb()
3328 ghcb_set_rbx(ghcb, vcpu->arch.regs[VCPU_REGS_RBX]); in sev_es_sync_to_ghcb()
3329 ghcb_set_rcx(ghcb, vcpu->arch.regs[VCPU_REGS_RCX]); in sev_es_sync_to_ghcb()
3330 ghcb_set_rdx(ghcb, vcpu->arch.regs[VCPU_REGS_RDX]); in sev_es_sync_to_ghcb()
3337 struct ghcb *ghcb = svm->sev_es.ghcb; in sev_es_sync_from_ghcb() local
3354 BUILD_BUG_ON(sizeof(svm->sev_es.valid_bitmap) != sizeof(ghcb->save.valid_bitmap)); in sev_es_sync_from_ghcb()
3355 memcpy(&svm->sev_es.valid_bitmap, &ghcb->save.valid_bitmap, sizeof(ghcb->save.valid_bitmap)); in sev_es_sync_from_ghcb()
3380 memset(ghcb->save.valid_bitmap, 0, sizeof(ghcb->save.valid_bitmap)); in sev_es_sync_from_ghcb()
3397 if (svm->sev_es.ghcb->ghcb_usage) { in sev_es_validate_vmgexit()
[all …]