On 22/01/2019 15:02, Marc Gonzalez wrote:

> On 21/01/2019 18:42, Mike Rapoport wrote:
> 
>> If I understood correctly, the trouble comes from no-map range allocated in 
>> early_init_dt_alloc_reserved_memory_arch().
>>
>> There's indeed imbalance, because memblock_alloc() does kmemleak_alloc(), but
>> memblock_remove() does not do kmemleak_free().
>>
>> I think the best way is to replace __memblock_alloc_base() with
>> memblock_find_in_range(), e.g something like:
>>
>>
>> diff --git a/drivers/of/of_reserved_mem.c b/drivers/of/of_reserved_mem.c
>> index 1977ee0adcb1..6807a1cffe55 100644
>> --- a/drivers/of/of_reserved_mem.c
>> +++ b/drivers/of/of_reserved_mem.c
>> @@ -37,21 +37,16 @@ int __init __weak 
>> early_init_dt_alloc_reserved_memory_arch(phys_addr_t size,
>>       */
>>      end = !end ? MEMBLOCK_ALLOC_ANYWHERE : end;
>>      align = !align ? SMP_CACHE_BYTES : align;
>> -    base = __memblock_alloc_base(size, align, end);
>> +    base = memblock_find_in_range(size, align, start, end);
>>      if (!base)
>>              return -ENOMEM;
>>  
>> -    /*
>> -     * Check if the allocated region fits in to start..end window
>> -     */
>> -    if (base < start) {
>> -            memblock_free(base, size);
>> -            return -ENOMEM;
>> -    }
>> -
>>      *res_base = base;
>>      if (nomap)
>>              return memblock_remove(base, size);
>> +    else
>> +            return memblock_reserve(base, size);
>> +
>>      return 0;
>>  }
>>  
> 
> Your patch solves the issue. \o/

[ Add nvidia devs, but drop schowd...@nvidia.com ]

Reply via email to