|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] X86: Fix vcpu xsave bug
Liu, Jinsong wrote:
> Jan Beulich wrote:
>>>>> On 18.11.13 at 13:24, "Liu, Jinsong" <jinsong.liu@xxxxxxxxx>
>>>>> wrote:
>>> Jan Beulich wrote:
>>>>>>> On 18.11.13 at 11:35, "Liu, Jinsong" <jinsong.liu@xxxxxxxxx>
>>>>>>> wrote:
>>>>> Jan Beulich wrote:
>>>>>>>>> On 15.11.13 at 17:55, "Liu, Jinsong" <jinsong.liu@xxxxxxxxx>
>>>>>>>>> wrote:
>>>>>>> @@ -257,22 +257,29 @@ void vcpu_restore_fpu_lazy(struct vcpu *v)
>>>>>>> */ void vcpu_save_fpu(struct vcpu *v)
>>>>>>> {
>>>>>>> - if ( !v->fpu_dirtied )
>>>>>>> - return;
>>>>>>> -
>>>>>>
>>>>>> And the - afaict - the only changed needed to this function is
>>>>>> the deletion above.
>>>>>>
>>>>>
>>>>> If I didn't misunderstand your meaning, it can not only delete
>>>>> these 2 lines, say, when (!v->fpu_dirtied) and in old platform
>>>>> that do fpu_fxsave/fpu_fsave?
>>>>
>>>> Sorry, I don't understand what you're asking.
>>>>
>>>
>>> The problem is I don't understand your last comments:
>>> 'And the - afaict - the only changed needed to this function is the
>>> deletion above.'
>>>
>>> Seems some misunderstanding here :)
>>> So would you please give me the code of your thought based on the
>>> patch below?
>>
>> void vcpu_save_fpu(struct vcpu *v)
>> {
>> ASSERT(!is_idle_vcpu(v));
>>
>> /* This can happen, if a paravirtualised guest OS has set its
>> CR0.TS. */ clts();
>>
>> if ( cpu_has_xsave )
>> fpu_xsave(v);
>> else if ( !v->fpu_dirtied )
>> /* nothing */;
>> else if ( cpu_has_fxsr )
>> fpu_fxsave(v);
>> else
>> fpu_fsave(v);
>>
>> v->fpu_dirtied = 0;
>> stts();
>> }
>>
>
> But that we need add logic at fpu_xsave(), like
>
> if ( v->fpu_dirtied )
> {
> if ( v->arch.nonlazy_xstate_used )
> mask = XSTATE_ALL;
> else
> mask = XSTATE_LAZY;
> }
> else
> {
> if ( v->arch.nonlazy_xstate_used )
> mask = XSTATE_NONLAZY;
> else
> mask = 0;
> }
>
> xsave(v, mask);
>
> This way (new vcpu_save_fpu + new fpu_xsave) is some obscure, and
> calling fpu_xsave may do nothing. So how about keep old patch, use
> 'mask' to directly tell fpu_xsave what we want it to save?
>
Hmm, just find that my old patch also has issue: it didn't handle the case of
XSTATE_LAZY ( v->fpu_dirtied && !v->arch.nonlazy_xstate_used )
I will update based on your approach.
Thanks,
Jinsong
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |