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

Re: [Xen-devel] [PATCH RESEND v5 04/24] x86: refactor psr: implement CPU init and free flow.



>>> On 31.01.17 at 03:44, <konrad.wilk@xxxxxxxxxx> wrote:
> On Thu, Jan 19, 2017 at 02:01:06PM +0800, Yi Sun wrote:
>> @@ -127,6 +130,13 @@ struct feat_node {
>>      struct list_head list;
>>  };
>>  
>> +struct cpuid_leaf_regs {
>> +    unsigned int eax;
>> +    unsigned int ebx;
>> +    unsigned int ecx;
>> +    unsigned int edx;
>> +};
> 
> Could you use 'struct cpuid_leaf' in x86_emulate.h ?
> 
> It would only require "#include <asm/x86_emulate.h>" I believe.

Indeed - I recall specifically having asked for that.

>>  static int psr_cpu_prepare(unsigned int cpu)
>>  {
>> +    if ( !socket_info )
>> +        return 0;
>> +
>> +    /* Malloc memory for the global feature head here. */
>> +    if ( feat_l3_cat == NULL &&
>> +         (feat_l3_cat = xzalloc(struct feat_node)) == NULL )
> 
> /me scratches his head.
> 
> Lets say we have a two socket machine. Each socket has
> two CPUs (so total of 4 CPUs).
> 
> On CPU0  (in psr_presmp_init) it allocates feat_l3_cat. Then
> later in (in psr_presmp_init) you call psr_cpu_init which
> sets feat_l3_cat to NULL (and 'feat' is feat_l3_cat).
> 
> When CPU1 starts up then, psr_cpu_prepare is called
> which means we allocate a new feat_l3_cat. 'cpu_init_work'
> short-circuits (as info->feat_mask has a value) and does not
> do anything.
> 
> When CPU2 (socket two), starts up then feat_l3_cat (as 'feat')
> is used (in psr_cpu_init and again sets feat_l3_cat to NULL).
> 
> The last CPU3 (socket #2) starts up, and since feat_l3_cat is
> NULL - it is allocated. But in 'cpu_init_work' it short-circuits
> so we don't use third allocated 'feat_l3_cat' .
> 
> And we have an 'feat_l3_cat' that is not used for anything..
> 
> In other words - a memory leak. Granted a very small one.

I did recommend to do it that way, to simplify things a little.

Jan


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

 


Rackspace

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