[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20161110024748.y2osmwavaohuxem6@wfg-t540p.sh.intel.com>
Date: Thu, 10 Nov 2016 10:47:48 +0800
From: Fengguang Wu <lkp@...el.com>
To: Radim Krčmář <rkrcmar@...hat.com>
Cc: kbuild-all@...org, linux-kernel@...r.kernel.org,
kvm@...r.kernel.org, Paolo Bonzini <pbonzini@...hat.com>,
Bandan Das <bsd@...hat.com>, Nadav Amit <nadav.amit@...il.com>,
Ye Xiaolong <xiaolong.ye@...el.com>
Subject: Re: [PATCH v4] KVM: x86: emulate FXSAVE and FXRSTOR
CC Xiaolong.
On Wed, Nov 09, 2016 at 07:46:28PM +0100, Radim Krčmář wrote:
>2016-11-10 02:42+0800, kbuild test robot:
>> Hi Radim,
>
>And I even replied to the series, so this would happen ...
>Btw. would the tool recognize it if the header was [PATCH v4 4/4]?
>
>> [auto build test ERROR on kvm/linux-next]
>> [also build test ERROR on v4.9-rc4 next-20161109]
>> [if your patch is applied to the wrong git tree, please drop us a note to help improve the system]
>>
>> url: https://github.com/0day-ci/linux/commits/Radim-Kr-m/KVM-x86-emulate-FXSAVE-and-FXRSTOR/20161110-021048
>> base: https://git.kernel.org/pub/scm/virt/kvm/kvm.git linux-next
>> config: x86_64-randconfig-x018-201645 (attached as .config)
>> compiler: gcc-6 (Debian 6.2.0-3) 6.2.0 20160901
>> reproduce:
>> # save the attached .config to linux build tree
>> make ARCH=x86_64
>>
>> All errors (new ones prefixed by >>):
>>
>> arch/x86/kvm/emulate.c: In function 'em_fxsave':
>> >> arch/x86/kvm/emulate.c:3910:7: error: implicit declaration of function 'asm_safe' [-Werror=implicit-function-declaration]
>> rc = asm_safe("fxsave %[fx]", , [fx] "+m"(fx_state));
>> ^~~~~~~~
>> >> arch/x86/kvm/emulate.c:3910:32: error: expected expression before ',' token
>> rc = asm_safe("fxsave %[fx]", , [fx] "+m"(fx_state));
>> ^
>> >> arch/x86/kvm/emulate.c:3910:35: error: 'fx' undeclared (first use in this function)
>> rc = asm_safe("fxsave %[fx]", , [fx] "+m"(fx_state));
>> ^~
>> arch/x86/kvm/emulate.c:3910:35: note: each undeclared identifier is reported only once for each function it appears in
>> arch/x86/kvm/emulate.c: In function 'fxrstor_fixup':
>> arch/x86/kvm/emulate.c:3931:32: error: expected expression before ',' token
>> rc = asm_safe("fxsave %[fx]", , [fx] "+m"(old));
>> ^
>> arch/x86/kvm/emulate.c:3931:35: error: 'fx' undeclared (first use in this function)
>> rc = asm_safe("fxsave %[fx]", , [fx] "+m"(old));
>> ^~
>> arch/x86/kvm/emulate.c: In function 'em_fxrstor':
>> >> arch/x86/kvm/emulate.c:3977:34: error: expected expression before ':' token
>> rc = asm_safe("fxrstor %[fx]", : [fx] "m"(fx_state));
>> ^
>> arch/x86/kvm/emulate.c: At top level:
>> >> arch/x86/kvm/emulate.c:4336:12: error: 'Aligned16' undeclared here (not in a function)
>> I(ModRM | Aligned16, em_fxsave),
>> ^
>> arch/x86/kvm/emulate.c:4185:31: note: in definition of macro 'I'
>> #define I(_f, _e) { .flags = (_f), .u.execute = (_e) }
>> ^~
>> cc1: some warnings being treated as errors
>>
>> vim +/asm_safe +3910 arch/x86/kvm/emulate.c
>>
>> 3904 rc = check_fxsr(ctxt);
>> 3905 if (rc != X86EMUL_CONTINUE)
>> 3906 return rc;
>> 3907
>> 3908 ctxt->ops->get_fpu(ctxt);
>> 3909
>> > 3910 rc = asm_safe("fxsave %[fx]", , [fx] "+m"(fx_state));
>> 3911
>> 3912 ctxt->ops->put_fpu(ctxt);
>> 3913
>> 3914 if (rc != X86EMUL_CONTINUE)
>> 3915 return rc;
>> 3916
>> 3917 if (ctxt->ops->get_cr(ctxt, 4) & X86_CR4_OSFXSR)
>> 3918 size = offsetof(struct fxregs_state, xmm_space[8 * 16/4]);
>> 3919 else
>> 3920 size = offsetof(struct fxregs_state, xmm_space[0]);
>> 3921
>> 3922 return segmented_write(ctxt, ctxt->memop.addr.mem, &fx_state, size);
>> 3923 }
>> 3924
>> 3925 static int fxrstor_fixup(struct x86_emulate_ctxt *ctxt,
>> 3926 struct fxregs_state *new)
>> 3927 {
>> 3928 int rc = X86EMUL_CONTINUE;
>> 3929 struct fxregs_state old;
>> 3930
>> > 3931 rc = asm_safe("fxsave %[fx]", , [fx] "+m"(old));
>> 3932 if (rc != X86EMUL_CONTINUE)
>> 3933 return rc;
>> 3934
>> 3935 /*
>> 3936 * 64 bit host will restore XMM 8-15, which is not correct on non-64
>> 3937 * bit guests. Load the current values in order to preserve 64 bit
>> 3938 * XMMs after fxrstor.
>> 3939 */
>> 3940 #ifdef CONFIG_X86_64
>> 3941 /* XXX: accessing XMM 8-15 very awkwardly */
>> 3942 memcpy(&new->xmm_space[8 * 16/4], &old.xmm_space[8 * 16/4], 8 * 16);
>> 3943 #endif
>> 3944
>> 3945 /*
>> 3946 * Hardware doesn't save and restore XMM 0-7 without CR4.OSFXSR, but
>> 3947 * does save and restore MXCSR.
>> 3948 */
>> 3949 if (!(ctxt->ops->get_cr(ctxt, 4) & X86_CR4_OSFXSR))
>> 3950 memcpy(new->xmm_space, old.xmm_space, 8 * 16);
>> 3951
>> 3952 return rc;
>> 3953 }
>> 3954
>> 3955 static int em_fxrstor(struct x86_emulate_ctxt *ctxt)
>> 3956 {
>> 3957 struct fxregs_state fx_state;
>> 3958 int rc;
>> 3959
>> 3960 rc = check_fxsr(ctxt);
>> 3961 if (rc != X86EMUL_CONTINUE)
>> 3962 return rc;
>> 3963
>> 3964 rc = segmented_read(ctxt, ctxt->memop.addr.mem, &fx_state, 512);
>> 3965 if (rc != X86EMUL_CONTINUE)
>> 3966 return rc;
>> 3967
>> 3968 if (fx_state.mxcsr >> 16)
>> 3969 return emulate_gp(ctxt, 0);
>> 3970
>> 3971 ctxt->ops->get_fpu(ctxt);
>> 3972
>> 3973 if (ctxt->mode < X86EMUL_MODE_PROT64)
>> 3974 rc = fxrstor_fixup(ctxt, &fx_state);
>> 3975
>> 3976 if (rc == X86EMUL_CONTINUE)
>> > 3977 rc = asm_safe("fxrstor %[fx]", : [fx] "m"(fx_state));
>> 3978
>> 3979 ctxt->ops->put_fpu(ctxt);
>> 3980
>>
>> ---
>> 0-DAY kernel test infrastructure Open Source Technology Center
>> https://lists.01.org/pipermail/kbuild-all Intel Corporation
Powered by blists - more mailing lists