Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755243AbcKJCry (ORCPT ); Wed, 9 Nov 2016 21:47:54 -0500 Received: from mga04.intel.com ([192.55.52.120]:14837 "EHLO mga04.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754693AbcKJCrx (ORCPT ); Wed, 9 Nov 2016 21:47:53 -0500 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.31,616,1473145200"; d="scan'208";a="899773016" Date: Thu, 10 Nov 2016 10:47:48 +0800 From: Fengguang Wu To: Radim =?utf-8?B?S3LEjW3DocWZ?= Cc: kbuild-all@01.org, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, Paolo Bonzini , Bandan Das , Nadav Amit , Ye Xiaolong Subject: Re: [PATCH v4] KVM: x86: emulate FXSAVE and FXRSTOR Message-ID: <20161110024748.y2osmwavaohuxem6@wfg-t540p.sh.intel.com> References: <20161109180706.GA8015@potion> <201611100214.Cw6eiUij%fengguang.wu@intel.com> <20161109184628.GB8015@potion> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8; format=flowed Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <20161109184628.GB8015@potion> User-Agent: Mutt/1.6.2-neo (2016-08-08) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 5574 Lines: 137 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