Re: [PATCH] Fixed KVM problems with old DOS programs. Compatibility can be forced by module parameter.

2015-11-05 Thread Gerhard Wiesinger

On 04.11.2015 23:04, Paolo Bonzini wrote:


On 04/11/2015 22:33, Gerhard Wiesinger wrote:

What is the problem you are seeing?  KVM can emulate task switches; the
intercept is set here because of a processor erratum that can mess them
up even though, in theory, AMD supports task switching from guest mode.

See old thread:
https://lists.nongnu.org/archive/html/qemu-devel/2012-04/msg01506.html

Can you obtain the traces you were asked for at the time?


./trace-cmd record -b 2 -e kvm
./trace-cmd report | grep -i task_switch
 qemu-system-x86-6024  [001] 792774.719297: kvm_exit: reason 
task_switch rip 0x4883 info 158 40


But I can't interpret it. But I know my patch works well. Since it is 
just a module parameter it is fully backward compatible by default and 
because of the one liner no side effects are possible. So a intergration 
would be good.


Ciao,
Gerhard

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] Fixed KVM problems with old DOS programs. Compatibility can be forced by module parameter.

2015-11-05 Thread Paolo Bonzini


On 05/11/2015 17:07, Gerhard Wiesinger wrote:
>>
> 
> ./trace-cmd record -b 2 -e kvm
> ./trace-cmd report | grep -i task_switch
>  qemu-system-x86-6024  [001] 792774.719297: kvm_exit: reason task_switch
> rip 0x4883 info 158 40

0x158 is the segment selector of the incoming TSS, and the task switch
was caused by a far jump.

> But I can't interpret it.

Neither can I; you have to send the whole trace.

> But I know my patch works well. Since it is
> just a module parameter it is fully backward compatible by default and
> because of the one liner no side effects are possible. So a intergration
> would be good.

It's also papering over a bug, and likely the bug still triggers on
Intel systems.  So it's not acceptable.

Can you provide reproduction instructions please?

Paolo
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] Fixed KVM problems with old DOS programs. Compatibility can be forced by module parameter.

2015-11-05 Thread Paolo Bonzini


On 05/11/2015 17:15, Paolo Bonzini wrote:
> 
> 
> On 05/11/2015 17:07, Gerhard Wiesinger wrote:
>>>
>>
>> ./trace-cmd record -b 2 -e kvm
>> ./trace-cmd report | grep -i task_switch
>>  qemu-system-x86-6024  [001] 792774.719297: kvm_exit: reason task_switch
>> rip 0x4883 info 158 40
> 
> 0x158 is the segment selector of the incoming TSS, and the task switch
> was caused by a far jump.
> 
>> But I can't interpret it.
> 
> Neither can I; you have to send the whole trace.
> 
>> But I know my patch works well. Since it is
>> just a module parameter it is fully backward compatible by default and
>> because of the one liner no side effects are possible. So a intergration
>> would be good.
> 
> It's also papering over a bug, and likely the bug still triggers on
> Intel systems.  So it's not acceptable.
> 
> Can you provide reproduction instructions please?

At the very least, does it reproduce without KVM?

Paolo
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] Fixed KVM problems with old DOS programs. Compatibility can be forced by module parameter.

2015-11-04 Thread Paolo Bonzini


On 04/11/2015 22:33, Gerhard Wiesinger wrote:
>>>
>> What is the problem you are seeing?  KVM can emulate task switches; the
>> intercept is set here because of a processor erratum that can mess them
>> up even though, in theory, AMD supports task switching from guest mode.
> 
> See old thread:
> https://lists.nongnu.org/archive/html/qemu-devel/2012-04/msg01506.html

Can you obtain the traces you were asked for at the time?

Paolo
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] Fixed KVM problems with old DOS programs. Compatibility can be forced by module parameter.

2015-11-04 Thread Gerhard Wiesinger

On 04.11.2015 22:27, Paolo Bonzini wrote:


On 04/11/2015 20:33, Gerhard Wiesinger wrote:

Signed-off-by: Gerhard Wiesinger 
---
  arch/x86/kvm/svm.c | 7 +++
  1 file changed, 7 insertions(+)

diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
index 2f9ed1f..e0b00fc 100644
--- a/arch/x86/kvm/svm.c
+++ b/arch/x86/kvm/svm.c
@@ -198,6 +198,10 @@ static bool npt_enabled;
  static int npt = true;
  module_param(npt, int, S_IRUGO);
  +/* allow backward compatibility with e.g. old DOS application */
