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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux