Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1402970

Re: malloc() size in CMA region seems to be aligned to CMA_ALIGNMENT

From lunar12 lunartwix <lunartwix@gmail.com>
Newsgroups linux.kernel
Subject Re: malloc() size in CMA region seems to be aligned to CMA_ALIGNMENT
Date 2016-05-18 15:20 +0200
Message-ID <rA9yi-2C6-7@gated-at.bofh.it> (permalink)
References <rzPge-6lc-15@gated-at.bofh.it> <rA5l0-87e-31@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


2016-05-18 16:48 GMT+08:00 Michal Hocko <mhocko@kernel.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

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

malloc() size in CMA region seems to be aligned to CMA_ALIGNMENT lunar12 lunartwix <lunartwix@gmail.com> - 2016-05-17 17:40 +0200
  Re: malloc() size in CMA region seems to be aligned to CMA_ALIGNMENT Michal Hocko <mhocko@kernel.org> - 2016-05-18 10:50 +0200
    Re: malloc() size in CMA region seems to be aligned to CMA_ALIGNMENT lunar12 lunartwix <lunartwix@gmail.com> - 2016-05-18 15:20 +0200
      Re: malloc() size in CMA region seems to be aligned to CMA_ALIGNMENT Joonsoo Kim <iamjoonsoo.kim@lge.com> - 2016-05-19 03:00 +0200

csiph-web