Re: [PATCH v5 1/2] kvm: x86: Allow userspace to handle emulation errors

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Friday, 2021-05-07 at 07:27:07 -07, Aaron Lewis wrote:

>> > +7.24 KVM_CAP_EXIT_ON_EMULATION_FAILURE
>> > +--------------------------------------
>> > +
>> > +:Architectures: x86
>> > +:Parameters: args[0] whether the feature should be enabled or not
>> > +
>> > +When this capability is enabled the in-kernel instruction emulator packs
>> > +the exit struct of KVM_INTERNAL_ERROR with the instruction length and
>> > +instruction bytes when an error occurs while emulating an instruction.  This
>> > +will also happen when the emulation type is set to EMULTYPE_SKIP, but with this
>> > +capability enabled this becomes the default behavior regarless of how the
>>
>> s/regarless/regardless/
>>
>> > +emulation type is set unless it is a VMware #GP; in that case a #GP is injected
>> > +and KVM does not exit to userspace.
>> > +
>> > +When this capability is enabled use the emulation_failure struct instead of the
>> > +internal struct for the exit struct.  They have the same layout, but the
>> > +emulation_failure struct matches the content better.  It also explicitly defines
>> > +the 'flags' field which is used to describe the fields in the struct that are
>> > +valid (ie: if KVM_INTERNAL_ERROR_EMULATION_FLAG_INSTRUCTION_BYTES is set in the
>> > +'flags' field then 'insn_size' and 'insn_bytes' has valid data in them.)
>>
>> Starting both paragraphs with "With this capability enabled..." would
>> probably cause me to stop reading if I didn't enable the capability, but
>> as the first paragraph goes on to say, EMULTYPE_SKIP will also cause the
>> instruction to be provided.
>>
>
> What about this instead?

Reads better to me, thanks.

> When this capability is enabled, an emulation failure will result in an exit
> to userspace with KVM_INTERNAL_ERROR (except when the emulator was invoked
> to handle a VMware backdoor instruction). Furthermore, KVM will now provide up
> to 15 instruction bytes for any exit to userspace resulting from an emulation
> failure.  When these exits to userspace occur use the emulation_failure struct
> instead of the internal struct.  They both have the same layout, but the
> emulation_failure struct matches the content better.  It also explicitly
> defines the 'flags' field which is used to describe the fields in the struct
> that are valid (ie: if KVM_INTERNAL_ERROR_EMULATION_FLAG_INSTRUCTION_BYTES is
> set in the 'flags' field then both 'insn_size' and 'insn_bytes' have valid data
> in them.)
>
> I left out the part about EMULTYPE_SKIP because that behavior is not
> affected by setting KVM_CAP_EXIT_ON_EMULATION_FAILURE, so I thought it
> wasn't needed in the documentation here.

dme.
-- 
We're up all night to get lucky.



[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux