7.4.3.4 Allocation Function

The allocation function memblock_alloc() may be seen in Figure [*]. Line 7 picks up the current thread's per-thread pool, and line 8 check to see if it is empty.

If so, lines 9-16 attempt to refill it from the global pool under the spinlock acquired on line 9 and released on line 16. Lines 10-14 move blocks from the global to the per-thread pool until either the local pool reaches its target size (half full) or the global pool is exhausted, and line 15 sets the per-thread pool's count to the proper value.

In either case, line 18 checks for the per-thread pool still being empty, and if not, lines 19-21 remove a block and return it. Otherwise, line 23 tells the sad tale of memory exhaustion.

Figure: Allocator-Cache Allocator Function
\begin{figure}{ \scriptsize
\begin{verbatim}1 struct memblock *memblock_alloc...
...= NULL;
21 return p;
22 }
23 return NULL;
24 }\end{verbatim}
}\end{figure}



Paul E. McKenney 2011-12-16