All of lore.kernel.org
 help / color / mirror / Atom feed
From: Paolo Bonzini <pbonzini@redhat.com>
To: Nadav Amit <nadav.amit@gmail.com>
Cc: Nadav Amit <namit@cs.technion.ac.il>, kvm@vger.kernel.org
Subject: Re: [PATCH 08/21] KVM: x86: Reset FPU state during reset
Date: Thu, 06 Nov 2014 11:44:48 +0100	[thread overview]
Message-ID: <545B5120.3000801@redhat.com> (raw)
In-Reply-To: <F9F361A5-CB6A-4002-921A-707214B56A70@gmail.com>



On 06/11/2014 10:56, Nadav Amit wrote:
> 
>> On Nov 6, 2014, at 11:44, Paolo Bonzini <pbonzini@redhat.com> wrote:
>>
>>
>>
>> On 06/11/2014 10:13, Nadav Amit wrote:
>>>
>>>> On Nov 6, 2014, at 10:58, Paolo Bonzini <pbonzini@redhat.com> wrote:
>>>>
>>>> On 05/11/2014 21:31, Nadav Amit wrote:
>>>>> You are correct, it does not appear clearly in the SDM, but that is what real hardware does.
>>>>> If you look at bochs - http://code.metager.de/source/xref/bochs/bochs/cpu/init.cc - you’ll see they call
>>>>> "BX_CPU_THIS_PTR xcr0.set32(0x1);” regardless to whether it is hardware or software reset (the latter happens on INIT).
>>>>
>>>> Fair enough. :)
>>> Thanks. It is turning harder to find references for the crazy x86 behaviour. :)
>>
>> Indeed, I'll ask Intel to clarify this one too.
>>
>> The crazy thing is that AMD doesn't say anything, either!  Their own 
>> manual just says "Hardware initializes XCR0 to 0000_0000_0000_0001h", 
>> but it doesn't say when.
> I know. I looked at their manual too.
> 
>>
>>>> Does the patch in
>>>> http://permalink.gmane.org/gmane.comp.emulators.kvm.devel/129060 look good?
>>>
>>> Yes. However, re-reviewing the patches both my patch and yours actually do something slightly different than the spec: they clear XMM8-15 and YMM[128:…] which should not happen on INIT according to the spec.
>>
>> Yes, my patch just wanted to have the same effect as yours, but 
>> fpu_finit must remain in fx_alloc.  Setting cr0 is also unnecessary, 
>> since vmx_vcpu_reset and svm_vcpu_reset both do this.
>>
>>> Fixing it might be a bit intrusive. What do you say?
>>
>> I think it's easy if we start with my version of the change:
>>
>> diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
>> index dc932d388c43..aba13df4e0ec 100644
>> --- a/arch/x86/include/asm/kvm_host.h
>> +++ b/arch/x86/include/asm/kvm_host.h
>> @@ -915,8 +915,6 @@ void kvm_pic_clear_all(struct kvm_pic *pic, int irq_source_id);
>>
>> void kvm_inject_nmi(struct kvm_vcpu *vcpu);
>>
>> -int fx_init(struct kvm_vcpu *vcpu);
>> -
>> void kvm_mmu_pte_write(struct kvm_vcpu *vcpu, gpa_t gpa,
>> 		       const u8 *new, int bytes);
>> int kvm_mmu_unprotect_page(struct kvm *kvm, gfn_t gfn);
>> diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
>> index e0260ccd78a4..0ef4c0b27248 100644
>> --- a/arch/x86/kvm/x86.c
>> +++ b/arch/x86/kvm/x86.c
>> @@ -6868,7 +6868,7 @@ int kvm_arch_vcpu_ioctl_set_fpu(struct kvm_vcpu *vcpu, struct kvm_fpu *fpu)
>> 	return 0;
>> }
>>
>> -int fx_init(struct kvm_vcpu *vcpu)
>> +static int fx_init(struct kvm_vcpu *vcpu)
>> {
>> 	int err;
>>
>> @@ -6878,16 +6878,8 @@ int fx_init(struct kvm_vcpu *vcpu)
>>
>> 	fpu_finit(&vcpu->arch.guest_fpu);
>>
>> -	/*
>> -	 * Ensure guest xcr0 is valid for loading
>> -	 */
>> -	vcpu->arch.xcr0 = XSTATE_FP;
>> -
>> -	vcpu->arch.cr0 |= X86_CR0_ET;
> I think this line was removed by mistake.

It is set already by vmx_vcpu_setup and svm_vcpu_setup.

At startup we always set NW and CD in addition to ET.

Paolo

>> -
>> 	return 0;
>> }
>> -EXPORT_SYMBOL_GPL(fx_init);
>>
>> static void fx_free(struct kvm_vcpu *vcpu)
>> {
>> @@ -7025,6 +7017,11 @@ void kvm_vcpu_reset(struct kvm_vcpu *vcpu)
>> 	vcpu->arch.regs_avail = ~0;
>> 	vcpu->arch.regs_dirty = ~0;
>>
>> +	/*
>> +	 * Ensure guest xcr0 is valid for loading
>> +	 */
>> +	vcpu->arch.xcr0 = XSTATE_FP;
>> +
>> 	kvm_x86_ops->vcpu_reset(vcpu);
>> }
>>
> I’ll give it a shot (in a couple of weeks).
> 
> Thanks,
> Nadav
> 

  reply	other threads:[~2014-11-06 10:44 UTC|newest]

