<div dir="ltr"><div dir="ltr">>> Why does "page allocation failure" occur whereas there are still "58*4096kB<br>>> (C)"(*I think it indicates there are 58 order 10 memory could be used*)<br>>> could be used?<br>>><br>>> Here is the related log:<br>>><br>>> [ 2161.623563] xxxx: page allocation failure: order:10,<br>>> mode:0x2084020(GFP_ATOMIC|__GFP_COMP) <br>><br>>If you look at the source for alloc_ap_req(), you find it wants GFP_ATOMIC, not<br>>CMA.  And your box is fresh out of contiguous order-10 spaces that aren't CMA,<br>>and you're down to your last 3 order-9 flagged as (UEC).  </div><div dir="ltr"><br></div><div dir="ltr">Thank you for the clarification.</div><div dir="ltr">I understand it on a deeper level with your help.</div><div dir="ltr"><br></div><div dir="ltr">Why doesn't the kernel use two memory blocks whose size is 2048KB(i.e.<i>oder 9 </i>) </div><div>instead of one block <i>order 10 </i>(you see, there are still three free blocks and </div><div> 2048KB*2=4096KB equivalent to the memory size of order 10)?</div><div dir="ltr"><br></div><div dir="ltr">>If you look at the source for alloc_ap_req(), you find it wants GFP_ATOMIC, not<br>>CMA.    <br></div><div>I followed your advice and read the related source code carefully. </div><div>It's corresponding to the log(i.e.   mode:0x2084020(GFP_ATOMIC|__GFP_COMP) ).</div><div dir="ltr"><div dir="ltr"><br></div><div>Thank you for your attention to this matter.</div><div>Look forward to hearing from you.</div><div>Best regards.</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Valdis Klētnieks <<a href="mailto:valdis.kletnieks@vt.edu" target="_blank">valdis.kletnieks@vt.edu</a>> 于2020年6月19日周五 下午12:48写道:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On Thu, 18 Jun 2020 14:21:05 +0800, sunshiong said:<br>
<br>
> Why does "page allocation failure" occur whereas there are still "58*4096kB<br>
> (C)"(*I think it indicates there are 58 order 10 memory could be used*)<br>
> could be used?<br>
><br>
> Here is the related log:<br>
><br>
> [ 2161.623563] xxxx: page allocation failure: order:10,<br>
> mode:0x2084020(GFP_ATOMIC|__GFP_COMP)<br>
<br>
Most likely, the allocation wanted some other type of allocation.<br>
The (C) on the order-10 says it's an CMA area.<br>
<br>
        static const char types[MIGRATE_TYPES] = {<br>
                [MIGRATE_UNMOVABLE]     = 'U',<br>
                [MIGRATE_MOVABLE]       = 'M',<br>
                [MIGRATE_RECLAIMABLE]   = 'E',<br>
                [MIGRATE_HIGHATOMIC]    = 'H',<br>
#ifdef CONFIG_CMA<br>
                [MIGRATE_CMA]           = 'C',<br>
#endif<br>
#ifdef CONFIG_MEMORY_ISOLATION<br>
                [MIGRATE_ISOLATE]       = 'I',<br>
#endif<br>
<br>
If the call was for an unmovable, movable, reclaimable, or highatomic<br>
allocation, you lose.<br>
<br>
If you look at the source for alloc_ap_req(), you find it wants GFP_ATOMIC, not<br>
CMA.  And your box is fresh out of contiguous order-10 spaces that aren't CMA,<br>
and you're down to your last 3 order-9 flagged as (UEC).<br>
<br>
I admit I find it a tad suspicious that the USB gadget driver asks for a 4M<br>
chunk of memory.  Does USB actually support single transfers that large? (I'm<br>
not a USB expert)<br>
<br>
</blockquote></div></div>