Re: [PATCH v4] KVM: x86: emulate FXSAVE and FXRSTOR

From: kbuild test robot
Date: Wed Nov 09 2016 - 13:43:02 EST


Hi Radim,

[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

Attachment: .config.gz
Description: application/gzip