On Mon, Apr 28, 2025, Tom Lendacky wrote: > @@ -3184,18 +3189,18 @@ static void dump_ghcb(struct vcpu_svm *svm) > return; > } > > - nbits = sizeof(ghcb->save.valid_bitmap) * 8; > + nbits = sizeof(svm->sev_es.valid_bitmap) * 8; I'm planning on adding this comment to explain the use of KVM's snapshot. Please holler if it's wrong/misleading in any way. /* * Print KVM's snapshot of the GHCB that was (unsuccessfully) used to * handle the exit. If the guest has since modified the GHCB itself, * dumping the raw GHCB won't help debug why KVM was unable to handle * the VMGEXIT that KVM observed. */ > pr_err("GHCB (GPA=%016llx):\n", svm->vmcb->control.ghcb_gpa); > pr_err("%-20s%016llx is_valid: %u\n", "sw_exit_code", > - ghcb->save.sw_exit_code, ghcb_sw_exit_code_is_valid(ghcb)); > + kvm_ghcb_get_sw_exit_code(control), kvm_ghcb_sw_exit_code_is_valid(svm)); > pr_err("%-20s%016llx is_valid: %u\n", "sw_exit_info_1", > - ghcb->save.sw_exit_info_1, ghcb_sw_exit_info_1_is_valid(ghcb)); > + control->exit_info_1, kvm_ghcb_sw_exit_info_1_is_valid(svm)); > pr_err("%-20s%016llx is_valid: %u\n", "sw_exit_info_2", > - ghcb->save.sw_exit_info_2, ghcb_sw_exit_info_2_is_valid(ghcb)); > + control->exit_info_2, kvm_ghcb_sw_exit_info_2_is_valid(svm)); > pr_err("%-20s%016llx is_valid: %u\n", "sw_scratch", > - ghcb->save.sw_scratch, ghcb_sw_scratch_is_valid(ghcb)); > - pr_err("%-20s%*pb\n", "valid_bitmap", nbits, ghcb->save.valid_bitmap); > + svm->sev_es.sw_scratch, kvm_ghcb_sw_scratch_is_valid(svm)); > + pr_err("%-20s%*pb\n", "valid_bitmap", nbits, svm->sev_es.valid_bitmap); > }