Paolo,
I debugged and found, x86_cpu_xsave_xcr0_components() retuen 0, although it can 
solve problem, but XCR0 bit 0 also is 0, 
this is not correct. Because Intel manual Requirements : " XCR0.X87 (bit 0): 
This bit 0 must be 1. An attempt to write 0 to this bit causes a #GP exception. 
" (2.6 EXTENDED CONTROL REGISTERS (INCLUDING XCR0)).

> -----邮件原件-----
> 发件人: yuchen (Cloud)
> 发送时间: 2023年5月20日 9:58
> 收件人: 'Paolo Bonzini' <pbonz...@redhat.com>;
> 'qemu-devel@nongnu.org' <qemu-devel@nongnu.org>
> 抄送: 'r...@twiddle.net' <r...@twiddle.net>; 'ehabk...@redhat.com'
> <ehabk...@redhat.com>; 'Dongli Zhang' <dongli.zh...@oracle.com>
> 主题: 回复: 回复: [PATCH] target/i386: Clear xsave pkru bit when KVM
> XCR0 not support
> 
> Paolo, thanks,
> The kernel patch can solve this problem. But it is difficult to upgrade the
> kernel in some production environments, and upgrading qemu is easy.
> This patch is just to sync qemu with kvm XSAVE features, no negative
> impact.
> At the same time, it increases the compatibility of qemu to kernel and
> improves the robustness of qemu.
> 
> > -----邮件原件-----
> > 发件人: Paolo Bonzini <pbonz...@redhat.com>
> > 发送时间: 2023年5月20日 1:37
> > 收件人: yuchen (Cloud) <yu.c...@h3c.com>
> > 主题: Re: 回复: [PATCH] target/i386: Clear xsave pkru bit when KVM
> > XCR0 not support
> >
> > On 5/18/23 14:37, Yuchen wrote:
> > > Yes, because x86_cpu_xsave_all_areas() can get the correct XSAVE
> > features.
> >
> > If you tested it, I can post the patch as a workaround.  However, the
> > kernel bug has been fixed too.
> >
> > Paolo
> >
> > >> -----邮件原件-----
> > >> 发件人: Paolo Bonzini <pbonz...@redhat.com>
> > >> 发送时间: 2023年5月18日 1:08
> > >> 收件人: yuchen (Cloud) <yu.c...@h3c.com>;
> > qemu-devel@nongnu.org
> > >> 抄送: r...@twiddle.net; ehabk...@redhat.com; chengchiwen
> (Cloud)
> > >> <chengchi...@h3c.com>
> > >> 主题: Re: [PATCH] target/i386: Clear xsave pkru bit when KVM XCR0
> > not
> > >> support
> > >>
> > >> On 5/17/23 12:55, Yuchen wrote:
> > >>> Migrating guest from Intel new CPU (as Gold 6230) to old CPU (as
> > >>> E5-2650 v4) will pause on the destination host. Because old CPU
> > >>> not support xsave pkru feature, and KVM KVM_SET_XSAVE ioctl
> return
> > >> EINVAL.
> > >>>
> > >>> This kernel commit introduces the problem:
> > >>>
> > >>> ea4d6938d4c0 x86/fpu: Replace KVMs home brewed FPU copy
> from
> > >> user
> > >>>
> > >>> Signed-off-by: YuChen <yu.c...@h3c.com>
> > >>
> > >> Would this work instead?
> > >>
> > >> diff --git a/target/i386/xsave_helper.c
> > >> b/target/i386/xsave_helper.c index 996e9f3bfef5..d3e5edad2ecd
> > >> 100644
> > >> --- a/target/i386/xsave_helper.c
> > >> +++ b/target/i386/xsave_helper.c
> > >> @@ -47,7 +47,7 @@ void x86_cpu_xsave_all_areas(X86CPU *cpu,
> > void
> > >> *buf, uint32_t buflen)
> > >>            stq_p(xmm + 8, env->xmm_regs[i].ZMM_Q(1));
> > >>        }
> > >>
> > >> -    header->xstate_bv = env->xstate_bv;
> > >> +    header->xstate_bv = env->xstate_bv &
> > >> + x86_cpu_xsave_xcr0_components(cpu);
> > >>
> > >>        e = &x86_ext_save_areas[XSTATE_YMM_BIT];
> > >>        if (e->size && e->offset) {
> > >>
> > >> Paolo
> > >
> > > --------------------------------------------------------------------
> > > --
> > > ---------------------------------------------------------------
> > > 本邮件及其附件含有新华三集团的保密信息,仅限于发送给上面地
> 址
> > 中列出
> > > 的个人或群组。禁止任何其他人以任何形式使用(包括但不限于全
> 部
> > 或部分地泄露、复制、
> > > 或散发)本邮件中的信息。如果您错收了本邮件,请您立即电话或
> 邮
> > 件通知发件人并删除本
> > > 邮件!
> > > This e-mail and its attachments contain confidential information
> > > from New H3C, which is intended only for the person or entity whose
> > > address is listed above. Any use of the information contained herein
> > > in any way (including, but not limited to, total or partial
> > > disclosure, reproduction, or dissemination) by persons other than
> > > the intended
> > > recipient(s) is prohibited. If you receive this e-mail in error,
> > > please notify the sender by phone or email immediately and delete it!

Reply via email to