[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [V10 1/3] x86/xsaves: enable xsaves/xrstors/xsavec in xen
On Tue, Nov 17, 2015 at 04:49:03AM -0700, Jan Beulich wrote: > >>> On 13.11.15 at 02:54, <shuai.ruan@xxxxxxxxxxxxxxx> wrote: > > @@ -91,7 +251,15 @@ void xsave(struct vcpu *v, uint64_t mask) > > typeof(ptr->fpu_sse.fip.sel) fcs = ptr->fpu_sse.fip.sel; > > typeof(ptr->fpu_sse.fdp.sel) fds = ptr->fpu_sse.fdp.sel; > > > > - if ( cpu_has_xsaveopt ) > > + if ( cpu_has_xsaves ) > > + asm volatile ( ".byte 0x48,0x0f,0xc7,0x2f" > > + : "=m" (*ptr) > > + : "a" (lmask), "d" (hmask), "D" (ptr) ); > > + else if ( cpu_has_xsavec ) > > + asm volatile ( ".byte 0x48,0x0f,0xc7,0x27" > > + : "=m" (*ptr) > > + : "a" (lmask), "d" (hmask), "D" (ptr) ); > > + else if ( cpu_has_xsaveopt ) > > I (only) now realize why I replied on the earlier version (wrongly) > assuming you hadn't switched to alternative patching: This code. > Why would you not do on the save side what you do on the > restore one? > For this save side. As cpu_has_xsaveopt should be handled indenpently. If we just use alternative asm for xsaves or xsavec, the following code handle xsaveopt/xsave should be like this: if ( !cpu_has_xsavec && !cpu_has_xsaves && cpu_has_xsaveopt) ...... .... else if ( !cpu_has_xsavec && !cpu_has_xsaves ) ....... ...... if you think it is ok to do it like this. I will add this. Also, for instruction without REX.W in save side, alternavitve asm can be used, but a new alternative marco which must handle 4 instruction base on 4 cpu_features will be added. So do this in this patchset or another patchset ? which one is ok to you? > Nothing here really requires "fixup" to be exception fixup code. > Macro names should, however, be chosen according to the > purpose of the macro, not according to the first use case of it. > > That said, I don't think you even need this: The size of the > patchable region is determined by the labels (661 and 662 in > the header), and those labels will remain unaffected if > between them code emissions to other sections occur. By > having said that you shouldn't need to introduce XSTATE_FIXUP > I had actually tried to make you aware of this very fact. > Sorry, I understand your meaning. You mean use fixup code and instruction as a whole in alternative_io. Just like code below. Is that ok to you ? alternative_io("1: "".byte 0x48,0x0f,0xae,0x2f \n" ".section .fixup,\"ax\" \n" "2: mov %6,%%ecx \n" " xor %1,%1 \n" " rep stosb \n" " lea %3,%0 \n" " mov %4,%1 \n" " jmp 1b \n" ".previous \n" _ASM_EXTABLE(1b, 2b), ".byte 0x48,0x0f,0xc7,0x1f \n" ".section .fixup,\"ax\" \n" "2: mov %6,%%ecx \n" " xor %1,%1 \n" " rep stosb \n" " lea %3,%0 \n" " mov %4,%1 \n" " jmp 1b \n" ".previous \n" _ASM_EXTABLE(1b, 2b), X86_FEATURE_XSAVES, ASM_OUTPUT2("+&D" (ptr), "+&a" (lmask)), "m" (*ptr), "g" (lmask), "d" (hmask), "m" (xsave_cntxt_size) : "ecx"); > Jan > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@xxxxxxxxxxxxx > http://lists.xen.org/xen-devel > _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |