[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CA+a3UFefby0+H2wfV9J27cs3waheUshWsEhs099c25cT6G-8Og@mail.gmail.com>
Date: Wed, 18 May 2016 21:15:13 +0800
From: lunar12 lunartwix <lunartwix@...il.com>
To: Michal Hocko <mhocko@...nel.org>
Cc: linux-kernel@...r.kernel.org, linux-mm@...ck.org,
Joonsoo Kim <iamjoonsoo.kim@....com>,
Minchan Kim <minchan@...nel.org>,
Marek Szyprowski <m.szyprowski@...sung.com>
Subject: Re: malloc() size in CMA region seems to be aligned to CMA_ALIGNMENT
2016-05-18 16:48 GMT+08:00 Michal Hocko <mhocko@...nel.org>:
> [CC linux-mm and some usual suspects]
>
> On Tue 17-05-16 23:37:55, lunar12 lunartwix wrote:
>> A 4MB dma_alloc_coherent in kernel after malloc(2*1024) 40 times in
>> CMA region by user space will cause an error on our ARM 3.18 kernel
>> platform with a 32MB CMA.
>>
>> It seems that the malloc in CMA region will be aligned to
>> CMA_ALIGNMENT everytime even if the requested malloc size is very
>> small so the CMA region is not available after the malloc operations.
>>
>> Is there any configuraiton that can change this behavior??
>>
>> Thanks
>>
>> Cheers
>> Ken
>
> --
> Michal Hocko
> SUSE Labs
Update more information and any comment would be very appreciated
CMA region (from boot message):
Reserved memory: created CMA memory pool at 0x22e00000, size 80 MiB
User space test program:
do
{
addr = malloc(2*1024);
memset((void *)addr,2*1024,0x5A);
vaddr=(unsigned int)addr;
//get_user_page & page_to_phys in kernel
ioctl(devfd, IOCTL_MSYS_USER_TO_PHYSICAL, &addr)
count++;
paddr=(unsigned int)addr;
if(paddr>0x22E00000)
{
printf("USR:0x%08X 0x%08X %d\n",vaddr,paddr,count);
}
} while(addr!=NULL);
System print out:
USR:0x0164B248 0x27C00000 11337
USR:0x0164BA50 0x27C00000 11338
USR:0x0164C258 0x27800000 11339
USR:0x0164CA60 0x27800000 11340
USR:0x0164D268 0x27600000 11341
USR:0x0164DA70 0x27600000 11342
USR:0x0164E278 0x27400000 11343
USR:0x0164EA80 0x27400000 11344
USR:0x0164F288 0x27200000 11345
USR:0x0164FA90 0x27200000 11346
....
It seems that an 2MB CMA would be occpuied every 2 malloc()
Cheers
Ken
Powered by blists - more mailing lists