+static int npt_task_switch_emulation = true;
+module_param(npt_task_switch_emulation, int, S_IRUGO);
+
  /* allow nested virtualization in KVM/SVM */
  static int nested = true;
  module_param(nested, int, S_IRUGO);
@@ -1177,6 +1181,9 @@ static void init_vmcb(struct vcpu_svm *svm, bool
init_event)
  if (npt_enabled) {
  /* Setup VMCB for Nested Paging */
  control->nested_ctl = 1;
+if (!npt_task_switch_emulation) {
+clr_intercept(svm, INTERCEPT_TASK_SWITCH);
+}
  clr_intercept(svm, INTERCEPT_INVLPG);
  clr_exception_intercept(svm, PF_VECTOR);
  clr_cr_intercept(svm, INTERCEPT_CR3_READ);

What is the problem you are seeing?  KVM can emulate task switches; the
intercept is set here because of a processor erratum that can mess them
up even though, in theory, AMD supports task switching from guest mode.


See old thread:
https://lists.nongnu.org/archive/html/qemu-devel/2012-04/msg01506.html

Ciao,
Gerhard

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH] Fixed KVM problems with old DOS programs. Compatibility can be forced by module parameter.

2015-11-04 Thread Paolo Bonzini


On 04/11/2015 20:33, Gerhard Wiesinger wrote:
> Signed-off-by: Gerhard Wiesinger 
> ---
>  arch/x86/kvm/svm.c | 7 +++
>  1 file changed, 7 insertions(+)
> 
> diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
> index 2f9ed1f..e0b00fc 100644
> --- a/arch/x86/kvm/svm.c
> +++ b/arch/x86/kvm/svm.c
> @@ -198,6 +198,10 @@ static bool npt_enabled;
>  static int npt = true;
>  module_param(npt, int, S_IRUGO);
>  +/* allow backward compatibility with e.g. old DOS application */
> +static int npt_task_switch_emulation = true;
> +module_param(npt_task_switch_emulation, int, S_IRUGO);
> +
>  /* allow nested virtualization in KVM/SVM */
>  static int nested = true;
>  module_param(nested, int, S_IRUGO);
> @@ -1177,6 +1181,9 @@ static void init_vmcb(struct vcpu_svm *svm, bool
> init_event)
>  if (npt_enabled) {
>  /* Setup VMCB for Nested Paging */
>  control->nested_ctl = 1;
> +if (!npt_task_switch_emulation) {
> +clr_intercept(svm, INTERCEPT_TASK_SWITCH);
> +}
>  clr_intercept(svm, INTERCEPT_INVLPG);
>  clr_exception_intercept(svm, PF_VECTOR);
>  clr_cr_intercept(svm, INTERCEPT_CR3_READ);

What is the problem you are seeing?  KVM can emulate task switches; the
intercept is set here because of a processor erratum that can mess them
up even though, in theory, AMD supports task switching from guest mode.

Paolo
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH] Fixed KVM problems with old DOS programs. Compatibility can be forced by module parameter.

2015-11-04 Thread Gerhard Wiesinger

Signed-off-by: Gerhard Wiesinger 
---
 arch/x86/kvm/svm.c | 7 +++
 1 file changed, 7 insertions(+)

diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
index 2f9ed1f..e0b00fc 100644
--- a/arch/x86/kvm/svm.c
+++ b/arch/x86/kvm/svm.c
@@ -198,6 +198,10 @@ static bool npt_enabled;
 static int npt = true;
 module_param(npt, int, S_IRUGO);
 +/* allow backward compatibility with e.g. old DOS application */
+static int npt_task_switch_emulation = true;
+module_param(npt_task_switch_emulation, int, S_IRUGO);
+
 /* allow nested virtualization in KVM/SVM */
 static int nested = true;
 module_param(nested, int, S_IRUGO);
@@ -1177,6 +1181,9 @@ static void init_vmcb(struct vcpu_svm *svm, bool 
init_event)

if (npt_enabled) {
/* Setup VMCB for Nested Paging */
control->nested_ctl = 1;
+   if (!npt_task_switch_emulation) {
+   clr_intercept(svm, INTERCEPT_TASK_SWITCH);
+   }
clr_intercept(svm, INTERCEPT_INVLPG);
clr_exception_intercept(svm, PF_VECTOR);
clr_cr_intercept(svm, INTERCEPT_CR3_READ);
--
2.4.3

--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html