On Wed, Mar 4, 2020 at 4:00 PM Vitaly Kuznetsov <vkuznets@xxxxxxxxxx> wrote: > > Jon Doron <arilou@xxxxxxxxx> writes: > > > There is another mode for the synthetic debugger which uses hypercalls > > to send/recv network data instead of the MSR interface. > > > > This interface is much slower and less recommended since you might get > > a lot of VMExits while KDVM polling for new packets to recv, rather > > than simply checking the pending page to see if there is data avialble > > and then request. > > > > Signed-off-by: Jon Doron <arilou@xxxxxxxxx> > > --- > > arch/x86/include/asm/hyperv-tlfs.h | 5 +++++ > > arch/x86/kvm/hyperv.c | 11 +++++++++++ > > 2 files changed, 16 insertions(+) > > > > diff --git a/arch/x86/include/asm/hyperv-tlfs.h b/arch/x86/include/asm/hyperv-tlfs.h > > index 8efdf974c23f..4fa6bf3732a6 100644 > > --- a/arch/x86/include/asm/hyperv-tlfs.h > > +++ b/arch/x86/include/asm/hyperv-tlfs.h > > @@ -283,6 +283,8 @@ > > #define HV_X64_MSR_SYNDBG_PENDING_BUFFER 0x400000F5 > > #define HV_X64_MSR_SYNDBG_OPTIONS 0x400000FF > > > > +#define HV_X64_SYNDBG_OPTION_USE_HCALLS BIT(2) > > + > > BIT(2) of what? :-) Also, you don't seem to use this define anywhere. > Will use it now :) and it's a syndbg MSR option bit > > /* Hyper-V guest crash notification MSR's */ > > #define HV_X64_MSR_CRASH_P0 0x40000100 > > #define HV_X64_MSR_CRASH_P1 0x40000101 > > @@ -392,6 +394,9 @@ struct hv_tsc_emulation_status { > > #define HVCALL_SEND_IPI_EX 0x0015 > > #define HVCALL_POST_MESSAGE 0x005c > > #define HVCALL_SIGNAL_EVENT 0x005d > > +#define HVCALL_POST_DEBUG_DATA 0x0069 > > +#define HVCALL_RETRIEVE_DEBUG_DATA 0x006a > > +#define HVCALL_RESET_DEBUG_SESSION 0x006b > > #define HVCALL_FLUSH_GUEST_PHYSICAL_ADDRESS_SPACE 0x00af > > #define HVCALL_FLUSH_GUEST_PHYSICAL_ADDRESS_LIST 0x00b0 > > > > diff --git a/arch/x86/kvm/hyperv.c b/arch/x86/kvm/hyperv.c > > index 7ec962d433af..593e0f3f4dba 100644 > > --- a/arch/x86/kvm/hyperv.c > > +++ b/arch/x86/kvm/hyperv.c > > @@ -1794,6 +1794,17 @@ int kvm_hv_hypercall(struct kvm_vcpu *vcpu) > > } > > ret = kvm_hv_send_ipi(vcpu, ingpa, outgpa, true, false); > > break; > > + case HVCALL_POST_DEBUG_DATA: > > + case HVCALL_RETRIEVE_DEBUG_DATA: > > + case HVCALL_RESET_DEBUG_SESSION: > > + vcpu->run->exit_reason = KVM_EXIT_HYPERV; > > + vcpu->run->hyperv.type = KVM_EXIT_HYPERV_HCALL; > > + vcpu->run->hyperv.u.hcall.input = param; > > + vcpu->run->hyperv.u.hcall.params[0] = ingpa; > > + vcpu->run->hyperv.u.hcall.params[1] = outgpa; > > + vcpu->arch.complete_userspace_io = > > + kvm_hv_hypercall_complete_userspace; > > + return 0; > > default: > > ret = HV_STATUS_INVALID_HYPERCALL_CODE; > > break; > > -- > Vitaly >