Re: [PATCH 0/2] KVM: x86 emulator: emulate MOVAPS and MOVAPD SSE instructions
Il 17/03/2014 18:38, H. Peter Anvin ha scritto: I'm not sure what you mean with "valid real mode selectors"; the normal case in big real mode is that either CS = SS = 0 or CS = SS = . I mean "valid according to the VMX spec" for running in vm86 mode: base = selector << 4, limit = 0x, access rights = 0xf3. If a segment does not follow the rules, but CS does, we could run the guest normally and trap memory accesses to KVM. Paolo -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 0/2] KVM: x86 emulator: emulate MOVAPS and MOVAPD SSE instructions
Il 17/03/2014 18:38, H. Peter Anvin ha scritto: I'm not sure what you mean with valid real mode selectors; the normal case in big real mode is that either CS = SS = 0 or CS = SS = some program base address. I mean valid according to the VMX spec for running in vm86 mode: base = selector 4, limit = 0x, access rights = 0xf3. If a segment does not follow the rules, but CS does, we could run the guest normally and trap memory accesses to KVM. Paolo -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 0/2] KVM: x86 emulator: emulate MOVAPS and MOVAPD SSE instructions
On 03/17/2014 10:01 AM, Paolo Bonzini wrote: > the emulator). > > If CS and possibly SS are valid real mode selectors, it should be > possible to run big real mode at almost-full speed, taking exits only > for memory accesses via other segment registers. It is on my todo list, > but not very high. Depending on the exit overhead, it may be a better > idea to revert the emulate_invalid_guest_state default to N and let > people who care about big real mode specify Y. > I'm not sure what you mean with "valid real mode selectors"; the normal case in big real mode is that either CS = SS = 0 or CS = SS = . As Big Real Mode is part of the spec for certain things (option ROMs, as we discussed) it probably matters, but especially with the CPUs not supporting unrestricted mode fading into history I suspect it is fine for BRM to be slow on those older processors. The PM transitions that you mentioned are usually only a handful of instructions and thus can be slow. -hpa -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 0/2] KVM: x86 emulator: emulate MOVAPS and MOVAPD SSE instructions
Il 17/03/2014 16:16, H. Peter Anvin ha scritto: After seeing the sheer number of one-off additions, I'm wondering if going through the opcode map systematically and see what is still missing might not be a bad idea. Memory access instructions always need emulation, but there aren't that many left. There are some, such as MOVUPS/MOVUPD. However, this is not the only use of emulation. The problem stems from pre-Westmere Intel chips that didn't have unrestricted mode virtualization. For these chips, you need to emulate all instructions that might be used in protected mode transitions and also, possibly, in big real mode. In practice you will rarely see big real mode (the main exception is option ROMs, due to PMM), still every OS likes to do something different in their protected mode transitions so this is the source of most one-off additions that you have seen. Until around 3.6, KVM used to transform big real mode into a "good" real mode that the processor would like, while breaking completely in big real mode; this is now emulate_invalid_guest_state=N. Nowadays, it uses emulation, which is emulate_invalid_guest_state=Y. As you can imagine it's quite slow (though some performance can certainly be scraped off the emulator). If CS and possibly SS are valid real mode selectors, it should be possible to run big real mode at almost-full speed, taking exits only for memory accesses via other segment registers. It is on my todo list, but not very high. Depending on the exit overhead, it may be a better idea to revert the emulate_invalid_guest_state default to N and let people who care about big real mode specify Y. Paolo On March 17, 2014 2:30:43 AM PDT, Paolo Bonzini wrote: Il 15/03/2014 23:42, H. Peter Anvin ha scritto: Stupid question... what instructions do NOT need emulsion in KVM? It would seem that at least anything that touches memory would? Yes, indeed. Anything that touches memory can be used on MMIO and then needs emulation. Paolo On March 15, 2014 1:01:58 PM PDT, Igor Mammedov wrote: MS HCK test fails on 32-bit Windows 8.1 due to missing MOVAPS instruction emulation, this series adds it and while at it, it adds emulation of MOVAPD which is trivial to implement on top of MOVAPS. Igor Mammedov (2): KVM: x86 emulator: emulate MOVAPS KVM: x86 emulator: emulate MOVAPD arch/x86/kvm/emulate.c | 8 +++- 1 file changed, 7 insertions(+), 1 deletion(-) -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 0/2] KVM: x86 emulator: emulate MOVAPS and MOVAPD SSE instructions
After seeing the sheer number of one-off additions, I'm wondering if going through the opcode map systematically and see what is still missing might not be a bad idea. On March 17, 2014 2:30:43 AM PDT, Paolo Bonzini wrote: >Il 15/03/2014 23:42, H. Peter Anvin ha scritto: >> Stupid question... what instructions do NOT need emulsion in KVM? It >would seem that at least anything that touches memory would? > >Yes, indeed. Anything that touches memory can be used on MMIO and then > >needs emulation. > >Paolo > >> On March 15, 2014 1:01:58 PM PDT, Igor Mammedov >wrote: >>> MS HCK test fails on 32-bit Windows 8.1 due to missing MOVAPS >>> instruction emulation, this series adds it and while at it, >>> it adds emulation of MOVAPD which is trivial to implement on >>> top of MOVAPS. >>> >>> Igor Mammedov (2): >>> KVM: x86 emulator: emulate MOVAPS >>> KVM: x86 emulator: emulate MOVAPD >>> >>> arch/x86/kvm/emulate.c | 8 +++- >>> 1 file changed, 7 insertions(+), 1 deletion(-) >> -- Sent from my mobile phone. Please pardon brevity and lack of formatting. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 0/2] KVM: x86 emulator: emulate MOVAPS and MOVAPD SSE instructions
Il 15/03/2014 23:39, H. Peter Anvin ha scritto: MOVAPS, MOVAPD, and MOVDQA are the same operation. They may, architecturally, have different performance characteristics, but nothing that would affect an emulator. In fact MOVAPS and MOVAPD are implemented the same way in this patch: I(Aligned, em_mov), I(Aligned, em_mov), N, N, These are respectively for no prefix, 0x66, 0xf2 and 0xf3. MOVDQA was already implemented, but on AMD some memcpy implementations use MOVAPS because it's a byte shorter. Paolo On March 15, 2014 1:01:58 PM PDT, Igor Mammedov wrote: MS HCK test fails on 32-bit Windows 8.1 due to missing MOVAPS instruction emulation, this series adds it and while at it, it adds emulation of MOVAPD which is trivial to implement on top of MOVAPS. Igor Mammedov (2): KVM: x86 emulator: emulate MOVAPS KVM: x86 emulator: emulate MOVAPD arch/x86/kvm/emulate.c | 8 +++- 1 file changed, 7 insertions(+), 1 deletion(-) -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 0/2] KVM: x86 emulator: emulate MOVAPS and MOVAPD SSE instructions
Il 15/03/2014 21:01, Igor Mammedov ha scritto: MS HCK test fails on 32-bit Windows 8.1 due to missing MOVAPS instruction emulation, this series adds it and while at it, it adds emulation of MOVAPD which is trivial to implement on top of MOVAPS. Igor Mammedov (2): KVM: x86 emulator: emulate MOVAPS KVM: x86 emulator: emulate MOVAPD arch/x86/kvm/emulate.c | 8 +++- 1 file changed, 7 insertions(+), 1 deletion(-) Applied both to kvm/next, thanks. Paolo -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 0/2] KVM: x86 emulator: emulate MOVAPS and MOVAPD SSE instructions
Il 15/03/2014 23:42, H. Peter Anvin ha scritto: Stupid question... what instructions do NOT need emulsion in KVM? It would seem that at least anything that touches memory would? Yes, indeed. Anything that touches memory can be used on MMIO and then needs emulation. Paolo On March 15, 2014 1:01:58 PM PDT, Igor Mammedov wrote: MS HCK test fails on 32-bit Windows 8.1 due to missing MOVAPS instruction emulation, this series adds it and while at it, it adds emulation of MOVAPD which is trivial to implement on top of MOVAPS. Igor Mammedov (2): KVM: x86 emulator: emulate MOVAPS KVM: x86 emulator: emulate MOVAPD arch/x86/kvm/emulate.c | 8 +++- 1 file changed, 7 insertions(+), 1 deletion(-) -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 0/2] KVM: x86 emulator: emulate MOVAPS and MOVAPD SSE instructions
Il 15/03/2014 23:42, H. Peter Anvin ha scritto: Stupid question... what instructions do NOT need emulsion in KVM? It would seem that at least anything that touches memory would? Yes, indeed. Anything that touches memory can be used on MMIO and then needs emulation. Paolo On March 15, 2014 1:01:58 PM PDT, Igor Mammedov imamm...@redhat.com wrote: MS HCK test fails on 32-bit Windows 8.1 due to missing MOVAPS instruction emulation, this series adds it and while at it, it adds emulation of MOVAPD which is trivial to implement on top of MOVAPS. Igor Mammedov (2): KVM: x86 emulator: emulate MOVAPS KVM: x86 emulator: emulate MOVAPD arch/x86/kvm/emulate.c | 8 +++- 1 file changed, 7 insertions(+), 1 deletion(-) -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 0/2] KVM: x86 emulator: emulate MOVAPS and MOVAPD SSE instructions
Il 15/03/2014 21:01, Igor Mammedov ha scritto: MS HCK test fails on 32-bit Windows 8.1 due to missing MOVAPS instruction emulation, this series adds it and while at it, it adds emulation of MOVAPD which is trivial to implement on top of MOVAPS. Igor Mammedov (2): KVM: x86 emulator: emulate MOVAPS KVM: x86 emulator: emulate MOVAPD arch/x86/kvm/emulate.c | 8 +++- 1 file changed, 7 insertions(+), 1 deletion(-) Applied both to kvm/next, thanks. Paolo -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 0/2] KVM: x86 emulator: emulate MOVAPS and MOVAPD SSE instructions
Il 15/03/2014 23:39, H. Peter Anvin ha scritto: MOVAPS, MOVAPD, and MOVDQA are the same operation. They may, architecturally, have different performance characteristics, but nothing that would affect an emulator. In fact MOVAPS and MOVAPD are implemented the same way in this patch: I(Aligned, em_mov), I(Aligned, em_mov), N, N, These are respectively for no prefix, 0x66, 0xf2 and 0xf3. MOVDQA was already implemented, but on AMD some memcpy implementations use MOVAPS because it's a byte shorter. Paolo On March 15, 2014 1:01:58 PM PDT, Igor Mammedov imamm...@redhat.com wrote: MS HCK test fails on 32-bit Windows 8.1 due to missing MOVAPS instruction emulation, this series adds it and while at it, it adds emulation of MOVAPD which is trivial to implement on top of MOVAPS. Igor Mammedov (2): KVM: x86 emulator: emulate MOVAPS KVM: x86 emulator: emulate MOVAPD arch/x86/kvm/emulate.c | 8 +++- 1 file changed, 7 insertions(+), 1 deletion(-) -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 0/2] KVM: x86 emulator: emulate MOVAPS and MOVAPD SSE instructions
After seeing the sheer number of one-off additions, I'm wondering if going through the opcode map systematically and see what is still missing might not be a bad idea. On March 17, 2014 2:30:43 AM PDT, Paolo Bonzini pbonz...@redhat.com wrote: Il 15/03/2014 23:42, H. Peter Anvin ha scritto: Stupid question... what instructions do NOT need emulsion in KVM? It would seem that at least anything that touches memory would? Yes, indeed. Anything that touches memory can be used on MMIO and then needs emulation. Paolo On March 15, 2014 1:01:58 PM PDT, Igor Mammedov imamm...@redhat.com wrote: MS HCK test fails on 32-bit Windows 8.1 due to missing MOVAPS instruction emulation, this series adds it and while at it, it adds emulation of MOVAPD which is trivial to implement on top of MOVAPS. Igor Mammedov (2): KVM: x86 emulator: emulate MOVAPS KVM: x86 emulator: emulate MOVAPD arch/x86/kvm/emulate.c | 8 +++- 1 file changed, 7 insertions(+), 1 deletion(-) -- Sent from my mobile phone. Please pardon brevity and lack of formatting. -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 0/2] KVM: x86 emulator: emulate MOVAPS and MOVAPD SSE instructions
Il 17/03/2014 16:16, H. Peter Anvin ha scritto: After seeing the sheer number of one-off additions, I'm wondering if going through the opcode map systematically and see what is still missing might not be a bad idea. Memory access instructions always need emulation, but there aren't that many left. There are some, such as MOVUPS/MOVUPD. However, this is not the only use of emulation. The problem stems from pre-Westmere Intel chips that didn't have unrestricted mode virtualization. For these chips, you need to emulate all instructions that might be used in protected mode transitions and also, possibly, in big real mode. In practice you will rarely see big real mode (the main exception is option ROMs, due to PMM), still every OS likes to do something different in their protected mode transitions so this is the source of most one-off additions that you have seen. Until around 3.6, KVM used to transform big real mode into a good real mode that the processor would like, while breaking completely in big real mode; this is now emulate_invalid_guest_state=N. Nowadays, it uses emulation, which is emulate_invalid_guest_state=Y. As you can imagine it's quite slow (though some performance can certainly be scraped off the emulator). If CS and possibly SS are valid real mode selectors, it should be possible to run big real mode at almost-full speed, taking exits only for memory accesses via other segment registers. It is on my todo list, but not very high. Depending on the exit overhead, it may be a better idea to revert the emulate_invalid_guest_state default to N and let people who care about big real mode specify Y. Paolo On March 17, 2014 2:30:43 AM PDT, Paolo Bonzini pbonz...@redhat.com wrote: Il 15/03/2014 23:42, H. Peter Anvin ha scritto: Stupid question... what instructions do NOT need emulsion in KVM? It would seem that at least anything that touches memory would? Yes, indeed. Anything that touches memory can be used on MMIO and then needs emulation. Paolo On March 15, 2014 1:01:58 PM PDT, Igor Mammedov imamm...@redhat.com wrote: MS HCK test fails on 32-bit Windows 8.1 due to missing MOVAPS instruction emulation, this series adds it and while at it, it adds emulation of MOVAPD which is trivial to implement on top of MOVAPS. Igor Mammedov (2): KVM: x86 emulator: emulate MOVAPS KVM: x86 emulator: emulate MOVAPD arch/x86/kvm/emulate.c | 8 +++- 1 file changed, 7 insertions(+), 1 deletion(-) -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 0/2] KVM: x86 emulator: emulate MOVAPS and MOVAPD SSE instructions
On 03/17/2014 10:01 AM, Paolo Bonzini wrote: the emulator). If CS and possibly SS are valid real mode selectors, it should be possible to run big real mode at almost-full speed, taking exits only for memory accesses via other segment registers. It is on my todo list, but not very high. Depending on the exit overhead, it may be a better idea to revert the emulate_invalid_guest_state default to N and let people who care about big real mode specify Y. I'm not sure what you mean with valid real mode selectors; the normal case in big real mode is that either CS = SS = 0 or CS = SS = some program base address. As Big Real Mode is part of the spec for certain things (option ROMs, as we discussed) it probably matters, but especially with the CPUs not supporting unrestricted mode fading into history I suspect it is fine for BRM to be slow on those older processors. The PM transitions that you mentioned are usually only a handful of instructions and thus can be slow. -hpa -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 0/2] KVM: x86 emulator: emulate MOVAPS and MOVAPD SSE instructions
Stupid question... what instructions do NOT need emulsion in KVM? It would seem that at least anything that touches memory would? On March 15, 2014 1:01:58 PM PDT, Igor Mammedov wrote: >MS HCK test fails on 32-bit Windows 8.1 due to missing MOVAPS >instruction emulation, this series adds it and while at it, >it adds emulation of MOVAPD which is trivial to implement on >top of MOVAPS. > >Igor Mammedov (2): > KVM: x86 emulator: emulate MOVAPS > KVM: x86 emulator: emulate MOVAPD > > arch/x86/kvm/emulate.c | 8 +++- > 1 file changed, 7 insertions(+), 1 deletion(-) -- Sent from my mobile phone. Please pardon brevity and lack of formatting. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 0/2] KVM: x86 emulator: emulate MOVAPS and MOVAPD SSE instructions
MOVAPS, MOVAPD, and MOVDQA are the same operation. They may, architecturally, have different performance characteristics, but nothing that would affect an emulator. On March 15, 2014 1:01:58 PM PDT, Igor Mammedov wrote: >MS HCK test fails on 32-bit Windows 8.1 due to missing MOVAPS >instruction emulation, this series adds it and while at it, >it adds emulation of MOVAPD which is trivial to implement on >top of MOVAPS. > >Igor Mammedov (2): > KVM: x86 emulator: emulate MOVAPS > KVM: x86 emulator: emulate MOVAPD > > arch/x86/kvm/emulate.c | 8 +++- > 1 file changed, 7 insertions(+), 1 deletion(-) -- Sent from my mobile phone. Please pardon brevity and lack of formatting. -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 0/2] KVM: x86 emulator: emulate MOVAPS and MOVAPD SSE instructions
MOVAPS, MOVAPD, and MOVDQA are the same operation. They may, architecturally, have different performance characteristics, but nothing that would affect an emulator. On March 15, 2014 1:01:58 PM PDT, Igor Mammedov imamm...@redhat.com wrote: MS HCK test fails on 32-bit Windows 8.1 due to missing MOVAPS instruction emulation, this series adds it and while at it, it adds emulation of MOVAPD which is trivial to implement on top of MOVAPS. Igor Mammedov (2): KVM: x86 emulator: emulate MOVAPS KVM: x86 emulator: emulate MOVAPD arch/x86/kvm/emulate.c | 8 +++- 1 file changed, 7 insertions(+), 1 deletion(-) -- Sent from my mobile phone. Please pardon brevity and lack of formatting. -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
Re: [PATCH 0/2] KVM: x86 emulator: emulate MOVAPS and MOVAPD SSE instructions
Stupid question... what instructions do NOT need emulsion in KVM? It would seem that at least anything that touches memory would? On March 15, 2014 1:01:58 PM PDT, Igor Mammedov imamm...@redhat.com wrote: MS HCK test fails on 32-bit Windows 8.1 due to missing MOVAPS instruction emulation, this series adds it and while at it, it adds emulation of MOVAPD which is trivial to implement on top of MOVAPS. Igor Mammedov (2): KVM: x86 emulator: emulate MOVAPS KVM: x86 emulator: emulate MOVAPD arch/x86/kvm/emulate.c | 8 +++- 1 file changed, 7 insertions(+), 1 deletion(-) -- Sent from my mobile phone. Please pardon brevity and lack of formatting. -- To unsubscribe from this list: send the line unsubscribe linux-kernel in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/