*参照元 [#m5c7c71d] #backlinks *説明 [#q1eeaca6] -パス: [[linux-4.4.1/mm/mempolicy.c]] -FIXME: これは何? --説明 **引数 [#s1ae6f1e] -gfp_t gfp -- --[[linux-4.4.1/gfp_t]] -unsigned order -- **返り値 [#a3d8f19e] -struct page * -- --[[linux-4.4.1/page]] **参考 [#cf893187] *実装 [#v2d71090] /** * alloc_pages_current - Allocate pages. * * @gfp: * %GFP_USER user allocation, * %GFP_KERNEL kernel allocation, * %GFP_HIGHMEM highmem allocation, * %GFP_FS don't call back into a file system. * %GFP_ATOMIC don't sleep. * @order: Power of two of allocation size in pages. 0 is a single page. * * Allocate a page from the kernel page pool. When not in * interrupt context and apply the current process NUMA policy. * Returns NULL when no page can be allocated. * * Don't call cpuset_update_task_memory_state() unless * 1) it's ok to take cpuset_sem (can WAIT), and * 2) allocating for current task (not interrupt). */ struct page *alloc_pages_current(gfp_t gfp, unsigned order) { struct mempolicy *pol = &default_policy; struct page *page; unsigned int cpuset_mems_cookie; - --[[linux-4.4.1/mempolicy]] --[[linux-4.4.1/default_policy(global)]] --[[linux-4.4.1/page]] if (!in_interrupt() && !(gfp & __GFP_THISNODE)) pol = get_task_policy(current); - --[[linux-4.4.1/in_interrupt()]] --[[linux-4.4.1/get_task_policy()]] retry_cpuset: cpuset_mems_cookie = read_mems_allowed_begin(); - --[[linux-4.4.1/read_mems_allowed_begin()]] /* * No reference counting needed for current->mempolicy * nor system default_policy */ if (pol->mode == MPOL_INTERLEAVE) page = alloc_page_interleave(gfp, order, interleave_nodes(pol)); - --[[linux-4.4.1/alloc_page_interleave()]] --[[linux-4.4.1/interleave_nodes()]] else page = __alloc_pages_nodemask(gfp, order, policy_zonelist(gfp, pol, numa_node_id()), policy_nodemask(gfp, pol)); - --[[linux-4.4.1/__alloc_pages_nodemask()]] --[[linux-4.4.1/policy_zonelist()]] --[[linux-4.4.1/numa_node_id()]] --[[linux-4.4.1/policy_nodemask()]] if (unlikely(!page && read_mems_allowed_retry(cpuset_mems_cookie))) goto retry_cpuset; - --[[linux-4.4.1/read_mems_allowed_retry()]] return page; } EXPORT_SYMBOL(alloc_pages_current); - --[[linux-4.4.1/EXPORT_SYMBOL()]] *コメント [#h9a54f48]