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

Re: [Xen-devel] [PATCH] X86: Fix vcpu xsave bug



>>> 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();
}

Of course this - as much as your earlier variant - has the downside
of there being a patch consisting of just a clts()/stts(), and it would
clearly be nice to avoid that.

Jan


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.