Thread overview: 59+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-11-02  9:54 [PATCH 00/21] Fixes for various KVM bugs Nadav Amit
2014-11-02  9:54 ` [PATCH 01/21] KVM: x86: decode_modrm does not regard modrm correctly Nadav Amit
2014-11-05 11:14   ` Paolo Bonzini
2014-11-02  9:54 ` [PATCH 02/21] KVM: x86: No error-code on real-mode exceptions Nadav Amit
2014-11-02  9:54 ` [PATCH 03/21] KVM: x86: Emulator should set DR6 upon GD like real CPU Nadav Amit
2014-11-02  9:54 ` [PATCH 04/21] KVM: x86: Clear DR6[0:3] on #DB during handle_dr Nadav Amit
2014-11-02  9:54 ` [PATCH 05/21] KVM: x86: Breakpoints do not consider CS.base Nadav Amit
2014-11-02  9:54 ` [PATCH 06/21] KVM: x86: Emulator MOV-sreg uses incorrect size Nadav Amit
2014-11-05 11:28   ` Paolo Bonzini
2014-11-02  9:54 ` [PATCH 07/21] KVM: x86: Emulator considers imm as memory operand Nadav Amit
2014-11-05 11:36   ` Paolo Bonzini
2014-11-02  9:54 ` [PATCH 08/21] KVM: x86: Reset FPU state during reset Nadav Amit
2014-11-05 12:04   ` Paolo Bonzini
2014-11-05 13:20     ` Nadav Amit
2014-11-05 14:55       ` Paolo Bonzini
2014-11-05 20:31         ` Nadav Amit
2014-11-06  8:58           ` Paolo Bonzini
2014-11-06  9:13             ` Nadav Amit
2014-11-06  9:44               ` Paolo Bonzini
2014-11-06  9:56                 ` Nadav Amit
2014-11-06 10:44                   ` Paolo Bonzini [this message]
2014-11-06 17:38                 ` Radim Krčmář
2014-11-02  9:54 ` [PATCH 09/21] KVM: x86: SYSCALL cannot clear eflags[1] Nadav Amit
2014-11-02  9:54 ` [PATCH 10/21] KVM: x86: Wrong flags on CMPS and SCAS emulation Nadav Amit
2014-11-02  9:54 ` [PATCH 11/21] KVM: x86: Emulate push sreg as done in Core Nadav Amit
2014-11-02  9:54 ` [PATCH 12/21] KVM: x86: MOV to CR3 can set bit 63 Nadav Amit
2015-02-10 16:15   ` Jan Kiszka
2015-02-10 16:18     ` Paolo Bonzini
2015-02-10 16:34       ` Jan Kiszka
2015-02-10 16:42         ` Paolo Bonzini
2014-11-02  9:54 ` [PATCH 13/21] KVM: x86: Do not update EFLAGS on faulting emulation Nadav Amit
2014-11-02  9:54 ` [PATCH 14/21] KVM: x86: Software disabled APIC should still deliver NMIs Nadav Amit
2014-11-05 12:30   ` Paolo Bonzini
2014-11-05 20:45     ` Nadav Amit
2014-11-06  9:34       ` Paolo Bonzini
2014-11-06 16:45         ` Radim Krčmář
2014-11-10 17:35           ` Paolo Bonzini
2014-11-10 18:06             ` Radim Krčmář
2014-11-14 15:00           ` Paolo Bonzini
2014-11-26 17:01             ` Nadav Amit
2014-11-26 18:00               ` Paolo Bonzini
2014-11-27 13:39               ` Radim Krčmář
2014-11-27 21:45                 ` Nadav Amit
2014-11-27 22:26                   ` Radim Krčmář
2014-12-01 16:30                     ` Paolo Bonzini
2014-12-01 17:49                       ` Radim Krčmář
2014-11-02  9:54 ` [PATCH 15/21] KVM: x86: Combine the lgdt and lidt emulation logic Nadav Amit
2014-11-02  9:54 ` [PATCH 16/21] KVM: x86: Inject #GP when loading system segments with non-canonical base Nadav Amit
2014-11-02  9:54 ` [PATCH 17/21] KVM: x86: Remove redundant and incorrect cpl check on task-switch Nadav Amit
2014-11-02  9:54 ` [PATCH 18/21] KVM: x86: Emulator mis-decodes VEX instructions on real-mode Nadav Amit
2014-11-08  7:25   ` Paolo Bonzini
2014-11-02  9:54 ` [PATCH 19/21] KVM: x86: Warn on APIC base relocation Nadav Amit
2014-11-02  9:55 ` [PATCH 20/21] KVM: x86: MOVNTI emulation min opsize is not respected Nadav Amit
2014-11-05 12:18   ` Paolo Bonzini
2014-11-05 19:58     ` Nadav Amit
2014-11-05 19:58     ` Nadav Amit
2014-11-06  9:23   ` Paolo Bonzini
2014-11-02  9:55 ` [PATCH 21/21] KVM: x86: Return UNHANDLABLE on unsupported SYSENTER Nadav Amit
2014-11-05 12:31 ` [PATCH 00/21] Fixes for various KVM bugs Paolo Bonzini

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=545B5120.3000801@redhat.com \
    --to=pbonzini@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=nadav.amit@gmail.com \
    --cc=namit@cs.technion.ac.il \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.