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

Re: [Xen-devel] [V3] x86/xsaves: calculate the xstate_comp_offsets base on xcomp_bv



>>> On 07.03.16 at 11:19, <shuai.ruan@xxxxxxxxxxxxxxx> wrote:
> On Fri, Mar 04, 2016 at 06:56:35AM -0700, Jan Beulich wrote:
>> >>> On 04.03.16 at 12:00, <shuai.ruan@xxxxxxxxxxxxxxx> wrote:
>> > --- a/xen/arch/x86/domctl.c
>> > +++ b/xen/arch/x86/domctl.c
>> > @@ -934,8 +934,14 @@ long arch_do_domctl(
>> >                      goto vcpuextstate_out;
>> >                  }
>> >  
>> > -                expand_xsave_states(v, xsave_area,
>> > -                                    size - 2 * sizeof(uint64_t));
>> > +                ret = expand_xsave_states(v, xsave_area,
>> > +                                          size - 2 * sizeof(uint64_t));
>> > +                if ( ret )
>> > +                {
>> > +                    xfree(xsave_area);
>> > +                    vcpu_unpause(v);
>> > +                    goto vcpuextstate_out;
>> > +                }
>> 
>> Well, while this is one way to deal with the problem, it's certainly
>> not the most desirable one: We should try to avoid runtime
>> allocations, failures of which then cause other things to fail (in
>> perhaps not very graceful ways). And doing so is pretty simple
>> here, and you even have two options: Either allocate a per-CPU
>> array, or - considering that XCNTXT_MASK has only a limited
>> number of bits set - even use an on-stack array of suitable
>> (compile time determined from XCNTXT_MASK) size. If you
> Thanks.
> I will change it to on-stack array.
> For "size compile time determined from XCNTXT_MASK", hweight64(XCNTXT_MASK) 
> can return the num of bits set. But we need to caculte the highest bit set 
> in XCNTXT_MASK at compile time, is there any macro can be used here ?

You may want to pull in Linux'es ilog2().

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®.