sphinx.addnodesdocument)}( rawsourcechildren]( translations LanguagesNode)}(hhh](h pending_xref)}(hhh]docutils.nodesTextChinese (Simplified)}(hhparenthuba attributes}(ids]classes]names]dupnames]backrefs] refdomainstdreftypedoc reftarget)/translations/zh_CN/core-api/boot-time-mmmodnameN classnameN refexplicitutagnamehhh ubh)}(hhh]hChinese (Traditional)}(hhhh2ubah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/zh_TW/core-api/boot-time-mmmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hItalian}(hhhhFubah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/it_IT/core-api/boot-time-mmmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hJapanese}(hhhhZubah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/ja_JP/core-api/boot-time-mmmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hKorean}(hhhhnubah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/ko_KR/core-api/boot-time-mmmodnameN classnameN refexplicituh1hhh ubh)}(hhh]hSpanish}(hhhhubah}(h]h ]h"]h$]h&] refdomainh)reftypeh+ reftarget)/translations/sp_SP/core-api/boot-time-mmmodnameN classnameN refexplicituh1hhh ubeh}(h]h ]h"]h$]h&]current_languageEnglishuh1h hh _documenthsourceNlineNubhsection)}(hhh](htitle)}(hBoot time memory managementh]hBoot time memory management}(hhhhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhhhC/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm.rsthKubh paragraph)}(hEarly system initialization cannot use "normal" memory management simply because it is not set up yet. But there is still need to allocate memory for various data structures, for instance for the physical page allocator.h]hEarly system initialization cannot use “normal” memory management simply because it is not set up yet. But there is still need to allocate memory for various data structures, for instance for the physical page allocator.}(hhhhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hA specialized allocator called ``memblock`` performs the boot time memory management. The architecture specific initialization must set it up in :c:func:`setup_arch` and tear it down in :c:func:`mem_init` functions.h](hA specialized allocator called }(hA specialized allocator called hhhhhNhNubhliteral)}(h ``memblock``h]hmemblock}(hhhhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhubhf performs the boot time memory management. The architecture specific initialization must set it up in }(hf performs the boot time memory management. The architecture specific initialization must set it up in hhhhhNhNubh)}(h:c:func:`setup_arch`h]h)}(hhh]h setup_arch()}(hhhhhhhNhNubah}(h]h ](xrefcc-funceh"]h$]h&]uh1hhhubah}(h]h ]h"]h$]h&]refdoccore-api/boot-time-mm refdomainhreftypefunc refexplicitrefwarn reftarget setup_archuh1hhhhK hhubh and tear it down in }(h and tear it down in hhhhhNhNubh)}(h:c:func:`mem_init`h]h)}(hjh]h mem_init()}(hhhjhhhNhNubah}(h]h ](hhc-funceh"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]refdocj refdomainhreftypefunc refexplicitrefwarnjmem_inituh1hhhhK hhubh functions.}(h functions.hhhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhhhK hhhhubh)}(hX=Once the early memory management is available it offers a variety of functions and macros for memory allocations. The allocation request may be directed to the first (and probably the only) node or to a particular node in a NUMA system. There are API variants that panic when an allocation fails and those that don't.h]hX?Once the early memory management is available it offers a variety of functions and macros for memory allocations. The allocation request may be directed to the first (and probably the only) node or to a particular node in a NUMA system. There are API variants that panic when an allocation fails and those that don’t.}(hj9hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hFMemblock also offers a variety of APIs that control its own behaviour.h]hFMemblock also offers a variety of APIs that control its own behaviour.}(hjGhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhKhhhhubh)}(hhh](h)}(hMemblock Overviewh]hMemblock Overview}(hjXhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjShhhhhKubh)}(hMemblock is a method of managing memory regions during the early boot period when the usual kernel memory allocators are not up and running.h]hMemblock is a method of managing memory regions during the early boot period when the usual kernel memory allocators are not up and running.}(hjfhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:26: ./mm/memblock.chK&hjShhubh)}(htMemblock views the system memory as collections of contiguous regions. There are several types of these collections:h]htMemblock views the system memory as collections of contiguous regions. There are several types of these collections:}(hjuhjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:26: ./mm/memblock.chK*hjShhubh bullet_list)}(hhh](h list_item)}(h``memory`` - describes the physical memory available to the kernel; this may differ from the actual physical memory installed in the system, for instance when the memory is restricted with ``mem=`` command line parameterh]h)}(h``memory`` - describes the physical memory available to the kernel; this may differ from the actual physical memory installed in the system, for instance when the memory is restricted with ``mem=`` command line parameterh](h)}(h ``memory``h]hmemory}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh - describes the physical memory available to the kernel; this may differ from the actual physical memory installed in the system, for instance when the memory is restricted with }(h - describes the physical memory available to the kernel; this may differ from the actual physical memory installed in the system, for instance when the memory is restricted with hjhhhNhNubh)}(h``mem=``h]hmem=}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh command line parameter}(h command line parameterhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:26: ./mm/memblock.chK-hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h8``reserved`` - describes the regions that were allocatedh]h)}(hjh](h)}(h ``reserved``h]hreserved}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh, - describes the regions that were allocated}(h, - describes the regions that were allocatedhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:26: ./mm/memblock.chK1hjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h``physmem`` - describes the actual physical memory available during boot regardless of the possible restrictions and memory hot(un)plug; the ``physmem`` type is only available on some architectures. h]h)}(h``physmem`` - describes the actual physical memory available during boot regardless of the possible restrictions and memory hot(un)plug; the ``physmem`` type is only available on some architectures.h](h)}(h ``physmem``h]hphysmem}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh - describes the actual physical memory available during boot regardless of the possible restrictions and memory hot(un)plug; the }(h - describes the actual physical memory available during boot regardless of the possible restrictions and memory hot(un)plug; the hjhhhNhNubh)}(h ``physmem``h]hphysmem}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh. type is only available on some architectures.}(h. type is only available on some architectures.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:26: ./mm/memblock.chK2hjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]bullet*uh1jhjhK-hjShhubh)}(hXwEach region is represented by struct memblock_region that defines the region extents, its attributes and NUMA node id on NUMA systems. Every memory type is described by the struct memblock_type which contains an array of memory regions along with the allocator metadata. The "memory" and "reserved" types are nicely wrapped with struct memblock. This structure is statically initialized at build time. The region arrays are initially sized to ``INIT_MEMBLOCK_MEMORY_REGIONS`` for "memory" and ``INIT_MEMBLOCK_RESERVED_REGIONS`` for "reserved". The region array for "physmem" is initially sized to ``INIT_PHYSMEM_REGIONS``. The memblock_allow_resize() enables automatic resizing of the region arrays during addition of new regions. This feature should be used with care so that memory allocated for the region array will not overlap with areas that should be reserved, for example initrd.h](hXEach region is represented by struct memblock_region that defines the region extents, its attributes and NUMA node id on NUMA systems. Every memory type is described by the struct memblock_type which contains an array of memory regions along with the allocator metadata. The “memory” and “reserved” types are nicely wrapped with struct memblock. This structure is statically initialized at build time. The region arrays are initially sized to }(hXEach region is represented by struct memblock_region that defines the region extents, its attributes and NUMA node id on NUMA systems. Every memory type is described by the struct memblock_type which contains an array of memory regions along with the allocator metadata. The "memory" and "reserved" types are nicely wrapped with struct memblock. This structure is statically initialized at build time. The region arrays are initially sized to hj.hhhNhNubh)}(h ``INIT_MEMBLOCK_MEMORY_REGIONS``h]hINIT_MEMBLOCK_MEMORY_REGIONS}(hhhj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.ubh for “memory” and }(h for "memory" and hj.hhhNhNubh)}(h"``INIT_MEMBLOCK_RESERVED_REGIONS``h]hINIT_MEMBLOCK_RESERVED_REGIONS}(hhhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.ubhN for “reserved”. The region array for “physmem” is initially sized to }(hF for "reserved". The region array for "physmem" is initially sized to hj.hhhNhNubh)}(h``INIT_PHYSMEM_REGIONS``h]hINIT_PHYSMEM_REGIONS}(hhhj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.ubhX . The memblock_allow_resize() enables automatic resizing of the region arrays during addition of new regions. This feature should be used with care so that memory allocated for the region array will not overlap with areas that should be reserved, for example initrd.}(hX . The memblock_allow_resize() enables automatic resizing of the region arrays during addition of new regions. This feature should be used with care so that memory allocated for the region array will not overlap with areas that should be reserved, for example initrd.hj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:26: ./mm/memblock.chK6hjShhubh)}(hXThe early architecture setup should tell memblock what the physical memory layout is by using memblock_add() or memblock_add_node() functions. The first function does not assign the region to a NUMA node and it is appropriate for UMA systems. Yet, it is possible to use it on NUMA systems as well and assign the region to a NUMA node later in the setup process using memblock_set_node(). The memblock_add_node() performs such an assignment directly.h]hXThe early architecture setup should tell memblock what the physical memory layout is by using memblock_add() or memblock_add_node() functions. The first function does not assign the region to a NUMA node and it is appropriate for UMA systems. Yet, it is possible to use it on NUMA systems as well and assign the region to a NUMA node later in the setup process using memblock_set_node(). The memblock_add_node() performs such an assignment directly.}(hjyhjwhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:26: ./mm/memblock.chKEhjShhubh)}(hQOnce memblock is setup the memory can be allocated using one of the API variants:h]hQOnce memblock is setup the memory can be allocated using one of the API variants:}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:26: ./mm/memblock.chKMhjShhubj)}(hhh](j)}(h`memblock_phys_alloc*() - these functions return the **physical** address of the allocated memoryh]h)}(h`memblock_phys_alloc*() - these functions return the **physical** address of the allocated memoryh](h4memblock_phys_alloc*() - these functions return the }(h4memblock_phys_alloc*() - these functions return the hjhhhNhNubhstrong)}(h **physical**h]hphysical}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh address of the allocated memory}(h address of the allocated memoryhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:26: ./mm/memblock.chKPhjubah}(h]h ]h"]h$]h&]uh1jhjubj)}(h\memblock_alloc*() - these functions return the **virtual** address of the allocated memory. h]h)}(h[memblock_alloc*() - these functions return the **virtual** address of the allocated memory.h](h/memblock_alloc*() - these functions return the }(h/memblock_alloc*() - these functions return the hjhhhNhNubj)}(h **virtual**h]hvirtual}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh! address of the allocated memory.}(h! address of the allocated memory.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:26: ./mm/memblock.chKRhjubah}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]j,j-uh1jhjhKPhjShhubh)}(hNote, that both API variants use implicit assumptions about allowed memory ranges and the fallback methods. Consult the documentation of memblock_alloc_internal() and memblock_alloc_range_nid() functions for more elaborate description.h]hNote, that both API variants use implicit assumptions about allowed memory ranges and the fallback methods. Consult the documentation of memblock_alloc_internal() and memblock_alloc_range_nid() functions for more elaborate description.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:26: ./mm/memblock.chKUhjShhubh)}(h~As the system boot progresses, the architecture specific mem_init() function frees all the memory to the buddy page allocator.h]h~As the system boot progresses, the architecture specific mem_init() function frees all the memory to the buddy page allocator.}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:26: ./mm/memblock.chKZhjShhubh)}(hUnless an architecture enables ``CONFIG_ARCH_KEEP_MEMBLOCK``, the memblock data structures (except "physmem") will be discarded after the system initialization completes.h](hUnless an architecture enables }(hUnless an architecture enables hjhhhNhNubh)}(h``CONFIG_ARCH_KEEP_MEMBLOCK``h]hCONFIG_ARCH_KEEP_MEMBLOCK}(hhhj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubhr, the memblock data structures (except “physmem”) will be discarded after the system initialization completes.}(hn, the memblock data structures (except "physmem") will be discarded after the system initialization completes.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:26: ./mm/memblock.chK]hjShhubeh}(h]memblock-overviewah ]h"]memblock overviewah$]h&]uh1hhhhhhhhKubh)}(hhh](h)}(hFunctions and structuresh]hFunctions and structures}(hjHhjFhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjChhhhhKubh)}(hX$Here is the description of memblock data structures, functions and macros. Some of them are actually internal, but since they are documented it would be silly to omit them. Besides, reading the descriptions for the internal functions can help to understand what really happens under the hood.h]hX$Here is the description of memblock data structures, functions and macros. Some of them are actually internal, but since they are documented it would be silly to omit them. Besides, reading the descriptions for the internal functions can help to understand what really happens under the hood.}(hjVhjThhhNhNubah}(h]h ]h"]h$]h&]uh1hhhhK!hjChhubhindex)}(hhh]h}(h]h ]h"]h$]h&]entries](singlememblock_flags (C enum)c.memblock_flagshNtauh1jbhjChhhNhNubhdesc)}(hhh](hdesc_signature)}(hmemblock_flagsh]hdesc_signature_line)}(henum memblock_flagsh](hdesc_sig_keyword)}(henumh]henum}(hhhjhhhNhNubah}(h]h ]kah"]h$]h&]uh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKubhdesc_sig_space)}(h h]h }(hhhjhhhNhNubah}(h]h ]wah"]h$]h&]uh1jhjhhhjhKubh desc_name)}(hmemblock_flagsh]h desc_sig_name)}(hj|h]hmemblock_flags}(hhhjhhhNhNubah}(h]h ]nah"]h$]h&]uh1jhjubah}(h]h ](sig-namedescnameeh"]h$]h&] xml:spacepreserveuh1jhjhhhjhKubeh}(h]h ]h"]h$]h&]jj add_permalinkuh1j~sphinx_line_type declaratorhjzhhhjhKubah}(h]jqah ](sig sig-objecteh"]h$]h&] is_multilineuh1jxh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhjuhhubh desc_content)}(hhh]h)}(h&definition of memory region attributesh]h&definition of memory region attributes}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhjhhubah}(h]h ]h"]h$]h&]uh1jhjuhhhjhKubeh}(h]h ](henumeh"]h$]h&]domainhobjtypejdesctypejnoindexuh1jshhhjChNhNubh container)}(hX**Constants** ``MEMBLOCK_NONE`` no special request ``MEMBLOCK_HOTPLUG`` memory region indicated in the firmware-provided memory map during early boot as hot(un)pluggable system RAM (e.g., memory range that might get hotunplugged later). With "movable_node" set on the kernel commandline, try keeping this memory region hotunpluggable. Does not apply to memblocks added ("hotplugged") after early boot. ``MEMBLOCK_MIRROR`` mirrored region ``MEMBLOCK_NOMAP`` don't add to kernel direct mapping and treat as reserved in the memory map; refer to memblock_mark_nomap() description for further details ``MEMBLOCK_DRIVER_MANAGED`` memory region that is always detected and added via a driver, and never indicated in the firmware-provided memory map as system RAM. This corresponds to IORESOURCE_SYSRAM_DRIVER_MANAGED in the kernel resource tree. ``MEMBLOCK_RSRV_NOINIT`` memory region for which struct pages are not initialized (only for reserved regions).h](h)}(h **Constants**h]j)}(hjh]h Constants}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhK hjubhdefinition_list)}(hhh](hdefinition_list_item)}(h%``MEMBLOCK_NONE`` no special request h](hterm)}(h``MEMBLOCK_NONE``h]h)}(hj,h]h MEMBLOCK_NONE}(hhhj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*ubah}(h]h ]h"]h$]h&]uh1j(h^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhK#hj$ubh definition)}(hhh]h)}(hno special requesth]hno special request}(hjIhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhK#hjDubah}(h]h ]h"]h$]h&]uh1jBhj$ubeh}(h]h ]h"]h$]h&]uh1j"hjAhK#hjubj#)}(hX_``MEMBLOCK_HOTPLUG`` memory region indicated in the firmware-provided memory map during early boot as hot(un)pluggable system RAM (e.g., memory range that might get hotunplugged later). With "movable_node" set on the kernel commandline, try keeping this memory region hotunpluggable. Does not apply to memblocks added ("hotplugged") after early boot. h](j))}(h``MEMBLOCK_HOTPLUG``h]h)}(hjgh]hMEMBLOCK_HOTPLUG}(hhhjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhjeubah}(h]h ]h"]h$]h&]uh1j(h^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhK*hjaubjC)}(hhh]h)}(hXImemory region indicated in the firmware-provided memory map during early boot as hot(un)pluggable system RAM (e.g., memory range that might get hotunplugged later). With "movable_node" set on the kernel commandline, try keeping this memory region hotunpluggable. Does not apply to memblocks added ("hotplugged") after early boot.h]hXQmemory region indicated in the firmware-provided memory map during early boot as hot(un)pluggable system RAM (e.g., memory range that might get hotunplugged later). With “movable_node” set on the kernel commandline, try keeping this memory region hotunpluggable. Does not apply to memblocks added (“hotplugged”) after early boot.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhK&hj}ubah}(h]h ]h"]h$]h&]uh1jBhjaubeh}(h]h ]h"]h$]h&]uh1j"hj|hK*hjubj#)}(h$``MEMBLOCK_MIRROR`` mirrored region h](j))}(h``MEMBLOCK_MIRROR``h]h)}(hjh]hMEMBLOCK_MIRROR}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j(h^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhK-hjubjC)}(hhh]h)}(hmirrored regionh]hmirrored region}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK-hjubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j"hjhK-hjubj#)}(h``MEMBLOCK_NOMAP`` don't add to kernel direct mapping and treat as reserved in the memory map; refer to memblock_mark_nomap() description for further details h](j))}(h``MEMBLOCK_NOMAP``h]h)}(hjh]hMEMBLOCK_NOMAP}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j(h^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhK2hjubjC)}(hhh]h)}(hdon't add to kernel direct mapping and treat as reserved in the memory map; refer to memblock_mark_nomap() description for further detailsh]hdon’t add to kernel direct mapping and treat as reserved in the memory map; refer to memblock_mark_nomap() description for further details}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhK0hjubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j"hjhK2hjubj#)}(h``MEMBLOCK_DRIVER_MANAGED`` memory region that is always detected and added via a driver, and never indicated in the firmware-provided memory map as system RAM. This corresponds to IORESOURCE_SYSRAM_DRIVER_MANAGED in the kernel resource tree. h](j))}(h``MEMBLOCK_DRIVER_MANAGED``h]h)}(hjh]hMEMBLOCK_DRIVER_MANAGED}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j(h^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhK8hjubjC)}(hhh]h)}(hmemory region that is always detected and added via a driver, and never indicated in the firmware-provided memory map as system RAM. This corresponds to IORESOURCE_SYSRAM_DRIVER_MANAGED in the kernel resource tree.h]hmemory region that is always detected and added via a driver, and never indicated in the firmware-provided memory map as system RAM. This corresponds to IORESOURCE_SYSRAM_DRIVER_MANAGED in the kernel resource tree.}(hj/hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhK5hj*ubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j"hj)hK8hjubj#)}(hn``MEMBLOCK_RSRV_NOINIT`` memory region for which struct pages are not initialized (only for reserved regions).h](j))}(h``MEMBLOCK_RSRV_NOINIT``h]h)}(hjNh]hMEMBLOCK_RSRV_NOINIT}(hhhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLubah}(h]h ]h"]h$]h&]uh1j(h^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhK;hjHubjC)}(hhh]h)}(hUmemory region for which struct pages are not initialized (only for reserved regions).h]hUmemory region for which struct pages are not initialized (only for reserved regions).}(hjihjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchK;hjdubah}(h]h ]h"]h$]h&]uh1jBhjHubeh}(h]h ]h"]h$]h&]uh1j"hjchK;hjubeh}(h]h ]h"]h$]h&]uh1jhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjChhhNhNubjc)}(hhh]h}(h]h ]h"]h$]h&]entries](jomemblock_region (C struct)c.memblock_regionhNtauh1jbhjChhhNhNubjt)}(hhh](jy)}(hmemblock_regionh]j)}(hstruct memblock_regionh](j)}(hstructh]hstruct}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhK9ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhK9ubj)}(hmemblock_regionh]j)}(hjh]hmemblock_region}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhK9ubeh}(h]h ]h"]h$]h&]jjjuh1j~jjhjhhhjhK9ubah}(h]jah ](jjeh"]h$]h&]juh1jxh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKBhjhhubj)}(hhh]h)}(hrepresents a memory regionh]hrepresents a memory region}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhK8hjhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhK9ubeh}(h]h ](hstructeh"]h$]h&]jhjjjjjuh1jshhhjChNhNubj)}(hXB**Definition**:: struct memblock_region { phys_addr_t base; phys_addr_t size; enum memblock_flags flags; #ifdef CONFIG_NUMA; int nid; #endif; }; **Members** ``base`` base address of the region ``size`` size of the region ``flags`` memory region attributes ``nid`` NUMA node idh](h)}(h**Definition**::h](j)}(h**Definition**h]h Definition}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubh:}(h:hj hhhNhNubeh}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhjubh)}(h **Members**h]j)}(hj<h]hMembers}(hhhj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj:ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKGhjubj)}(hhh](j#)}(h$``base`` base address of the region h](j))}(h``base``h]h)}(hj[h]hbase}(hhhj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYubah}(h]h ]h"]h$]h&]uh1j(h^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhK:hjUubjC)}(hhh]h)}(hbase address of the regionh]hbase address of the region}(hjvhjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphK:hjqubah}(h]h ]h"]h$]h&]uh1jBhjUubeh}(h]h ]h"]h$]h&]uh1j"hjphK:hjRubj#)}(h``size`` size of the region h](j))}(h``size``h]h)}(hjh]hsize}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j(h^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhK;hjubjC)}(hhh]h)}(hsize of the regionh]hsize of the region}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhK;hjubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j"hjhK;hjRubj#)}(h#``flags`` memory region attributes h](j))}(h ``flags``h]h)}(hjh]hflags}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j(h^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5ubeh}(h]h ]h"]h$]h&]uh1hhj1hKhj2ubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j"hj1hKhjubeh}(h]h ]h"]h$]h&]uh1jhjvubh)}(h**Description**h]j)}(hjfh]h Description}(hhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhjvubh)}(hTWalks over reserved areas of memblock. Available as soon as memblock is initialized.h]hTWalks over reserved areas of memblock. Available as soon as memblock is initialized.}(hj~hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhKhjvubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjChhhNhNubjc)}(hhh]h}(h]h ]h"]h$]h&]entries](jo for_each_mem_pfn_range (C macro)c.for_each_mem_pfn_rangehNtauh1jbhjChhhNhNubjt)}(hhh](jy)}(hfor_each_mem_pfn_rangeh]j)}(hfor_each_mem_pfn_rangeh]j)}(hfor_each_mem_pfn_rangeh]j)}(hjh]hfor_each_mem_pfn_range}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM'ubah}(h]h ]h"]h$]h&]jjjuh1j~jjhjhhhjhM'ubah}(h]jah ](jjeh"]h$]h&]juh1jxh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM&hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhM'ubeh}(h]h ](hmacroeh"]h$]h&]jhjjjjjuh1jshhhjChNhNubh)}(h:``for_each_mem_pfn_range (i, nid, p_start, p_end, p_nid)``h]h)}(hjh]h6for_each_mem_pfn_range (i, nid, p_start, p_end, p_nid)}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM(hjChhubjQ )}(hhh]h)}(hearly memory pfn range iteratorh]hearly memory pfn range iterator}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMhjubah}(h]h ]h"]h$]h&]uh1jP hjChhhNhNubj)}(hXr**Parameters** ``i`` an integer used as loop variable ``nid`` node selector, ``MAX_NUMNODES`` for all nodes ``p_start`` ptr to ulong for start pfn of the range, can be ``NULL`` ``p_end`` ptr to ulong for end pfn of the range, can be ``NULL`` ``p_nid`` ptr to int for nid of the range, can be ``NULL`` **Description** Walks over configured memory ranges.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM!hjubj)}(hhh](j#)}(h'``i`` an integer used as loop variable h](j))}(h``i``h]h)}(hj5h]hi}(hhhj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3ubah}(h]h ]h"]h$]h&]uh1j(h^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMhj/ubjC)}(hhh]h)}(h an integer used as loop variableh]h an integer used as loop variable}(hjPhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhMhjKubah}(h]h ]h"]h$]h&]uh1jBhj/ubeh}(h]h ]h"]h$]h&]uh1j"hjJhMhj,ubj#)}(h6``nid`` node selector, ``MAX_NUMNODES`` for all nodes h](j))}(h``nid``h]h)}(hjnh]hnid}(hhhjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjlubah}(h]h ]h"]h$]h&]uh1j(h^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMhjhubjC)}(hhh]h)}(h-node selector, ``MAX_NUMNODES`` for all nodesh](hnode selector, }(hnode selector, hjhhhNhNubh)}(h``MAX_NUMNODES``h]h MAX_NUMNODES}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh for all nodes}(h for all nodeshjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jBhjhubeh}(h]h ]h"]h$]h&]uh1j"hjhMhj,ubj#)}(hE``p_start`` ptr to ulong for start pfn of the range, can be ``NULL`` h](j))}(h ``p_start``h]h)}(hjh]hp_start}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j(h^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM hjubjC)}(hhh]h)}(h8ptr to ulong for start pfn of the range, can be ``NULL``h](h0ptr to ulong for start pfn of the range, can be }(h0ptr to ulong for start pfn of the range, can be hjhhhNhNubh)}(h``NULL``h]hNULL}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]uh1hhjhM hjubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j"hjhM hj,ubj#)}(hA``p_end`` ptr to ulong for end pfn of the range, can be ``NULL`` h](j))}(h ``p_end``h]h)}(hjh]hp_end}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j(h^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM!hjubjC)}(hhh]h)}(h6ptr to ulong for end pfn of the range, can be ``NULL``h](h.ptr to ulong for end pfn of the range, can be }(h.ptr to ulong for end pfn of the range, can be hjhhhNhNubh)}(h``NULL``h]hNULL}(hhhj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]uh1hhjhM!hjubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j"hjhM!hj,ubj#)}(h;``p_nid`` ptr to int for nid of the range, can be ``NULL`` h](j))}(h ``p_nid``h]h)}(hjKh]hp_nid}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIubah}(h]h ]h"]h$]h&]uh1j(h^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM"hjEubjC)}(hhh]h)}(h0ptr to int for nid of the range, can be ``NULL``h](h(ptr to int for nid of the range, can be }(h(ptr to int for nid of the range, can be hjdhhhNhNubh)}(h``NULL``h]hNULL}(hhhjmhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdubeh}(h]h ]h"]h$]h&]uh1hhj`hM"hjaubah}(h]h ]h"]h$]h&]uh1jBhjEubeh}(h]h ]h"]h$]h&]uh1j"hj`hM"hj,ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM$hjubh)}(h$Walks over configured memory ranges.h]h$Walks over configured memory ranges.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM$hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjChhhNhNubjc)}(hhh]h}(h]h ]h"]h$]h&]entries](jo-for_each_free_mem_pfn_range_in_zone (C macro)%c.for_each_free_mem_pfn_range_in_zonehNtauh1jbhjChhhNhNubjt)}(hhh](jy)}(h#for_each_free_mem_pfn_range_in_zoneh]j)}(h#for_each_free_mem_pfn_range_in_zoneh]j)}(h#for_each_free_mem_pfn_range_in_zoneh]j)}(hjh]h#for_each_free_mem_pfn_range_in_zone}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM=ubah}(h]h ]h"]h$]h&]jjjuh1j~jjhjhhhjhM=ubah}(h]jah ](jjeh"]h$]h&]juh1jxh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM<hjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhM=ubeh}(h]h ](hmacroeh"]h$]h&]jhjj jj juh1jshhhjChNhNubh)}(hA``for_each_free_mem_pfn_range_in_zone (i, zone, p_start, p_end)``h]h)}(hjh]h=for_each_free_mem_pfn_range_in_zone (i, zone, p_start, p_end)}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM>hjChhubjQ )}(hhh]h)}(h1iterate through zone specific free memblock areash]h1iterate through zone specific free memblock areas}(hj,hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM/hj'ubah}(h]h ]h"]h$]h&]uh1jP hjChhhNhNubj)}(hXd**Parameters** ``i`` u64 used as loop variable ``zone`` zone in which all of the memory blocks reside ``p_start`` ptr to phys_addr_t for start address of the range, can be ``NULL`` ``p_end`` ptr to phys_addr_t for end address of the range, can be ``NULL`` **Description** Walks over free (memory && !reserved) areas of memblock in a specific zone. Available once memblock and an empty zone is initialized. The main assumption is that the zone start, end, and pgdat have been associated. This way we can use the zone to determine NUMA node, and if a given part of the memblock is valid for the zone.h](h)}(h**Parameters**h]j)}(hjEh]h Parameters}(hhhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjCubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM3hj?ubj)}(hhh](j#)}(h ``i`` u64 used as loop variable h](j))}(h``i``h]h)}(hjdh]hi}(hhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbubah}(h]h ]h"]h$]h&]uh1j(h^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM1hj^ubjC)}(hhh]h)}(hu64 used as loop variableh]hu64 used as loop variable}(hjhj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjyhM1hjzubah}(h]h ]h"]h$]h&]uh1jBhj^ubeh}(h]h ]h"]h$]h&]uh1j"hjyhM1hj[ubj#)}(h7``zone`` zone in which all of the memory blocks reside h](j))}(h``zone``h]h)}(hjh]hzone}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j(h^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM2hjubjC)}(hhh]h)}(h-zone in which all of the memory blocks resideh]h-zone in which all of the memory blocks reside}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhM2hjubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j"hjhM2hj[ubj#)}(hO``p_start`` ptr to phys_addr_t for start address of the range, can be ``NULL`` h](j))}(h ``p_start``h]h)}(hjh]hp_start}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j(h^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM3hjubjC)}(hhh]h)}(hBptr to phys_addr_t for start address of the range, can be ``NULL``h](h:ptr to phys_addr_t for start address of the range, can be }(h:ptr to phys_addr_t for start address of the range, can be hjhhhNhNubh)}(h``NULL``h]hNULL}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]uh1hhjhM3hjubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j"hjhM3hj[ubj#)}(hK``p_end`` ptr to phys_addr_t for end address of the range, can be ``NULL`` h](j))}(h ``p_end``h]h)}(hjh]hp_end}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j(h^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM4hjubjC)}(hhh]h)}(h@ptr to phys_addr_t for end address of the range, can be ``NULL``h](h8ptr to phys_addr_t for end address of the range, can be }(h8ptr to phys_addr_t for end address of the range, can be hj7hhhNhNubh)}(h``NULL``h]hNULL}(hhhj@hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7ubeh}(h]h ]h"]h$]h&]uh1hhj3hM4hj4ubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j"hj3hM4hj[ubeh}(h]h ]h"]h$]h&]uh1jhj?ubh)}(h**Description**h]j)}(hjhh]h Description}(hhhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM6hj?ubh)}(hXFWalks over free (memory && !reserved) areas of memblock in a specific zone. Available once memblock and an empty zone is initialized. The main assumption is that the zone start, end, and pgdat have been associated. This way we can use the zone to determine NUMA node, and if a given part of the memblock is valid for the zone.h]hXFWalks over free (memory && !reserved) areas of memblock in a specific zone. Available once memblock and an empty zone is initialized. The main assumption is that the zone start, end, and pgdat have been associated. This way we can use the zone to determine NUMA node, and if a given part of the memblock is valid for the zone.}(hjhj~hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM6hj?ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjChhhNhNubjc)}(hhh]h}(h]h ]h"]h$]h&]entries](jo2for_each_free_mem_pfn_range_in_zone_from (C macro)*c.for_each_free_mem_pfn_range_in_zone_fromhNtauh1jbhjChhhNhNubjt)}(hhh](jy)}(h(for_each_free_mem_pfn_range_in_zone_fromh]j)}(h(for_each_free_mem_pfn_range_in_zone_fromh]j)}(h(for_each_free_mem_pfn_range_in_zone_fromh]j)}(hjh]h(for_each_free_mem_pfn_range_in_zone_from}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMOubah}(h]h ]h"]h$]h&]jjjuh1j~jjhjhhhjhMOubah}(h]jah ](jjeh"]h$]h&]juh1jxh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMNhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhMOubeh}(h]h ](hmacroeh"]h$]h&]jhjjjjjuh1jshhhjChNhNubh)}(hF``for_each_free_mem_pfn_range_in_zone_from (i, zone, p_start, p_end)``h]h)}(hjh]hBfor_each_free_mem_pfn_range_in_zone_from (i, zone, p_start, p_end)}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMPhjChhubjQ )}(hhh]h)}(hDiterate through zone specific free memblock areas from a given pointh]hDiterate through zone specific free memblock areas from a given point}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMChjubah}(h]h ]h"]h$]h&]uh1jP hjChhhNhNubj)}(hX**Parameters** ``i`` u64 used as loop variable ``zone`` zone in which all of the memory blocks reside ``p_start`` ptr to phys_addr_t for start address of the range, can be ``NULL`` ``p_end`` ptr to phys_addr_t for end address of the range, can be ``NULL`` **Description** Walks over free (memory && !reserved) areas of memblock in a specific zone, continuing from current position. Available as soon as memblock is initialized.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMGhjubj)}(hhh](j#)}(h ``i`` u64 used as loop variable h](j))}(h``i``h]h)}(hj7h]hi}(hhhj9hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj5ubah}(h]h ]h"]h$]h&]uh1j(h^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMEhj1ubjC)}(hhh]h)}(hu64 used as loop variableh]hu64 used as loop variable}(hjRhjPhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjLhMEhjMubah}(h]h ]h"]h$]h&]uh1jBhj1ubeh}(h]h ]h"]h$]h&]uh1j"hjLhMEhj.ubj#)}(h7``zone`` zone in which all of the memory blocks reside h](j))}(h``zone``h]h)}(hjph]hzone}(hhhjrhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnubah}(h]h ]h"]h$]h&]uh1j(h^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMFhjjubjC)}(hhh]h)}(h-zone in which all of the memory blocks resideh]h-zone in which all of the memory blocks reside}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMFhjubah}(h]h ]h"]h$]h&]uh1jBhjjubeh}(h]h ]h"]h$]h&]uh1j"hjhMFhj.ubj#)}(hO``p_start`` ptr to phys_addr_t for start address of the range, can be ``NULL`` h](j))}(h ``p_start``h]h)}(hjh]hp_start}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j(h^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMGhjubjC)}(hhh]h)}(hBptr to phys_addr_t for start address of the range, can be ``NULL``h](h:ptr to phys_addr_t for start address of the range, can be }(h:ptr to phys_addr_t for start address of the range, can be hjhhhNhNubh)}(h``NULL``h]hNULL}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]uh1hhjhMGhjubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j"hjhMGhj.ubj#)}(hK``p_end`` ptr to phys_addr_t for end address of the range, can be ``NULL`` h](j))}(h ``p_end``h]h)}(hjh]hp_end}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j(h^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMHhjubjC)}(hhh]h)}(h@ptr to phys_addr_t for end address of the range, can be ``NULL``h](h8ptr to phys_addr_t for end address of the range, can be }(h8ptr to phys_addr_t for end address of the range, can be hj hhhNhNubh)}(h``NULL``h]hNULL}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]uh1hhjhMHhjubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j"hjhMHhj.ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj;h]h Description}(hhhj=hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMJhjubh)}(hWalks over free (memory && !reserved) areas of memblock in a specific zone, continuing from current position. Available as soon as memblock is initialized.h]hWalks over free (memory && !reserved) areas of memblock in a specific zone, continuing from current position. Available as soon as memblock is initialized.}(hjShjQhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMJhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjChhhNhNubjc)}(hhh]h}(h]h ]h"]h$]h&]entries](jo!for_each_free_mem_range (C macro)c.for_each_free_mem_rangehNtauh1jbhjChhhNhNubjt)}(hhh](jy)}(hfor_each_free_mem_rangeh]j)}(hfor_each_free_mem_rangeh]j)}(hfor_each_free_mem_rangeh]j)}(hjzh]hfor_each_free_mem_range}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj|hhh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMcubah}(h]h ]h"]h$]h&]jjjuh1j~jjhjxhhhjhMcubah}(h]jsah ](jjeh"]h$]h&]juh1jxh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMbhjuhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjuhhhjhMcubeh}(h]h ](hmacroeh"]h$]h&]jhjjjjjuh1jshhhjChNhNubh)}(hB``for_each_free_mem_range (i, nid, flags, p_start, p_end, p_nid)``h]h)}(hjh]h>for_each_free_mem_range (i, nid, flags, p_start, p_end, p_nid)}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMdhjChhubjQ )}(hhh]h)}(h#iterate through free memblock areash]h#iterate through free memblock areas}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMWhjubah}(h]h ]h"]h$]h&]uh1jP hjChhhNhNubj)}(hX**Parameters** ``i`` u64 used as loop variable ``nid`` node selector, ``NUMA_NO_NODE`` for all nodes ``flags`` pick from blocks based on memory attributes ``p_start`` ptr to phys_addr_t for start address of the range, can be ``NULL`` ``p_end`` ptr to phys_addr_t for end address of the range, can be ``NULL`` ``p_nid`` ptr to int for nid of the range, can be ``NULL`` **Description** Walks over free (memory && !reserved) areas of memblock. Available as soon as memblock is initialized.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM[hjubj)}(hhh](j#)}(h ``i`` u64 used as loop variable h](j))}(h``i``h]h)}(hj h]hi}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j(h^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMXhjubjC)}(hhh]h)}(hu64 used as loop variableh]hu64 used as loop variable}(hj%hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMXhj ubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j"hjhMXhjubj#)}(h6``nid`` node selector, ``NUMA_NO_NODE`` for all nodes h](j))}(h``nid``h]h)}(hjCh]hnid}(hhhjEhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAubah}(h]h ]h"]h$]h&]uh1j(h^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMYhj=ubjC)}(hhh]h)}(h-node selector, ``NUMA_NO_NODE`` for all nodesh](hnode selector, }(hnode selector, hj\hhhNhNubh)}(h``NUMA_NO_NODE``h]h NUMA_NO_NODE}(hhhjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\ubh for all nodes}(h for all nodeshj\hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjXhMYhjYubah}(h]h ]h"]h$]h&]uh1jBhj=ubeh}(h]h ]h"]h$]h&]uh1j"hjXhMYhjubj#)}(h6``flags`` pick from blocks based on memory attributes h](j))}(h ``flags``h]h)}(hjh]hflags}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j(h^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMZhjubjC)}(hhh]h)}(h+pick from blocks based on memory attributesh]h+pick from blocks based on memory attributes}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMZhjubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j"hjhMZhjubj#)}(hO``p_start`` ptr to phys_addr_t for start address of the range, can be ``NULL`` h](j))}(h ``p_start``h]h)}(hjh]hp_start}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j(h^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM[hjubjC)}(hhh]h)}(hBptr to phys_addr_t for start address of the range, can be ``NULL``h](h:ptr to phys_addr_t for start address of the range, can be }(h:ptr to phys_addr_t for start address of the range, can be hjhhhNhNubh)}(h``NULL``h]hNULL}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubeh}(h]h ]h"]h$]h&]uh1hhjhM[hjubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j"hjhM[hjubj#)}(hK``p_end`` ptr to phys_addr_t for end address of the range, can be ``NULL`` h](j))}(h ``p_end``h]h)}(hjh]hp_end}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j(h^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM\hj ubjC)}(hhh]h)}(h@ptr to phys_addr_t for end address of the range, can be ``NULL``h](h8ptr to phys_addr_t for end address of the range, can be }(h8ptr to phys_addr_t for end address of the range, can be hj*hhhNhNubh)}(h``NULL``h]hNULL}(hhhj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*ubeh}(h]h ]h"]h$]h&]uh1hhj&hM\hj'ubah}(h]h ]h"]h$]h&]uh1jBhj ubeh}(h]h ]h"]h$]h&]uh1j"hj&hM\hjubj#)}(h;``p_nid`` ptr to int for nid of the range, can be ``NULL`` h](j))}(h ``p_nid``h]h)}(hjYh]hp_nid}(hhhj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWubah}(h]h ]h"]h$]h&]uh1j(h^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM]hjSubjC)}(hhh]h)}(h0ptr to int for nid of the range, can be ``NULL``h](h(ptr to int for nid of the range, can be }(h(ptr to int for nid of the range, can be hjrhhhNhNubh)}(h``NULL``h]hNULL}(hhhj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrubeh}(h]h ]h"]h$]h&]uh1hhjnhM]hjoubah}(h]h ]h"]h$]h&]uh1jBhjSubeh}(h]h ]h"]h$]h&]uh1j"hjnhM]hjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM_hjubh)}(hgWalks over free (memory && !reserved) areas of memblock. Available as soon as memblock is initialized.h]hgWalks over free (memory && !reserved) areas of memblock. Available as soon as memblock is initialized.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM_hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjChhhNhNubjc)}(hhh]h}(h]h ]h"]h$]h&]entries](jo)for_each_free_mem_range_reverse (C macro)!c.for_each_free_mem_range_reversehNtauh1jbhjChhhNhNubjt)}(hhh](jy)}(hfor_each_free_mem_range_reverseh]j)}(hfor_each_free_mem_range_reverseh]j)}(hfor_each_free_mem_range_reverseh]j)}(hjh]hfor_each_free_mem_range_reverse}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMsubah}(h]h ]h"]h$]h&]jjjuh1j~jjhjhhhjhMsubah}(h]jah ](jjeh"]h$]h&]juh1jxh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMrhjhhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjhhhjhMsubeh}(h]h ](hmacroeh"]h$]h&]jhjjjjjuh1jshhhjChNhNubh)}(hJ``for_each_free_mem_range_reverse (i, nid, flags, p_start, p_end, p_nid)``h]h)}(hjh]hFfor_each_free_mem_range_reverse (i, nid, flags, p_start, p_end, p_nid)}(hhhj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMthjChhubjQ )}(hhh]h)}(h'rev-iterate through free memblock areash]h'rev-iterate through free memblock areas}(hj:hj8hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMghj5ubah}(h]h ]h"]h$]h&]uh1jP hjChhhNhNubj)}(hX **Parameters** ``i`` u64 used as loop variable ``nid`` node selector, ``NUMA_NO_NODE`` for all nodes ``flags`` pick from blocks based on memory attributes ``p_start`` ptr to phys_addr_t for start address of the range, can be ``NULL`` ``p_end`` ptr to phys_addr_t for end address of the range, can be ``NULL`` ``p_nid`` ptr to int for nid of the range, can be ``NULL`` **Description** Walks over free (memory && !reserved) areas of memblock in reverse order. Available as soon as memblock is initialized.h](h)}(h**Parameters**h]j)}(hjSh]h Parameters}(hhhjUhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjQubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMkhjMubj)}(hhh](j#)}(h ``i`` u64 used as loop variable h](j))}(h``i``h]h)}(hjrh]hi}(hhhjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjpubah}(h]h ]h"]h$]h&]uh1j(h^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMhhjlubjC)}(hhh]h)}(hu64 used as loop variableh]hu64 used as loop variable}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhhjubah}(h]h ]h"]h$]h&]uh1jBhjlubeh}(h]h ]h"]h$]h&]uh1j"hjhMhhjiubj#)}(h6``nid`` node selector, ``NUMA_NO_NODE`` for all nodes h](j))}(h``nid``h]h)}(hjh]hnid}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j(h^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMihjubjC)}(hhh]h)}(h-node selector, ``NUMA_NO_NODE`` for all nodesh](hnode selector, }(hnode selector, hjhhhNhNubh)}(h``NUMA_NO_NODE``h]h NUMA_NO_NODE}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh for all nodes}(h for all nodeshjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMihjubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j"hjhMihjiubj#)}(h6``flags`` pick from blocks based on memory attributes h](j))}(h ``flags``h]h)}(hjh]hflags}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j(h^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMjhjubjC)}(hhh]h)}(h+pick from blocks based on memory attributesh]h+pick from blocks based on memory attributes}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj hMjhj ubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j"hj hMjhjiubj#)}(hO``p_start`` ptr to phys_addr_t for start address of the range, can be ``NULL`` h](j))}(h ``p_start``h]h)}(hj1 h]hp_start}(hhhj3 hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/ ubah}(h]h ]h"]h$]h&]uh1j(h^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMkhj+ ubjC)}(hhh]h)}(hBptr to phys_addr_t for start address of the range, can be ``NULL``h](h:ptr to phys_addr_t for start address of the range, can be }(h:ptr to phys_addr_t for start address of the range, can be hjJ hhhNhNubh)}(h``NULL``h]hNULL}(hhhjS hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJ ubeh}(h]h ]h"]h$]h&]uh1hhjF hMkhjG ubah}(h]h ]h"]h$]h&]uh1jBhj+ ubeh}(h]h ]h"]h$]h&]uh1j"hjF hMkhjiubj#)}(hK``p_end`` ptr to phys_addr_t for end address of the range, can be ``NULL`` h](j))}(h ``p_end``h]h)}(hjy h]hp_end}(hhhj{ hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjw ubah}(h]h ]h"]h$]h&]uh1j(h^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMlhjs ubjC)}(hhh]h)}(h@ptr to phys_addr_t for end address of the range, can be ``NULL``h](h8ptr to phys_addr_t for end address of the range, can be }(h8ptr to phys_addr_t for end address of the range, can be hj hhhNhNubh)}(h``NULL``h]hNULL}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]uh1hhj hMlhj ubah}(h]h ]h"]h$]h&]uh1jBhjs ubeh}(h]h ]h"]h$]h&]uh1j"hj hMlhjiubj#)}(h;``p_nid`` ptr to int for nid of the range, can be ``NULL`` h](j))}(h ``p_nid``h]h)}(hj h]hp_nid}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1j(h^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMmhj ubjC)}(hhh]h)}(h0ptr to int for nid of the range, can be ``NULL``h](h(ptr to int for nid of the range, can be }(h(ptr to int for nid of the range, can be hj hhhNhNubh)}(h``NULL``h]hNULL}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubeh}(h]h ]h"]h$]h&]uh1hhj hMmhj ubah}(h]h ]h"]h$]h&]uh1jBhj ubeh}(h]h ]h"]h$]h&]uh1j"hj hMmhjiubeh}(h]h ]h"]h$]h&]uh1jhjMubh)}(h**Description**h]j)}(hj !h]h Description}(hhhj !hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj !ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMohjMubh)}(hxWalks over free (memory && !reserved) areas of memblock in reverse order. Available as soon as memblock is initialized.h]hxWalks over free (memory && !reserved) areas of memblock in reverse order. Available as soon as memblock is initialized.}(hj#!hj!!hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMohjMubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjChhhNhNubjc)}(hhh]h}(h]h ]h"]h$]h&]entries](jo'memblock_set_current_limit (C function)c.memblock_set_current_limithNtauh1jbhjChhhNhNubjt)}(hhh](jy)}(h3void memblock_set_current_limit (phys_addr_t limit)h]j)}(h2void memblock_set_current_limit(phys_addr_t limit)h](hdesc_sig_keyword_type)}(hvoidh]hvoid}(hhhjR!hhhNhNubah}(h]h ]ktah"]h$]h&]uh1jP!hjL!hhh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMubj)}(h h]h }(hhhjb!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL!hhhja!hMubj)}(hmemblock_set_current_limith]j)}(hmemblock_set_current_limith]hmemblock_set_current_limit}(hhhjt!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjp!ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjL!hhhja!hMubhdesc_parameterlist)}(h(phys_addr_t limit)h]hdesc_parameter)}(hphys_addr_t limith](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubah}(h]h ]h"]h$]h&] refdomainhreftype identifier reftargetj!modnameN classnameN c:parent_keysphinx.domains.c LookupKey)}data]j! ASTIdentifier)}j!jv!sbc.memblock_set_current_limitasbuh1hhj!ubj)}(h h]h }(hhhj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubj)}(hlimith]hlimit}(hhhj!hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj!ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hj!ubah}(h]h ]h"]h$]h&]jjuh1j!hjL!hhhja!hMubeh}(h]h ]h"]h$]h&]jjjuh1j~jjhjH!hhhja!hMubah}(h]jC!ah ](jjeh"]h$]h&]juh1jxh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMhjE!hhubj)}(hhh]h)}(hjSet the current allocation limit to allow limiting allocations to what is currently accessible during booth]hjSet the current allocation limit to allow limiting allocations to what is currently accessible during boot}(hj!hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMhj!hhubah}(h]h ]h"]h$]h&]uh1jhjE!hhhja!hMubeh}(h]h ](hfunctioneh"]h$]h&]jhjj"jj"juh1jshhhjChNhNubj)}(hJ**Parameters** ``phys_addr_t limit`` New limit value (physical address)h](h)}(h**Parameters**h]j)}(hj"h]h Parameters}(hhhj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj"ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMhj"ubj)}(hhh]j#)}(h8``phys_addr_t limit`` New limit value (physical address)h](j))}(h``phys_addr_t limit``h]h)}(hj9"h]hphys_addr_t limit}(hhhj;"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7"ubah}(h]h ]h"]h$]h&]uh1j(h^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMhj3"ubjC)}(hhh]h)}(h"New limit value (physical address)h]h"New limit value (physical address)}(hjT"hjR"hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMhjO"ubah}(h]h ]h"]h$]h&]uh1jBhj3"ubeh}(h]h ]h"]h$]h&]uh1j"hjN"hMhj0"ubah}(h]h ]h"]h$]h&]uh1jhj"ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjChhhNhNubjc)}(hhh]h}(h]h ]h"]h$]h&]entries](jo,memblock_region_memory_base_pfn (C function)!c.memblock_region_memory_base_pfnhNtauh1jbhjChhhNhNubjt)}(hhh](jy)}(hQunsigned long memblock_region_memory_base_pfn (const struct memblock_region *reg)h]j)}(hPunsigned long memblock_region_memory_base_pfn(const struct memblock_region *reg)h](jQ!)}(hunsignedh]hunsigned}(hhhj"hhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hj"hhh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM ubj)}(h h]h }(hhhj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhj"hM ubjQ!)}(hlongh]hlong}(hhhj"hhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hj"hhhj"hM ubj)}(h h]h }(hhhj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"hhhj"hM ubj)}(hmemblock_region_memory_base_pfnh]j)}(hmemblock_region_memory_base_pfnh]hmemblock_region_memory_base_pfn}(hhhj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj"hhhj"hM ubj!)}(h#(const struct memblock_region *reg)h]j!)}(h!const struct memblock_region *regh](j)}(hconsth]hconst}(hhhj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj)}(h h]h }(hhhj"hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj)}(hjh]hstruct}(hhhj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj)}(h h]h }(hhhj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubh)}(hhh]j)}(hmemblock_regionh]hmemblock_region}(hhhj&#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj##ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetj(#modnameN classnameNj!j!)}j!]j!)}j!j"sb!c.memblock_region_memory_base_pfnasbuh1hhj"ubj)}(h h]h }(hhhjF#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubhdesc_sig_punctuation)}(hj-h]h*}(hhhjV#hhhNhNubah}(h]h ]pah"]h$]h&]uh1jT#hj"ubj)}(hregh]hreg}(hhhjd#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hj"ubah}(h]h ]h"]h$]h&]jjuh1j!hj"hhhj"hM ubeh}(h]h ]h"]h$]h&]jjjuh1j~jjhj"hhhj"hM ubah}(h]j"ah ](jjeh"]h$]h&]juh1jxh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMhj"hhubj)}(hhh]h)}(h'get the lowest pfn of the memory regionh]h'get the lowest pfn of the memory region}(hj#hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM hj#hhubah}(h]h ]h"]h$]h&]uh1jhj"hhhj"hM ubeh}(h]h ](hfunctioneh"]h$]h&]jhjj#jj#juh1jshhhjChNhNubj)}(h**Parameters** ``const struct memblock_region *reg`` memblock_region structure **Return** the lowest pfn intersecting with the memory regionh](h)}(h**Parameters**h]j)}(hj#h]h Parameters}(hhhj#hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj#ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMhj#ubj)}(hhh]j#)}(h@``const struct memblock_region *reg`` memblock_region structure h](j))}(h%``const struct memblock_region *reg``h]h)}(hj#h]h!const struct memblock_region *reg}(hhhj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#ubah}(h]h ]h"]h$]h&]uh1j(h^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM hj#ubjC)}(hhh]h)}(hmemblock_region structureh]hmemblock_region structure}(hj#hj#hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#hM hj#ubah}(h]h ]h"]h$]h&]uh1jBhj#ubeh}(h]h ]h"]h$]h&]uh1j"hj#hM hj#ubah}(h]h ]h"]h$]h&]uh1jhj#ubh)}(h **Return**h]j)}(hj $h]hReturn}(hhhj $hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj $ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMhj#ubh)}(h2the lowest pfn intersecting with the memory regionh]h2the lowest pfn intersecting with the memory region}(hj#$hj!$hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMhj#ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjChhhNhNubjc)}(hhh]h}(h]h ]h"]h$]h&]entries](jo+memblock_region_memory_end_pfn (C function) c.memblock_region_memory_end_pfnhNtauh1jbhjChhhNhNubjt)}(hhh](jy)}(hPunsigned long memblock_region_memory_end_pfn (const struct memblock_region *reg)h]j)}(hOunsigned long memblock_region_memory_end_pfn(const struct memblock_region *reg)h](jQ!)}(hunsignedh]hunsigned}(hhhjP$hhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hjL$hhh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMubj)}(h h]h }(hhhj_$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL$hhhj^$hMubjQ!)}(hlongh]hlong}(hhhjm$hhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hjL$hhhj^$hMubj)}(h h]h }(hhhj{$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjL$hhhj^$hMubj)}(hmemblock_region_memory_end_pfnh]j)}(hmemblock_region_memory_end_pfnh]hmemblock_region_memory_end_pfn}(hhhj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjL$hhhj^$hMubj!)}(h#(const struct memblock_region *reg)h]j!)}(h!const struct memblock_region *regh](j)}(hj"h]hconst}(hhhj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(h h]h }(hhhj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(hjh]hstruct}(hhhj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubj)}(h h]h }(hhhj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubh)}(hhh]j)}(hmemblock_regionh]hmemblock_region}(hhhj$hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetj$modnameN classnameNj!j!)}j!]j!)}j!j$sb c.memblock_region_memory_end_pfnasbuh1hhj$ubj)}(h h]h }(hhhj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubjU#)}(hj-h]h*}(hhhj%hhhNhNubah}(h]h ]j`#ah"]h$]h&]uh1jT#hj$ubj)}(hregh]hreg}(hhhj%hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hj$ubah}(h]h ]h"]h$]h&]jjuh1j!hjL$hhhj^$hMubeh}(h]h ]h"]h$]h&]jjjuh1j~jjhjH$hhhj^$hMubah}(h]jC$ah ](jjeh"]h$]h&]juh1jxh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMhjE$hhubj)}(hhh]h)}(h$get the end pfn of the memory regionh]h$get the end pfn of the memory region}(hjJ%hjH%hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMhjE%hhubah}(h]h ]h"]h$]h&]uh1jhjE$hhhj^$hMubeh}(h]h ](hfunctioneh"]h$]h&]jhjj`%jj`%juh1jshhhjChNhNubj)}(h**Parameters** ``const struct memblock_region *reg`` memblock_region structure **Return** the end_pfn of the reserved regionh](h)}(h**Parameters**h]j)}(hjj%h]h Parameters}(hhhjl%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjh%ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMhjd%ubj)}(hhh]j#)}(h@``const struct memblock_region *reg`` memblock_region structure h](j))}(h%``const struct memblock_region *reg``h]h)}(hj%h]h!const struct memblock_region *reg}(hhhj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%ubah}(h]h ]h"]h$]h&]uh1j(h^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMhj%ubjC)}(hhh]h)}(hmemblock_region structureh]hmemblock_region structure}(hj%hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj%hMhj%ubah}(h]h ]h"]h$]h&]uh1jBhj%ubeh}(h]h ]h"]h$]h&]uh1j"hj%hMhj%ubah}(h]h ]h"]h$]h&]uh1jhjd%ubh)}(h **Return**h]j)}(hj%h]hReturn}(hhhj%hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj%ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMhjd%ubh)}(h"the end_pfn of the reserved regionh]h"the end_pfn of the reserved region}(hj%hj%hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMhjd%ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjChhhNhNubjc)}(hhh]h}(h]h ]h"]h$]h&]entries](jo.memblock_region_reserved_base_pfn (C function)#c.memblock_region_reserved_base_pfnhNtauh1jbhjChhhNhNubjt)}(hhh](jy)}(hSunsigned long memblock_region_reserved_base_pfn (const struct memblock_region *reg)h]j)}(hRunsigned long memblock_region_reserved_base_pfn(const struct memblock_region *reg)h](jQ!)}(hunsignedh]hunsigned}(hhhj &hhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hj&hhh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM#ubj)}(h h]h }(hhhj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhj&hM#ubjQ!)}(hlongh]hlong}(hhhj&&hhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hj&hhhj&hM#ubj)}(h h]h }(hhhj4&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&hhhj&hM#ubj)}(h!memblock_region_reserved_base_pfnh]j)}(h!memblock_region_reserved_base_pfnh]h!memblock_region_reserved_base_pfn}(hhhjF&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjB&ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj&hhhj&hM#ubj!)}(h#(const struct memblock_region *reg)h]j!)}(h!const struct memblock_region *regh](j)}(hj"h]hconst}(hhhjb&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^&ubj)}(h h]h }(hhhjo&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^&ubj)}(hjh]hstruct}(hhhj}&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^&ubj)}(h h]h }(hhhj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^&ubh)}(hhh]j)}(hmemblock_regionh]hmemblock_region}(hhhj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetj&modnameN classnameNj!j!)}j!]j!)}j!jH&sb#c.memblock_region_reserved_base_pfnasbuh1hhj^&ubj)}(h h]h }(hhhj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^&ubjU#)}(hj-h]h*}(hhhj&hhhNhNubah}(h]h ]j`#ah"]h$]h&]uh1jT#hj^&ubj)}(hregh]hreg}(hhhj&hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^&ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjZ&ubah}(h]h ]h"]h$]h&]jjuh1j!hj&hhhj&hM#ubeh}(h]h ]h"]h$]h&]jjjuh1j~jjhj&hhhj&hM#ubah}(h]j%ah ](jjeh"]h$]h&]juh1jxh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM'hj%hhubj)}(hhh]h)}(h)get the lowest pfn of the reserved regionh]h)get the lowest pfn of the reserved region}(hj'hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM"hj&hhubah}(h]h ]h"]h$]h&]uh1jhj%hhhj&hM#ubeh}(h]h ](hfunctioneh"]h$]h&]jhjj'jj'juh1jshhhjChNhNubj)}(h**Parameters** ``const struct memblock_region *reg`` memblock_region structure **Return** the lowest pfn intersecting with the reserved regionh](h)}(h**Parameters**h]j)}(hj#'h]h Parameters}(hhhj%'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj!'ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM&hj'ubj)}(hhh]j#)}(h@``const struct memblock_region *reg`` memblock_region structure h](j))}(h%``const struct memblock_region *reg``h]h)}(hjB'h]h!const struct memblock_region *reg}(hhhjD'hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj@'ubah}(h]h ]h"]h$]h&]uh1j(h^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM#hj<'ubjC)}(hhh]h)}(hmemblock_region structureh]hmemblock_region structure}(hj]'hj['hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjW'hM#hjX'ubah}(h]h ]h"]h$]h&]uh1jBhj<'ubeh}(h]h ]h"]h$]h&]uh1j"hjW'hM#hj9'ubah}(h]h ]h"]h$]h&]uh1jhj'ubh)}(h **Return**h]j)}(hj}'h]hReturn}(hhhj'hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{'ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM%hj'ubh)}(h4the lowest pfn intersecting with the reserved regionh]h4the lowest pfn intersecting with the reserved region}(hj'hj'hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM%hj'ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjChhhNhNubjc)}(hhh]h}(h]h ]h"]h$]h&]entries](jo-memblock_region_reserved_end_pfn (C function)"c.memblock_region_reserved_end_pfnhNtauh1jbhjChhhNhNubjt)}(hhh](jy)}(hRunsigned long memblock_region_reserved_end_pfn (const struct memblock_region *reg)h]j)}(hQunsigned long memblock_region_reserved_end_pfn(const struct memblock_region *reg)h](jQ!)}(hunsignedh]hunsigned}(hhhj'hhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hj'hhh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM.ubj)}(h h]h }(hhhj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhj'hM.ubjQ!)}(hlongh]hlong}(hhhj'hhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hj'hhhj'hM.ubj)}(h h]h }(hhhj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'hhhj'hM.ubj)}(h memblock_region_reserved_end_pfnh]j)}(h memblock_region_reserved_end_pfnh]h memblock_region_reserved_end_pfn}(hhhj'hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj'hhhj'hM.ubj!)}(h#(const struct memblock_region *reg)h]j!)}(h!const struct memblock_region *regh](j)}(hj"h]hconst}(hhhj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(h h]h }(hhhj((hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(hjh]hstruct}(hhhj6(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubj)}(h h]h }(hhhjC(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubh)}(hhh]j)}(hmemblock_regionh]hmemblock_region}(hhhjT(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjQ(ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjV(modnameN classnameNj!j!)}j!]j!)}j!j(sb"c.memblock_region_reserved_end_pfnasbuh1hhj(ubj)}(h h]h }(hhhjt(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubjU#)}(hj-h]h*}(hhhj(hhhNhNubah}(h]h ]j`#ah"]h$]h&]uh1jT#hj(ubj)}(hregh]hreg}(hhhj(hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hj(ubah}(h]h ]h"]h$]h&]jjuh1j!hj'hhhj'hM.ubeh}(h]h ]h"]h$]h&]jjjuh1j~jjhj'hhhj'hM.ubah}(h]j'ah ](jjeh"]h$]h&]juh1jxh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM2hj'hhubj)}(hhh]h)}(h&get the end pfn of the reserved regionh]h&get the end pfn of the reserved region}(hj(hj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM-hj(hhubah}(h]h ]h"]h$]h&]uh1jhj'hhhj'hM.ubeh}(h]h ](hfunctioneh"]h$]h&]jhjj(jj(juh1jshhhjChNhNubj)}(h**Parameters** ``const struct memblock_region *reg`` memblock_region structure **Return** the end_pfn of the reserved regionh](h)}(h**Parameters**h]j)}(hj(h]h Parameters}(hhhj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj(ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM1hj(ubj)}(hhh]j#)}(h@``const struct memblock_region *reg`` memblock_region structure h](j))}(h%``const struct memblock_region *reg``h]h)}(hj(h]h!const struct memblock_region *reg}(hhhj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(ubah}(h]h ]h"]h$]h&]uh1j(h^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM.hj(ubjC)}(hhh]h)}(hmemblock_region structureh]hmemblock_region structure}(hj)hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)hM.hj)ubah}(h]h ]h"]h$]h&]uh1jBhj(ubeh}(h]h ]h"]h$]h&]uh1j"hj)hM.hj(ubah}(h]h ]h"]h$]h&]uh1jhj(ubh)}(h **Return**h]j)}(hj6)h]hReturn}(hhhj8)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj4)ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM0hj(ubh)}(h"the end_pfn of the reserved regionh]h"the end_pfn of the reserved region}(hjN)hjL)hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM0hj(ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjChhhNhNubjc)}(hhh]h}(h]h ]h"]h$]h&]entries](jofor_each_mem_region (C macro)c.for_each_mem_regionhNtauh1jbhjChhhNhNubjt)}(hhh](jy)}(hfor_each_mem_regionh]j)}(hfor_each_mem_regionh]j)}(hfor_each_mem_regionh]j)}(hju)h]hfor_each_mem_region}(hhhj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{)ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjw)hhh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM<ubah}(h]h ]h"]h$]h&]jjjuh1j~jjhjs)hhhj)hM<ubah}(h]jn)ah ](jjeh"]h$]h&]juh1jxh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM;hjp)hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjp)hhhj)hM<ubeh}(h]h ](hmacroeh"]h$]h&]jhjj)jj)juh1jshhhjChNhNubh)}(h ``for_each_mem_region (region)``h]h)}(hj)h]hfor_each_mem_region (region)}(hhhj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj)ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM=hjChhubjQ )}(hhh]h)}(hitereate over memory regionsh]hitereate over memory regions}(hj)hj)hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM8hj)ubah}(h]h ]h"]h$]h&]uh1jP hjChhhNhNubj)}(h***Parameters** ``region`` loop variableh](h)}(h**Parameters**h]j)}(hj)h]h Parameters}(hhhj)hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj)ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM<hj)ubj)}(hhh]j#)}(h``region`` loop variableh](j))}(h ``region``h]h)}(hj*h]hregion}(hhhj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*ubah}(h]h ]h"]h$]h&]uh1j(h^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM>hj)ubjC)}(hhh]h)}(h loop variableh]h loop variable}(hj *hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhM9hj*ubah}(h]h ]h"]h$]h&]uh1jBhj)ubeh}(h]h ]h"]h$]h&]uh1j"hj*hM>hj)ubah}(h]h ]h"]h$]h&]uh1jhj)ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjChhhNhNubjc)}(hhh]h}(h]h ]h"]h$]h&]entries](jo&for_each_reserved_mem_region (C macro)c.for_each_reserved_mem_regionhNtauh1jbhjChhhNhNubjt)}(hhh](jy)}(hfor_each_reserved_mem_regionh]j)}(hfor_each_reserved_mem_regionh]j)}(hfor_each_reserved_mem_regionh]j)}(hjY*h]hfor_each_reserved_mem_region}(hhhjc*hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_*ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj[*hhh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMEubah}(h]h ]h"]h$]h&]jjjuh1j~jjhjW*hhhjv*hMEubah}(h]jR*ah ](jjeh"]h$]h&]juh1jxh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMDhjT*hhubj)}(hhh]h}(h]h ]h"]h$]h&]uh1jhjT*hhhjv*hMEubeh}(h]h ](hmacroeh"]h$]h&]jhjj*jj*juh1jshhhjChNhNubh)}(h)``for_each_reserved_mem_region (region)``h]h)}(hj*h]h%for_each_reserved_mem_region (region)}(hhhj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMFhjChhubjQ )}(hhh]h)}(h%itereate over reserved memory regionsh]h%itereate over reserved memory regions}(hj*hj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMAhj*ubah}(h]h ]h"]h$]h&]uh1jP hjChhhNhNubj)}(h***Parameters** ``region`` loop variableh](h)}(h**Parameters**h]j)}(hj*h]h Parameters}(hhhj*hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMEhj*ubj)}(hhh]j#)}(h``region`` loop variableh](j))}(h ``region``h]h)}(hj*h]hregion}(hhhj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj*ubah}(h]h ]h"]h$]h&]uh1j(h^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMGhj*ubjC)}(hhh]h)}(h loop variableh]h loop variable}(hj+hj+hhhNhNubah}(h]h ]h"]h$]h&]uh1hh^/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:39: ./include/linux/memblock.hhMBhj*ubah}(h]h ]h"]h$]h&]uh1jBhj*ubeh}(h]h ]h"]h$]h&]uh1j"hj*hMGhj*ubah}(h]h ]h"]h$]h&]uh1jhj*ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjChhhNhNubjc)}(hhh]h}(h]h ]h"]h$]h&]entries](jo,__memblock_find_range_bottom_up (C function)!c.__memblock_find_range_bottom_uphNtauh1jbhjChhhNhNubjt)}(hhh](jy)}(hphys_addr_t __init_memblock __memblock_find_range_bottom_up (phys_addr_t start, phys_addr_t end, phys_addr_t size, phys_addr_t align, int nid, enum memblock_flags flags)h]j)}(hphys_addr_t __init_memblock __memblock_find_range_bottom_up(phys_addr_t start, phys_addr_t end, phys_addr_t size, phys_addr_t align, int nid, enum memblock_flags flags)h](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhjF+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjC+ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjH+modnameN classnameNj!j!)}j!]j!)}j!__memblock_find_range_bottom_upsb!c.__memblock_find_range_bottom_upasbuh1hhj?+hhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKubj)}(h h]h }(hhhjh+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?+hhhjg+hKubh__init_memblock}(hhhj?+hhhNhNubj)}(h h]h }(hhhjz+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj?+hhhjg+hKubj)}(h__memblock_find_range_bottom_uph]j)}(hjd+h]h__memblock_find_range_bottom_up}(hhhj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj?+hhhjg+hKubj!)}(hm(phys_addr_t start, phys_addr_t end, phys_addr_t size, phys_addr_t align, int nid, enum memblock_flags flags)h](j!)}(hphys_addr_t starth](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetj+modnameN classnameNj!j!)}j!]jb+!c.__memblock_find_range_bottom_upasbuh1hhj+ubj)}(h h]h }(hhhj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(hstarth]hstart}(hhhj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hj+ubj!)}(hphys_addr_t endh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhj+hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetj+modnameN classnameNj!j!)}j!]jb+!c.__memblock_find_range_bottom_upasbuh1hhj+ubj)}(h h]h }(hhhj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubj)}(hendh]hend}(hhhj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj+ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hj+ubj!)}(hphys_addr_t sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhj:,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj7,ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetj<,modnameN classnameNj!j!)}j!]jb+!c.__memblock_find_range_bottom_upasbuh1hhj3,ubj)}(h h]h }(hhhjX,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3,ubj)}(hsizeh]hsize}(hhhjf,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3,ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hj+ubj!)}(hphys_addr_t alignh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetj,modnameN classnameNj!j!)}j!]jb+!c.__memblock_find_range_bottom_upasbuh1hhj{,ubj)}(h h]h }(hhhj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{,ubj)}(halignh]halign}(hhhj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{,ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hj+ubj!)}(hint nidh](jQ!)}(hinth]hint}(hhhj,hhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hj,ubj)}(h h]h }(hhhj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(hnidh]hnid}(hhhj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hj+ubj!)}(henum memblock_flags flagsh](j)}(hjh]henum}(hhhj,hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(h h]h }(hhhj -hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubh)}(hhh]j)}(hmemblock_flagsh]hmemblock_flags}(hhhj-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetj-modnameN classnameNj!j!)}j!]jb+!c.__memblock_find_range_bottom_upasbuh1hhj,ubj)}(h h]h }(hhhj8-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubj)}(hflagsh]hflags}(hhhjF-hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hj+ubeh}(h]h ]h"]h$]h&]jjuh1j!hj?+hhhjg+hKubeh}(h]h ]h"]h$]h&]jjjuh1j~jjhj;+hhhjg+hKubah}(h]j6+ah ](jjeh"]h$]h&]juh1jxhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhj8+hhubj)}(hhh]h)}(h#find free area utility in bottom-uph]h#find free area utility in bottom-up}(hjs-hjq-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhjn-hhubah}(h]h ]h"]h$]h&]uh1jhj8+hhhjg+hKubeh}(h]h ](hfunctioneh"]h$]h&]jhjj-jj-juh1jshhhjChNhNubj)}(hXM**Parameters** ``phys_addr_t start`` start of candidate range ``phys_addr_t end`` end of candidate range, can be ``MEMBLOCK_ALLOC_ANYWHERE`` or ``MEMBLOCK_ALLOC_ACCESSIBLE`` ``phys_addr_t size`` size of free area to find ``phys_addr_t align`` alignment of free area to find ``int nid`` nid of the free area to find, ``NUMA_NO_NODE`` for any node ``enum memblock_flags flags`` pick from blocks based on memory attributes **Description** Utility called from memblock_find_in_range_node(), find free area bottom-up. **Return** Found address on success, 0 on failure.h](h)}(h**Parameters**h]j)}(hj-h]h Parameters}(hhhj-hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj-ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhj-ubj)}(hhh](j#)}(h/``phys_addr_t start`` start of candidate range h](j))}(h``phys_addr_t start``h]h)}(hj-h]hphys_addr_t start}(hhhj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-ubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhj-ubjC)}(hhh]h)}(hstart of candidate rangeh]hstart of candidate range}(hj-hj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-hKhj-ubah}(h]h ]h"]h$]h&]uh1jBhj-ubeh}(h]h ]h"]h$]h&]uh1j"hj-hKhj-ubj#)}(hp``phys_addr_t end`` end of candidate range, can be ``MEMBLOCK_ALLOC_ANYWHERE`` or ``MEMBLOCK_ALLOC_ACCESSIBLE`` h](j))}(h``phys_addr_t end``h]h)}(hj-h]hphys_addr_t end}(hhhj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj-ubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhj-ubjC)}(hhh]h)}(h[end of candidate range, can be ``MEMBLOCK_ALLOC_ANYWHERE`` or ``MEMBLOCK_ALLOC_ACCESSIBLE``h](hend of candidate range, can be }(hend of candidate range, can be hj.hhhNhNubh)}(h``MEMBLOCK_ALLOC_ANYWHERE``h]hMEMBLOCK_ALLOC_ANYWHERE}(hhhj .hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.ubh or }(h or hj.hhhNhNubh)}(h``MEMBLOCK_ALLOC_ACCESSIBLE``h]hMEMBLOCK_ALLOC_ACCESSIBLE}(hhhj .hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.ubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhj.ubah}(h]h ]h"]h$]h&]uh1jBhj-ubeh}(h]h ]h"]h$]h&]uh1j"hj.hKhj-ubj#)}(h/``phys_addr_t size`` size of free area to find h](j))}(h``phys_addr_t size``h]h)}(hjG.h]hphys_addr_t size}(hhhjI.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjE.ubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhjA.ubjC)}(hhh]h)}(hsize of free area to findh]hsize of free area to find}(hjb.hj`.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\.hKhj].ubah}(h]h ]h"]h$]h&]uh1jBhjA.ubeh}(h]h ]h"]h$]h&]uh1j"hj\.hKhj-ubj#)}(h5``phys_addr_t align`` alignment of free area to find h](j))}(h``phys_addr_t align``h]h)}(hj.h]hphys_addr_t align}(hhhj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~.ubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhjz.ubjC)}(hhh]h)}(halignment of free area to findh]halignment of free area to find}(hj.hj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.hKhj.ubah}(h]h ]h"]h$]h&]uh1jBhjz.ubeh}(h]h ]h"]h$]h&]uh1j"hj.hKhj-ubj#)}(hH``int nid`` nid of the free area to find, ``NUMA_NO_NODE`` for any node h](j))}(h ``int nid``h]h)}(hj.h]hint nid}(hhhj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.ubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhj.ubjC)}(hhh]h)}(h;nid of the free area to find, ``NUMA_NO_NODE`` for any nodeh](hnid of the free area to find, }(hnid of the free area to find, hj.hhhNhNubh)}(h``NUMA_NO_NODE``h]h NUMA_NO_NODE}(hhhj.hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj.ubh for any node}(h for any nodehj.hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj.hKhj.ubah}(h]h ]h"]h$]h&]uh1jBhj.ubeh}(h]h ]h"]h$]h&]uh1j"hj.hKhj-ubj#)}(hJ``enum memblock_flags flags`` pick from blocks based on memory attributes h](j))}(h``enum memblock_flags flags``h]h)}(hj/h]henum memblock_flags flags}(hhhj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/ubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhj/ubjC)}(hhh]h)}(h+pick from blocks based on memory attributesh]h+pick from blocks based on memory attributes}(hj!/hj/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hKhj/ubah}(h]h ]h"]h$]h&]uh1jBhj/ubeh}(h]h ]h"]h$]h&]uh1j"hj/hKhj-ubeh}(h]h ]h"]h$]h&]uh1jhj-ubh)}(h**Description**h]j)}(hjA/h]h Description}(hhhjC/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?/ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhj-ubh)}(hLUtility called from memblock_find_in_range_node(), find free area bottom-up.h]hLUtility called from memblock_find_in_range_node(), find free area bottom-up.}(hjY/hjW/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhj-ubh)}(h **Return**h]j)}(hjh/h]hReturn}(hhhjj/hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjf/ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhj-ubh)}(h'Found address on success, 0 on failure.h]h'Found address on success, 0 on failure.}(hj/hj~/hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhj-ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjChhhNhNubjc)}(hhh]h}(h]h ]h"]h$]h&]entries](jo+__memblock_find_range_top_down (C function) c.__memblock_find_range_top_downhNtauh1jbhjChhhNhNubjt)}(hhh](jy)}(hphys_addr_t __init_memblock __memblock_find_range_top_down (phys_addr_t start, phys_addr_t end, phys_addr_t size, phys_addr_t align, int nid, enum memblock_flags flags)h]j)}(hphys_addr_t __init_memblock __memblock_find_range_top_down(phys_addr_t start, phys_addr_t end, phys_addr_t size, phys_addr_t align, int nid, enum memblock_flags flags)h](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetj/modnameN classnameNj!j!)}j!]j!)}j!__memblock_find_range_top_downsb c.__memblock_find_range_top_downasbuh1hhj/hhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKubj)}(h h]h }(hhhj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhj/hKubh__init_memblock}(hhhj/hhhNhNubj)}(h h]h }(hhhj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/hhhj/hKubj)}(h__memblock_find_range_top_downh]j)}(hj/h]h__memblock_find_range_top_down}(hhhj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj/hhhj/hKubj!)}(hm(phys_addr_t start, phys_addr_t end, phys_addr_t size, phys_addr_t align, int nid, enum memblock_flags flags)h](j!)}(hphys_addr_t starth](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetj0modnameN classnameNj!j!)}j!]j/ c.__memblock_find_range_top_downasbuh1hhj 0ubj)}(h h]h }(hhhj20hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 0ubj)}(hstarth]hstart}(hhhj@0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 0ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hj 0ubj!)}(hphys_addr_t endh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhj\0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjY0ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetj^0modnameN classnameNj!j!)}j!]j/ c.__memblock_find_range_top_downasbuh1hhjU0ubj)}(h h]h }(hhhjz0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU0ubj)}(hendh]hend}(hhhj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjU0ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hj 0ubj!)}(hphys_addr_t sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetj0modnameN classnameNj!j!)}j!]j/ c.__memblock_find_range_top_downasbuh1hhj0ubj)}(h h]h }(hhhj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(hsizeh]hsize}(hhhj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hj 0ubj!)}(hphys_addr_t alignh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhj0hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetj0modnameN classnameNj!j!)}j!]j/ c.__memblock_find_range_top_downasbuh1hhj0ubj)}(h h]h }(hhhj 1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubj)}(halignh]halign}(hhhj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj0ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hj 0ubj!)}(hint nidh](jQ!)}(hinth]hint}(hhhj11hhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hj-1ubj)}(h h]h }(hhhj?1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-1ubj)}(hnidh]hnid}(hhhjM1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj-1ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hj 0ubj!)}(henum memblock_flags flagsh](j)}(hjh]henum}(hhhjf1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb1ubj)}(h h]h }(hhhjs1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb1ubh)}(hhh]j)}(hmemblock_flagsh]hmemblock_flags}(hhhj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetj1modnameN classnameNj!j!)}j!]j/ c.__memblock_find_range_top_downasbuh1hhjb1ubj)}(h h]h }(hhhj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb1ubj)}(hflagsh]hflags}(hhhj1hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjb1ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hj 0ubeh}(h]h ]h"]h$]h&]jjuh1j!hj/hhhj/hKubeh}(h]h ]h"]h$]h&]jjjuh1j~jjhj/hhhj/hKubah}(h]j/ah ](jjeh"]h$]h&]juh1jxhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhj/hhubj)}(hhh]h)}(h#find free area utility, in top-downh]h#find free area utility, in top-down}(hj1hj1hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhj1hhubah}(h]h ]h"]h$]h&]uh1jhj/hhhj/hKubeh}(h]h ](hfunctioneh"]h$]h&]jhjj1jj1juh1jshhhjChNhNubj)}(hXL**Parameters** ``phys_addr_t start`` start of candidate range ``phys_addr_t end`` end of candidate range, can be ``MEMBLOCK_ALLOC_ANYWHERE`` or ``MEMBLOCK_ALLOC_ACCESSIBLE`` ``phys_addr_t size`` size of free area to find ``phys_addr_t align`` alignment of free area to find ``int nid`` nid of the free area to find, ``NUMA_NO_NODE`` for any node ``enum memblock_flags flags`` pick from blocks based on memory attributes **Description** Utility called from memblock_find_in_range_node(), find free area top-down. **Return** Found address on success, 0 on failure.h](h)}(h**Parameters**h]j)}(hj1h]h Parameters}(hhhj1hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhj1ubj)}(hhh](j#)}(h/``phys_addr_t start`` start of candidate range h](j))}(h``phys_addr_t start``h]h)}(hj2h]hphys_addr_t start}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2ubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhj2ubjC)}(hhh]h)}(hstart of candidate rangeh]hstart of candidate range}(hj72hj52hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj12hKhj22ubah}(h]h ]h"]h$]h&]uh1jBhj2ubeh}(h]h ]h"]h$]h&]uh1j"hj12hKhj2ubj#)}(hp``phys_addr_t end`` end of candidate range, can be ``MEMBLOCK_ALLOC_ANYWHERE`` or ``MEMBLOCK_ALLOC_ACCESSIBLE`` h](j))}(h``phys_addr_t end``h]h)}(hjU2h]hphys_addr_t end}(hhhjW2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjS2ubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhjO2ubjC)}(hhh]h)}(h[end of candidate range, can be ``MEMBLOCK_ALLOC_ANYWHERE`` or ``MEMBLOCK_ALLOC_ACCESSIBLE``h](hend of candidate range, can be }(hend of candidate range, can be hjn2hhhNhNubh)}(h``MEMBLOCK_ALLOC_ANYWHERE``h]hMEMBLOCK_ALLOC_ANYWHERE}(hhhjw2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjn2ubh or }(h or hjn2hhhNhNubh)}(h``MEMBLOCK_ALLOC_ACCESSIBLE``h]hMEMBLOCK_ALLOC_ACCESSIBLE}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjn2ubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhjk2ubah}(h]h ]h"]h$]h&]uh1jBhjO2ubeh}(h]h ]h"]h$]h&]uh1j"hjj2hKhj2ubj#)}(h/``phys_addr_t size`` size of free area to find h](j))}(h``phys_addr_t size``h]h)}(hj2h]hphys_addr_t size}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2ubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhj2ubjC)}(hhh]h)}(hsize of free area to findh]hsize of free area to find}(hj2hj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hKhj2ubah}(h]h ]h"]h$]h&]uh1jBhj2ubeh}(h]h ]h"]h$]h&]uh1j"hj2hKhj2ubj#)}(h5``phys_addr_t align`` alignment of free area to find h](j))}(h``phys_addr_t align``h]h)}(hj2h]hphys_addr_t align}(hhhj2hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2ubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhj2ubjC)}(hhh]h)}(halignment of free area to findh]halignment of free area to find}(hj3hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2hKhj3ubah}(h]h ]h"]h$]h&]uh1jBhj2ubeh}(h]h ]h"]h$]h&]uh1j"hj2hKhj2ubj#)}(hH``int nid`` nid of the free area to find, ``NUMA_NO_NODE`` for any node h](j))}(h ``int nid``h]h)}(hj#3h]hint nid}(hhhj%3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj!3ubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhj3ubjC)}(hhh]h)}(h;nid of the free area to find, ``NUMA_NO_NODE`` for any nodeh](hnid of the free area to find, }(hnid of the free area to find, hj<3hhhNhNubh)}(h``NUMA_NO_NODE``h]h NUMA_NO_NODE}(hhhjE3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<3ubh for any node}(h for any nodehj<3hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj83hKhj93ubah}(h]h ]h"]h$]h&]uh1jBhj3ubeh}(h]h ]h"]h$]h&]uh1j"hj83hKhj2ubj#)}(hJ``enum memblock_flags flags`` pick from blocks based on memory attributes h](j))}(h``enum memblock_flags flags``h]h)}(hjp3h]henum memblock_flags flags}(hhhjr3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjn3ubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhjj3ubjC)}(hhh]h)}(h+pick from blocks based on memory attributesh]h+pick from blocks based on memory attributes}(hj3hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3hKhj3ubah}(h]h ]h"]h$]h&]uh1jBhjj3ubeh}(h]h ]h"]h$]h&]uh1j"hj3hKhj2ubeh}(h]h ]h"]h$]h&]uh1jhj1ubh)}(h**Description**h]j)}(hj3h]h Description}(hhhj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhj1ubh)}(hKUtility called from memblock_find_in_range_node(), find free area top-down.h]hKUtility called from memblock_find_in_range_node(), find free area top-down.}(hj3hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhj1ubh)}(h **Return**h]j)}(hj3h]hReturn}(hhhj3hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhj1ubh)}(h'Found address on success, 0 on failure.h]h'Found address on success, 0 on failure.}(hj3hj3hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chKhj1ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjChhhNhNubjc)}(hhh]h}(h]h ]h"]h$]h&]entries](jo(memblock_find_in_range_node (C function)c.memblock_find_in_range_nodehNtauh1jbhjChhhNhNubjt)}(hhh](jy)}(hphys_addr_t __init_memblock memblock_find_in_range_node (phys_addr_t size, phys_addr_t align, phys_addr_t start, phys_addr_t end, int nid, enum memblock_flags flags)h]j)}(hphys_addr_t __init_memblock memblock_find_in_range_node(phys_addr_t size, phys_addr_t align, phys_addr_t start, phys_addr_t end, int nid, enum memblock_flags flags)h](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetj4modnameN classnameNj!j!)}j!]j!)}j!memblock_find_in_range_nodesbc.memblock_find_in_range_nodeasbuh1hhj4hhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMubj)}(h h]h }(hhhj<4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhj;4hMubh__init_memblock}(hhhj4hhhNhNubj)}(h h]h }(hhhjN4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4hhhj;4hMubj)}(hmemblock_find_in_range_nodeh]j)}(hj84h]hmemblock_find_in_range_node}(hhhj`4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\4ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj4hhhj;4hMubj!)}(hm(phys_addr_t size, phys_addr_t align, phys_addr_t start, phys_addr_t end, int nid, enum memblock_flags flags)h](j!)}(hphys_addr_t sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhj~4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{4ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetj4modnameN classnameNj!j!)}j!]j64c.memblock_find_in_range_nodeasbuh1hhjw4ubj)}(h h]h }(hhhj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjw4ubj)}(hsizeh]hsize}(hhhj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjw4ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjs4ubj!)}(hphys_addr_t alignh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetj4modnameN classnameNj!j!)}j!]j64c.memblock_find_in_range_nodeasbuh1hhj4ubj)}(h h]h }(hhhj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(halignh]halign}(hhhj4hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjs4ubj!)}(hphys_addr_t starth](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 5ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetj5modnameN classnameNj!j!)}j!]j64c.memblock_find_in_range_nodeasbuh1hhj5ubj)}(h h]h }(hhhj,5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(hstarth]hstart}(hhhj:5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjs4ubj!)}(hphys_addr_t endh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhjV5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjS5ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjX5modnameN classnameNj!j!)}j!]j64c.memblock_find_in_range_nodeasbuh1hhjO5ubj)}(h h]h }(hhhjt5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjO5ubj)}(hendh]hend}(hhhj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjO5ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjs4ubj!)}(hint nidh](jQ!)}(hinth]hint}(hhhj5hhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hj5ubj)}(h h]h }(hhhj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(hnidh]hnid}(hhhj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjs4ubj!)}(henum memblock_flags flagsh](j)}(hjh]henum}(hhhj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(h h]h }(hhhj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubh)}(hhh]j)}(hmemblock_flagsh]hmemblock_flags}(hhhj5hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetj5modnameN classnameNj!j!)}j!]j64c.memblock_find_in_range_nodeasbuh1hhj5ubj)}(h h]h }(hhhj 6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubj)}(hflagsh]hflags}(hhhj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjs4ubeh}(h]h ]h"]h$]h&]jjuh1j!hj4hhhj;4hMubeh}(h]h ]h"]h$]h&]jjjuh1j~jjhj4hhhj;4hMubah}(h]j 4ah ](jjeh"]h$]h&]juh1jxhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM%hj 4hhubj)}(hhh]h)}(h&find free area in given range and nodeh]h&find free area in given range and node}(hjG6hjE6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjB6hhubah}(h]h ]h"]h$]h&]uh1jhj 4hhhj;4hMubeh}(h]h ](hfunctioneh"]h$]h&]jhjj]6jj]6juh1jshhhjChNhNubj)}(hXN**Parameters** ``phys_addr_t size`` size of free area to find ``phys_addr_t align`` alignment of free area to find ``phys_addr_t start`` start of candidate range ``phys_addr_t end`` end of candidate range, can be ``MEMBLOCK_ALLOC_ANYWHERE`` or ``MEMBLOCK_ALLOC_ACCESSIBLE`` ``int nid`` nid of the free area to find, ``NUMA_NO_NODE`` for any node ``enum memblock_flags flags`` pick from blocks based on memory attributes **Description** Find **size** free area aligned to **align** in the specified range and node. **Return** Found address on success, 0 on failure.h](h)}(h**Parameters**h]j)}(hjg6h]h Parameters}(hhhji6hhhNhNubah}(h]h ]h"]h$]h&]uh1jhje6ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhja6ubj)}(hhh](j#)}(h/``phys_addr_t size`` size of free area to find h](j))}(h``phys_addr_t size``h]h)}(hj6h]hphys_addr_t size}(hhhj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6ubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj6ubjC)}(hhh]h)}(hsize of free area to findh]hsize of free area to find}(hj6hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hMhj6ubah}(h]h ]h"]h$]h&]uh1jBhj6ubeh}(h]h ]h"]h$]h&]uh1j"hj6hMhj}6ubj#)}(h5``phys_addr_t align`` alignment of free area to find h](j))}(h``phys_addr_t align``h]h)}(hj6h]hphys_addr_t align}(hhhj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6ubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj6ubjC)}(hhh]h)}(halignment of free area to findh]halignment of free area to find}(hj6hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6hMhj6ubah}(h]h ]h"]h$]h&]uh1jBhj6ubeh}(h]h ]h"]h$]h&]uh1j"hj6hMhj}6ubj#)}(h/``phys_addr_t start`` start of candidate range h](j))}(h``phys_addr_t start``h]h)}(hj6h]hphys_addr_t start}(hhhj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6ubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj6ubjC)}(hhh]h)}(hstart of candidate rangeh]hstart of candidate range}(hj7hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj 7hMhj7ubah}(h]h ]h"]h$]h&]uh1jBhj6ubeh}(h]h ]h"]h$]h&]uh1j"hj 7hMhj}6ubj#)}(hp``phys_addr_t end`` end of candidate range, can be ``MEMBLOCK_ALLOC_ANYWHERE`` or ``MEMBLOCK_ALLOC_ACCESSIBLE`` h](j))}(h``phys_addr_t end``h]h)}(hj17h]hphys_addr_t end}(hhhj37hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/7ubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj+7ubjC)}(hhh]h)}(h[end of candidate range, can be ``MEMBLOCK_ALLOC_ANYWHERE`` or ``MEMBLOCK_ALLOC_ACCESSIBLE``h](hend of candidate range, can be }(hend of candidate range, can be hjJ7hhhNhNubh)}(h``MEMBLOCK_ALLOC_ANYWHERE``h]hMEMBLOCK_ALLOC_ANYWHERE}(hhhjS7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJ7ubh or }(h or hjJ7hhhNhNubh)}(h``MEMBLOCK_ALLOC_ACCESSIBLE``h]hMEMBLOCK_ALLOC_ACCESSIBLE}(hhhjf7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJ7ubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjG7ubah}(h]h ]h"]h$]h&]uh1jBhj+7ubeh}(h]h ]h"]h$]h&]uh1j"hjF7hMhj}6ubj#)}(hH``int nid`` nid of the free area to find, ``NUMA_NO_NODE`` for any node h](j))}(h ``int nid``h]h)}(hj7h]hint nid}(hhhj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7ubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj7ubjC)}(hhh]h)}(h;nid of the free area to find, ``NUMA_NO_NODE`` for any nodeh](hnid of the free area to find, }(hnid of the free area to find, hj7hhhNhNubh)}(h``NUMA_NO_NODE``h]h NUMA_NO_NODE}(hhhj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7ubh for any node}(h for any nodehj7hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj7hMhj7ubah}(h]h ]h"]h$]h&]uh1jBhj7ubeh}(h]h ]h"]h$]h&]uh1j"hj7hMhj}6ubj#)}(hJ``enum memblock_flags flags`` pick from blocks based on memory attributes h](j))}(h``enum memblock_flags flags``h]h)}(hj7h]henum memblock_flags flags}(hhhj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7ubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj7ubjC)}(hhh]h)}(h+pick from blocks based on memory attributesh]h+pick from blocks based on memory attributes}(hj7hj7hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7hMhj7ubah}(h]h ]h"]h$]h&]uh1jBhj7ubeh}(h]h ]h"]h$]h&]uh1j"hj7hMhj}6ubeh}(h]h ]h"]h$]h&]uh1jhja6ubh)}(h**Description**h]j)}(hj8h]h Description}(hhhj8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM hja6ubh)}(hMFind **size** free area aligned to **align** in the specified range and node.h](hFind }(hFind hj+8hhhNhNubj)}(h**size**h]hsize}(hhhj48hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+8ubh free area aligned to }(h free area aligned to hj+8hhhNhNubj)}(h **align**h]halign}(hhhjG8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+8ubh! in the specified range and node.}(h! in the specified range and node.hj+8hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM hja6ubh)}(h **Return**h]j)}(hjc8h]hReturn}(hhhje8hhhNhNubah}(h]h ]h"]h$]h&]uh1jhja8ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM"hja6ubh)}(h'Found address on success, 0 on failure.h]h'Found address on success, 0 on failure.}(hj{8hjy8hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM$hja6ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjChhhNhNubjc)}(hhh]h}(h]h ]h"]h$]h&]entries](jo#memblock_find_in_range (C function)c.memblock_find_in_rangehNtauh1jbhjChhhNhNubjt)}(hhh](jy)}(h|phys_addr_t __init_memblock memblock_find_in_range (phys_addr_t start, phys_addr_t end, phys_addr_t size, phys_addr_t align)h]j)}(h{phys_addr_t __init_memblock memblock_find_in_range(phys_addr_t start, phys_addr_t end, phys_addr_t size, phys_addr_t align)h](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetj8modnameN classnameNj!j!)}j!]j!)}j!memblock_find_in_rangesbc.memblock_find_in_rangeasbuh1hhj8hhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM=ubj)}(h h]h }(hhhj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhj8hM=ubh__init_memblock}(hhhj8hhhNhNubj)}(h h]h }(hhhj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8hhhj8hM=ubj)}(hmemblock_find_in_rangeh]j)}(hj8h]hmemblock_find_in_range}(hhhj8hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj8hhhj8hM=ubj!)}(hI(phys_addr_t start, phys_addr_t end, phys_addr_t size, phys_addr_t align)h](j!)}(hphys_addr_t starth](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj 9ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetj9modnameN classnameNj!j!)}j!]j8c.memblock_find_in_rangeasbuh1hhj9ubj)}(h h]h }(hhhj-9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(hstarth]hstart}(hhhj;9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hj9ubj!)}(hphys_addr_t endh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhjW9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjT9ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjY9modnameN classnameNj!j!)}j!]j8c.memblock_find_in_rangeasbuh1hhjP9ubj)}(h h]h }(hhhju9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjP9ubj)}(hendh]hend}(hhhj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjP9ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hj9ubj!)}(hphys_addr_t sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetj9modnameN classnameNj!j!)}j!]j8c.memblock_find_in_rangeasbuh1hhj9ubj)}(h h]h }(hhhj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(hsizeh]hsize}(hhhj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hj9ubj!)}(hphys_addr_t alignh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhj9hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetj9modnameN classnameNj!j!)}j!]j8c.memblock_find_in_rangeasbuh1hhj9ubj)}(h h]h }(hhhj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubj)}(halignh]halign}(hhhj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hj9ubeh}(h]h ]h"]h$]h&]jjuh1j!hj8hhhj8hM=ubeh}(h]h ]h"]h$]h&]jjjuh1j~jjhj8hhhj8hM=ubah}(h]j8ah ](jjeh"]h$]h&]juh1jxhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMHhj8hhubj)}(hhh]h)}(hfind free area in given rangeh]hfind free area in given range}(hj@:hj>:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM<hj;:hhubah}(h]h ]h"]h$]h&]uh1jhj8hhhj8hM=ubeh}(h]h ](hfunctioneh"]h$]h&]jhjjV:jjV:juh1jshhhjChNhNubj)}(hX**Parameters** ``phys_addr_t start`` start of candidate range ``phys_addr_t end`` end of candidate range, can be ``MEMBLOCK_ALLOC_ANYWHERE`` or ``MEMBLOCK_ALLOC_ACCESSIBLE`` ``phys_addr_t size`` size of free area to find ``phys_addr_t align`` alignment of free area to find **Description** Find **size** free area aligned to **align** in the specified range. **Return** Found address on success, 0 on failure.h](h)}(h**Parameters**+h]j)}(hj`:h]h Parameters}(hhhjb:hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^:ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM@hjZ:ubj)}(hhh](j#)}(h/``phys_addr_t start`` start of candidate range h](j))}(h``phys_addr_t start``h]h)}(hj:h]hphys_addr_t start}(hhhj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}:ubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM=hjy:ubjC)}(hhh]h)}(hstart of candidate rangeh]hstart of candidate range}(hj:hj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:hM=hj:ubah}(h]h ]h"]h$]h&]uh1jBhjy:ubeh}(h]h ]h"]h$]h&]uh1j"hj:hM=hjv:ubj#)}(hp``phys_addr_t end`` end of candidate range, can be ``MEMBLOCK_ALLOC_ANYWHERE`` or ``MEMBLOCK_ALLOC_ACCESSIBLE`` h](j))}(h``phys_addr_t end``h]h)}(hj:h]hphys_addr_t end}(hhhj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:ubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM?hj:ubjC)}(hhh]h)}(h[end of candidate range, can be ``MEMBLOCK_ALLOC_ANYWHERE`` or ``MEMBLOCK_ALLOC_ACCESSIBLE``h](hend of candidate range, can be }(hend of candidate range, can be hj:hhhNhNubh)}(h``MEMBLOCK_ALLOC_ANYWHERE``h]hMEMBLOCK_ALLOC_ANYWHERE}(hhhj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:ubh or }(h or hj:hhhNhNubh)}(h``MEMBLOCK_ALLOC_ACCESSIBLE``h]hMEMBLOCK_ALLOC_ACCESSIBLE}(hhhj:hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj:ubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM>hj:ubah}(h]h ]h"]h$]h&]uh1jBhj:ubeh}(h]h ]h"]h$]h&]uh1j"hj:hM?hjv:ubj#)}(h/``phys_addr_t size`` size of free area to find h](j))}(h``phys_addr_t size``h]h)}(hj;h]hphys_addr_t size}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;ubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM@hj;ubjC)}(hhh]h)}(hsize of free area to findh]hsize of free area to find}(hj/;hj-;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj);hM@hj*;ubah}(h]h ]h"]h$]h&]uh1jBhj;ubeh}(h]h ]h"]h$]h&]uh1j"hj);hM@hjv:ubj#)}(h5``phys_addr_t align`` alignment of free area to find h](j))}(h``phys_addr_t align``h]h)}(hjM;h]hphys_addr_t align}(hhhjO;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjK;ubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMAhjG;ubjC)}(hhh]h)}(halignment of free area to findh]halignment of free area to find}(hjh;hjf;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjb;hMAhjc;ubah}(h]h ]h"]h$]h&]uh1jBhjG;ubeh}(h]h ]h"]h$]h&]uh1j"hjb;hMAhjv:ubeh}(h]h ]h"]h$]h&]uh1jhjZ:ubh)}(h**Description**h]j)}(hj;h]h Description}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMChjZ:ubh)}(hDFind **size** free area aligned to **align** in the specified range.h](hFind }(hFind hj;hhhNhNubj)}(h**size**h]hsize}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubh free area aligned to }(h free area aligned to hj;hhhNhNubj)}(h **align**h]halign}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubh in the specified range.}(h in the specified range.hj;hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMChjZ:ubh)}(h **Return**h]j)}(hj;h]hReturn}(hhhj;hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMEhjZ:ubh)}(h'Found address on success, 0 on failure.h]h'Found address on success, 0 on failure.}(hj;hj;hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMGhjZ:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjChhhNhNubjc)}(hhh]h}(h]h ]h"]h$]h&]entries](jomemblock_discard (C function)c.memblock_discardhNtauh1jbhjChhhNhNubjt)}(hhh](jy)}(hvoid memblock_discard (void)h]j)}(hvoid memblock_discard(void)h](jQ!)}(hvoidh]hvoid}(hhhj<hhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hj<hhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMrubj)}(h h]h }(hhhj*<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj<hhhj)<hMrubj)}(hmemblock_discardh]j)}(hmemblock_discardh]hmemblock_discard}(hhhj<<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8<ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj<hhhj)<hMrubj!)}(h(void)h]j!)}(hvoidh]jQ!)}(hvoidh]hvoid}(hhhjX<hhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hjT<ubah}(h]h ]h"]h$]h&]noemphjjuh1j!hjP<ubah}(h]h ]h"]h$]h&]jjuh1j!hj<hhhj)<hMrubeh}(h]h ]h"]h$]h&]jjjuh1j~jjhj<hhhj)<hMrubah}(h]j<ah ](jjeh"]h$]h&]juh1jxhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMshj<hhubj)}(hhh]h)}(h9discard memory and reserved arrays if they were allocatedh]h9discard memory and reserved arrays if they were allocated}(hj<hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMqhj<hhubah}(h]h ]h"]h$]h&]uh1jhj<hhhj)<hMrubeh}(h]h ](hfunctioneh"]h$]h&]jhjj<jj<juh1jshhhjChNhNubj)}(h'**Parameters** ``void`` no argumentsh](h)}(h**Parameters**h]j)}(hj<h]h Parameters}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj<ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMuhj<ubj)}(hhh]j#)}(h``void`` no argumentsh](j))}(h``void``h]h)}(hj<h]hvoid}(hhhj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj<ubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMwhj<ubjC)}(hhh]h)}(h no argumentsh]h no arguments}(hj<hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMxhj<ubah}(h]h ]h"]h$]h&]uh1jBhj<ubeh}(h]h ]h"]h$]h&]uh1j"hj<hMwhj<ubah}(h]h ]h"]h$]h&]uh1jhj<ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjChhhNhNubjc)}(hhh]h}(h]h ]h"]h$]h&]entries](jo"memblock_double_array (C function)c.memblock_double_arrayhNtauh1jbhjChhhNhNubjt)}(hhh](jy)}(h}int __init_memblock memblock_double_array (struct memblock_type *type, phys_addr_t new_area_start, phys_addr_t new_area_size)h]j)}(h|int __init_memblock memblock_double_array(struct memblock_type *type, phys_addr_t new_area_start, phys_addr_t new_area_size)h](jQ!)}(hinth]hint}(hhhj=hhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hj=hhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMubj)}(h h]h }(hhhj-=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhj,=hMubh__init_memblock}(hhhj=hhhNhNubj)}(h h]h }(hhhj?=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=hhhj,=hMubj)}(hmemblock_double_arrayh]j)}(hmemblock_double_arrayh]hmemblock_double_array}(hhhjQ=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjM=ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj=hhhj,=hMubj!)}(hS(struct memblock_type *type, phys_addr_t new_area_start, phys_addr_t new_area_size)h](j!)}(hstruct memblock_type *typeh](j)}(hjh]hstruct}(hhhjm=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhji=ubj)}(h h]h }(hhhjz=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhji=ubh)}(hhh]j)}(h memblock_typeh]h memblock_type}(hhhj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetj=modnameN classnameNj!j!)}j!]j!)}j!jS=sbc.memblock_double_arrayasbuh1hhji=ubj)}(h h]h }(hhhj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhji=ubjU#)}(hj-h]h*}(hhhj=hhhNhNubah}(h]h ]j`#ah"]h$]h&]uh1jT#hji=ubj)}(htypeh]htype}(hhhj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhji=ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hje=ubj!)}(hphys_addr_t new_area_starth](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetj=modnameN classnameNj!j!)}j!]j=c.memblock_double_arrayasbuh1hhj=ubj)}(h h]h }(hhhj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubj)}(hnew_area_starth]hnew_area_start}(hhhj>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hje=ubj!)}(hphys_addr_t new_area_sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhj*>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj'>ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetj,>modnameN classnameNj!j!)}j!]j=c.memblock_double_arrayasbuh1hhj#>ubj)}(h h]h }(hhhjH>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#>ubj)}(h new_area_sizeh]h new_area_size}(hhhjV>hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj#>ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hje=ubeh}(h]h ]h"]h$]h&]jjuh1j!hj=hhhj,=hMubeh}(h]h ]h"]h$]h&]jjjuh1j~jjhj=hhhj,=hMubah}(h]j=ah ](jjeh"]h$]h&]juh1jxhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj=hhubj)}(hhh]h)}(h-double the size of the memblock regions arrayh]h-double the size of the memblock regions array}(hj>hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj~>hhubah}(h]h ]h"]h$]h&]uh1jhj=hhhj,=hMubeh}(h]h ](hfunctioneh"]h$]h&]jhjj>jj>juh1jshhhjChNhNubj)}(hX**Parameters** ``struct memblock_type *type`` memblock type of the regions array being doubled ``phys_addr_t new_area_start`` starting address of memory range to avoid overlap with ``phys_addr_t new_area_size`` size of memory range to avoid overlap with **Description** Double the size of the **type** regions array. If memblock is being used to allocate memory for a new reserved regions array and there is a previously allocated memory range [**new_area_start**, **new_area_start** + **new_area_size**] waiting to be reserved, ensure the memory used by the new array does not overlap. **Return** 0 on success, -1 on failure.h](h)}(h**Parameters**h]j)}(hj>h]h Parameters}(hhhj>hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj>ubj)}(hhh](j#)}(hP``struct memblock_type *type`` memblock type of the regions array being doubled h](j))}(h``struct memblock_type *type``h]h)}(hj>h]hstruct memblock_type *type}(hhhj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>ubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj>ubjC)}(hhh]h)}(h0memblock type of the regions array being doubledh]h0memblock type of the regions array being doubled}(hj>hj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>hMhj>ubah}(h]h ]h"]h$]h&]uh1jBhj>ubeh}(h]h ]h"]h$]h&]uh1j"hj>hMhj>ubj#)}(hV``phys_addr_t new_area_start`` starting address of memory range to avoid overlap with h](j))}(h``phys_addr_t new_area_start``h]h)}(hj>h]hphys_addr_t new_area_start}(hhhj>hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>ubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj>ubjC)}(hhh]h)}(h6starting address of memory range to avoid overlap withh]h6starting address of memory range to avoid overlap with}(hj?hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hMhj?ubah}(h]h ]h"]h$]h&]uh1jBhj>ubeh}(h]h ]h"]h$]h&]uh1j"hj?hMhj>ubj#)}(hI``phys_addr_t new_area_size`` size of memory range to avoid overlap with h](j))}(h``phys_addr_t new_area_size``h]h)}(hj4?h]hphys_addr_t new_area_size}(hhhj6?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj2?ubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj.?ubjC)}(hhh]h)}(h*size of memory range to avoid overlap withh]h*size of memory range to avoid overlap with}(hjO?hjM?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjI?hMhjJ?ubah}(h]h ]h"]h$]h&]uh1jBhj.?ubeh}(h]h ]h"]h$]h&]uh1j"hjI?hMhj>ubeh}(h]h ]h"]h$]h&]uh1jhj>ubh)}(h**Description**h]j)}(hjo?h]h Description}(hhhjq?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjm?ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj>ubh)}(hX<Double the size of the **type** regions array. If memblock is being used to allocate memory for a new reserved regions array and there is a previously allocated memory range [**new_area_start**, **new_area_start** + **new_area_size**] waiting to be reserved, ensure the memory used by the new array does not overlap.h](hDouble the size of the }(hDouble the size of the hj?hhhNhNubj)}(h**type**h]htype}(hhhj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubh regions array. If memblock is being used to allocate memory for a new reserved regions array and there is a previously allocated memory range [}(h regions array. If memblock is being used to allocate memory for a new reserved regions array and there is a previously allocated memory range [hj?hhhNhNubj)}(h**new_area_start**h]hnew_area_start}(hhhj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubh, }(h, hj?hhhNhNubj)}(h**new_area_start**h]hnew_area_start}(hhhj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubh + }(h + hj?hhhNhNubj)}(h**new_area_size**h]h new_area_size}(hhhj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubhS] waiting to be reserved, ensure the memory used by the new array does not overlap.}(hS] waiting to be reserved, ensure the memory used by the new array does not overlap.hj?hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj>ubh)}(h **Return**h]j)}(hj?h]hReturn}(hhhj?hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj?ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj>ubh)}(h0 on success, -1 on failure.h]h0 on success, -1 on failure.}(hj?hj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj>ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjChhhNhNubjc)}(hhh]h}(h]h ]h"]h$]h&]entries](jo#memblock_merge_regions (C function)c.memblock_merge_regionshNtauh1jbhjChhhNhNubjt)}(hhh](jy)}(hxvoid __init_memblock memblock_merge_regions (struct memblock_type *type, unsigned long start_rgn, unsigned long end_rgn)h]j)}(hwvoid __init_memblock memblock_merge_regions(struct memblock_type *type, unsigned long start_rgn, unsigned long end_rgn)h](jQ!)}(hvoidh]hvoid}(hhhj(@hhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hj$@hhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMubj)}(h h]h }(hhhj7@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$@hhhj6@hMubh__init_memblock}(hhhj$@hhhNhNubj)}(h h]h }(hhhjI@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj$@hhhj6@hMubj)}(hmemblock_merge_regionsh]j)}(hmemblock_merge_regionsh]hmemblock_merge_regions}(hhhj[@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjW@ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj$@hhhj6@hMubj!)}(hL(struct memblock_type *type, unsigned long start_rgn, unsigned long end_rgn)h](j!)}(hstruct memblock_type *typeh](j)}(hjh]hstruct}(hhhjw@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjs@ubj)}(h h]h }(hhhj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjs@ubh)}(hhh]j)}(h memblock_typeh]h memblock_type}(hhhj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetj@modnameN classnameNj!j!)}j!]j!)}j!j]@sbc.memblock_merge_regionsasbuh1hhjs@ubj)}(h h]h }(hhhj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjs@ubjU#)}(hj-h]h*}(hhhj@hhhNhNubah}(h]h ]j`#ah"]h$]h&]uh1jT#hjs@ubj)}(htypeh]htype}(hhhj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjs@ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjo@ubj!)}(hunsigned long start_rgnh](jQ!)}(hunsignedh]hunsigned}(hhhj@hhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hj@ubj)}(h h]h }(hhhj@hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubjQ!)}(hlongh]hlong}(hhhjAhhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hj@ubj)}(h h]h }(hhhjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubj)}(h start_rgnh]h start_rgn}(hhhj!AhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj@ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjo@ubj!)}(hunsigned long end_rgnh](jQ!)}(hunsignedh]hunsigned}(hhhj:AhhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hj6Aubj)}(h h]h }(hhhjHAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6AubjQ!)}(hlongh]hlong}(hhhjVAhhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hj6Aubj)}(h h]h }(hhhjdAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6Aubj)}(hend_rgnh]hend_rgn}(hhhjrAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6Aubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjo@ubeh}(h]h ]h"]h$]h&]jjuh1j!hj$@hhhj6@hMubeh}(h]h ]h"]h$]h&]jjjuh1j~jjhj @hhhj6@hMubah}(h]j@ah ](jjeh"]h$]h&]juh1jxhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj@hhubj)}(hhh]h)}(h$merge neighboring compatible regionsh]h$merge neighboring compatible regions}(hjAhjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjAhhubah}(h]h ]h"]h$]h&]uh1jhj@hhhj6@hMubeh}(h]h ](hfunctioneh"]h$]h&]jhjjAjjAjuh1jshhhjChNhNubj)}(hX)**Parameters** ``struct memblock_type *type`` memblock type to scan ``unsigned long start_rgn`` start scanning from (**start_rgn** - 1) ``unsigned long end_rgn`` end scanning at (**end_rgn** - 1) Scan **type** and merge neighboring compatible regions in [**start_rgn** - 1, **end_rgn**)h](h)}(h**Parameters**h]j)}(hjAh]h Parameters}(hhhjAhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjAubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjAubj)}(hhh](j#)}(h5``struct memblock_type *type`` memblock type to scan h](j))}(h``struct memblock_type *type``h]h)}(hjAh]hstruct memblock_type *type}(hhhjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjAubjC)}(hhh]h)}(hmemblock type to scanh]hmemblock type to scan}(hjAhjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjAhMhjAubah}(h]h ]h"]h$]h&]uh1jBhjAubeh}(h]h ]h"]h$]h&]uh1j"hjAhMhjAubj#)}(hD``unsigned long start_rgn`` start scanning from (**start_rgn** - 1) h](j))}(h``unsigned long start_rgn``h]h)}(hjBh]hunsigned long start_rgn}(hhhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjBubjC)}(hhh]h)}(h'start scanning from (**start_rgn** - 1)h](hstart scanning from (}(hstart scanning from (hj0BhhhNhNubj)}(h **start_rgn**h]h start_rgn}(hhhj9BhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj0Bubh - 1)}(h - 1)hj0BhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj,BhMhj-Bubah}(h]h ]h"]h$]h&]uh1jBhjBubeh}(h]h ]h"]h$]h&]uh1j"hj,BhMhjAubj#)}(h``unsigned long end_rgn`` end scanning at (**end_rgn** - 1) Scan **type** and merge neighboring compatible regions in [**start_rgn** - 1, **end_rgn**)h](j))}(h``unsigned long end_rgn``h]h)}(hjdBh]hunsigned long end_rgn}(hhhjfBhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjbBubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj^BubjC)}(hhh]h)}(h|end scanning at (**end_rgn** - 1) Scan **type** and merge neighboring compatible regions in [**start_rgn** - 1, **end_rgn**)h](hend scanning at (}(hend scanning at (hj}BhhhNhNubj)}(h **end_rgn**h]hend_rgn}(hhhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}Bubh - 1) Scan }(h - 1) Scan hj}BhhhNhNubj)}(h**type**h]htype}(hhhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}Bubh. and merge neighboring compatible regions in [}(h. and merge neighboring compatible regions in [hj}BhhhNhNubj)}(h **start_rgn**h]h start_rgn}(hhhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}Bubh - 1, }(h - 1, hj}BhhhNhNubj)}(h **end_rgn**h]hend_rgn}(hhhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}Bubh)}(h)hj}BhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjyBhMhjzBubah}(h]h ]h"]h$]h&]uh1jBhj^Bubeh}(h]h ]h"]h$]h&]uh1j"hjyBhMhjAubeh}(h]h ]h"]h$]h&]uh1jhjAubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjChhhNhNubjc)}(hhh]h}(h]h ]h"]h$]h&]entries](jo#memblock_insert_region (C function)c.memblock_insert_regionhNtauh1jbhjChhhNhNubjt)}(hhh](jy)}(hvoid __init_memblock memblock_insert_region (struct memblock_type *type, int idx, phys_addr_t base, phys_addr_t size, int nid, enum memblock_flags flags)h]j)}(hvoid __init_memblock memblock_insert_region(struct memblock_type *type, int idx, phys_addr_t base, phys_addr_t size, int nid, enum memblock_flags flags)h](jQ!)}(hvoidh]hvoid}(hhhj ChhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hjChhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM ubj)}(h h]h }(hhhjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhjChM ubh__init_memblock}(hhhjChhhNhNubj)}(h h]h }(hhhj+ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjChhhjChM ubj)}(hmemblock_insert_regionh]j)}(hmemblock_insert_regionh]hmemblock_insert_region}(hhhj=ChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9Cubah}(h]h ](jjeh"]h$]h&]jjuh1jhjChhhjChM ubj!)}(hm(struct memblock_type *type, int idx, phys_addr_t base, phys_addr_t size, int nid, enum memblock_flags flags)h](j!)}(hstruct memblock_type *typeh](j)}(hjh]hstruct}(hhhjYChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUCubj)}(h h]h }(hhhjfChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUCubh)}(hhh]j)}(h memblock_typeh]h memblock_type}(hhhjwChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjtCubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjyCmodnameN classnameNj!j!)}j!]j!)}j!j?Csbc.memblock_insert_regionasbuh1hhjUCubj)}(h h]h }(hhhjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUCubjU#)}(hj-h]h*}(hhhjChhhNhNubah}(h]h ]j`#ah"]h$]h&]uh1jT#hjUCubj)}(htypeh]htype}(hhhjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUCubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjQCubj!)}(hint idxh](jQ!)}(hinth]hint}(hhhjChhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hjCubj)}(h h]h }(hhhjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj)}(hidxh]hidx}(hhhjChhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjQCubj!)}(hphys_addr_t baseh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjDmodnameN classnameNj!j!)}j!]jCc.memblock_insert_regionasbuh1hhjCubj)}(h h]h }(hhhj!DhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj)}(hbaseh]hbase}(hhhj/DhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjQCubj!)}(hphys_addr_t sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhjKDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHDubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjMDmodnameN classnameNj!j!)}j!]jCc.memblock_insert_regionasbuh1hhjDDubj)}(h h]h }(hhhjiDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDDubj)}(hsizeh]hsize}(hhhjwDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDDubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjQCubj!)}(hint nidh](jQ!)}(hinth]hint}(hhhjDhhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hjDubj)}(h h]h }(hhhjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(hnidh]hnid}(hhhjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjQCubj!)}(henum memblock_flags flagsh](j)}(hjh]henum}(hhhjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(h h]h }(hhhjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubh)}(hhh]j)}(hmemblock_flagsh]hmemblock_flags}(hhhjDhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjDmodnameN classnameNj!j!)}j!]jCc.memblock_insert_regionasbuh1hhjDubj)}(h h]h }(hhhjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubj)}(hflagsh]hflags}(hhhjEhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjDubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjQCubeh}(h]h ]h"]h$]h&]jjuh1j!hjChhhjChM ubeh}(h]h ]h"]h$]h&]jjjuh1j~jjhjChhhjChM ubah}(h]jBah ](jjeh"]h$]h&]juh1jxhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM*hjBhhubj)}(hhh]h)}(hinsert new memblock regionh]hinsert new memblock region}(hjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubh. }(h. hjFhhhNhNubj)}(h**type**h]htype}(hhhjQGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjFubh< must already have extra room to accommodate the new region.}(h< must already have extra room to accommodate the new region.hjFhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM'hjVEubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjChhhNhNubjc)}(hhh]h}(h]h ]h"]h$]h&]entries](jomemblock_add_range (C function)c.memblock_add_rangehNtauh1jbhjChhhNhNubjt)}(hhh](jy)}(hint __init_memblock memblock_add_range (struct memblock_type *type, phys_addr_t base, phys_addr_t size, int nid, enum memblock_flags flags)h]j)}(hint __init_memblock memblock_add_range(struct memblock_type *type, phys_addr_t base, phys_addr_t size, int nid, enum memblock_flags flags)h](jQ!)}(hinth]hint}(hhhjGhhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hjGhhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM>ubj)}(h h]h }(hhhjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhhjGhM>ubh__init_memblock}(hhhjGhhhNhNubj)}(h h]h }(hhhjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGhhhjGhM>ubj)}(hmemblock_add_rangeh]j)}(hmemblock_add_rangeh]hmemblock_add_range}(hhhjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ](jjeh"]h$]h&]jjuh1jhjGhhhjGhM>ubj!)}(hd(struct memblock_type *type, phys_addr_t base, phys_addr_t size, int nid, enum memblock_flags flags)h](j!)}(hstruct memblock_type *typeh](j)}(hjh]hstruct}(hhhjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubj)}(h h]h }(hhhjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubh)}(hhh]j)}(h memblock_typeh]h memblock_type}(hhhjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjGmodnameN classnameNj!j!)}j!]j!)}j!jGsbc.memblock_add_rangeasbuh1hhjGubj)}(h h]h }(hhhjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubjU#)}(hj-h]h*}(hhhj&HhhhNhNubah}(h]h ]j`#ah"]h$]h&]uh1jT#hjGubj)}(htypeh]htype}(hhhj3HhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjGubj!)}(hphys_addr_t baseh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhjOHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLHubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjQHmodnameN classnameNj!j!)}j!]jHc.memblock_add_rangeasbuh1hhjHHubj)}(h h]h }(hhhjmHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHHubj)}(hbaseh]hbase}(hhhj{HhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHHubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjGubj!)}(hphys_addr_t sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjHmodnameN classnameNj!j!)}j!]jHc.memblock_add_rangeasbuh1hhjHubj)}(h h]h }(hhhjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(hsizeh]hsize}(hhhjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjGubj!)}(hint nidh](jQ!)}(hinth]hint}(hhhjHhhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hjHubj)}(h h]h }(hhhjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubj)}(hnidh]hnid}(hhhjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjGubj!)}(henum memblock_flags flagsh](j)}(hjh]henum}(hhhjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Iubj)}(h h]h }(hhhjIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Iubh)}(hhh]j)}(hmemblock_flagsh]hmemblock_flags}(hhhj/IhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,Iubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetj1ImodnameN classnameNj!j!)}j!]jHc.memblock_add_rangeasbuh1hhj Iubj)}(h h]h }(hhhjMIhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Iubj)}(hflagsh]hflags}(hhhj[IhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj Iubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjGubeh}(h]h ]h"]h$]h&]jjuh1j!hjGhhhjGhM>ubeh}(h]h ]h"]h$]h&]jjjuh1j~jjhjGhhhjGhM>ubah}(h]j~Gah ](jjeh"]h$]h&]juh1jxhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMLhjGhhubj)}(hhh]h)}(hadd new memblock regionh]hadd new memblock region}(hjIhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM=hjIhhubah}(h]h ]h"]h$]h&]uh1jhjGhhhjGhM>ubeh}(h]h ](hfunctioneh"]h$]h&]jhjjIjjIjuh1jshhhjChNhNubj)}(hXx**Parameters** ``struct memblock_type *type`` memblock type to add new region into ``phys_addr_t base`` base address of the new region ``phys_addr_t size`` size of the new region ``int nid`` nid of the new region ``enum memblock_flags flags`` flags of the new region **Description** Add new memblock region [**base**, **base** + **size**) into **type**. The new region is allowed to overlap with existing ones - overlaps don't affect already existing regions. **type** is guaranteed to be minimal (all neighbouring compatible regions are merged) after the addition. **Return** 0 on success, -errno on failure.h](h)}(h**Parameters**h]j)}(hjIh]h Parameters}(hhhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjIubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMAhjIubj)}(hhh](j#)}(hD``struct memblock_type *type`` memblock type to add new region into h](j))}(h``struct memblock_type *type``h]h)}(hjIh]hstruct memblock_type *type}(hhhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM>hjIubjC)}(hhh]h)}(h$memblock type to add new region intoh]h$memblock type to add new region into}(hjIhjIhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIhM>hjIubah}(h]h ]h"]h$]h&]uh1jBhjIubeh}(h]h ]h"]h$]h&]uh1j"hjIhM>hjIubj#)}(h4``phys_addr_t base`` base address of the new region h](j))}(h``phys_addr_t base``h]h)}(hjJh]hphys_addr_t base}(hhhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM?hjIubjC)}(hhh]h)}(hbase address of the new regionh]hbase address of the new region}(hjJhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhM?hjJubah}(h]h ]h"]h$]h&]uh1jBhjIubeh}(h]h ]h"]h$]h&]uh1j"hjJhM?hjIubj#)}(h,``phys_addr_t size`` size of the new region h](j))}(h``phys_addr_t size``h]h)}(hj9Jh]hphys_addr_t size}(hhhj;JhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj7Jubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM@hj3JubjC)}(hhh]h)}(hsize of the new regionh]hsize of the new region}(hjTJhjRJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNJhM@hjOJubah}(h]h ]h"]h$]h&]uh1jBhj3Jubeh}(h]h ]h"]h$]h&]uh1j"hjNJhM@hjIubj#)}(h"``int nid`` nid of the new region h](j))}(h ``int nid``h]h)}(hjrJh]hint nid}(hhhjtJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjpJubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMAhjlJubjC)}(hhh]h)}(hnid of the new regionh]hnid of the new region}(hjJhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhMAhjJubah}(h]h ]h"]h$]h&]uh1jBhjlJubeh}(h]h ]h"]h$]h&]uh1j"hjJhMAhjIubj#)}(h6``enum memblock_flags flags`` flags of the new region h](j))}(h``enum memblock_flags flags``h]h)}(hjJh]henum memblock_flags flags}(hhhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMBhjJubjC)}(hhh]h)}(hflags of the new regionh]hflags of the new region}(hjJhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjJhMBhjJubah}(h]h ]h"]h$]h&]uh1jBhjJubeh}(h]h ]h"]h$]h&]uh1j"hjJhMBhjIubeh}(h]h ]h"]h$]h&]uh1jhjIubh)}(h**Description**h]j)}(hjJh]h Description}(hhhjJhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMDhjIubh)}(hXAdd new memblock region [**base**, **base** + **size**) into **type**. The new region is allowed to overlap with existing ones - overlaps don't affect already existing regions. **type** is guaranteed to be minimal (all neighbouring compatible regions are merged) after the addition.h](hAdd new memblock region [}(hAdd new memblock region [hjJhhhNhNubj)}(h**base**h]hbase}(hhhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubh, }(h, hjJhhhNhNubj)}(h**base**h]hbase}(hhhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubh + }(h + hjJhhhNhNubj)}(h**size**h]hsize}(hhhj+KhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubh) into }(h) into hjJhhhNhNubj)}(h**type**h]htype}(hhhj>KhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubhp. The new region is allowed to overlap with existing ones - overlaps don’t affect already existing regions. }(hn. The new region is allowed to overlap with existing ones - overlaps don't affect already existing regions. hjJhhhNhNubj)}(h**type**h]htype}(hhhjQKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjJubha is guaranteed to be minimal (all neighbouring compatible regions are merged) after the addition.}(ha is guaranteed to be minimal (all neighbouring compatible regions are merged) after the addition.hjJhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMDhjIubh)}(h **Return**h]j)}(hjmKh]hReturn}(hhhjoKhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjkKubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMIhjIubh)}(h 0 on success, -errno on failure.h]h 0 on success, -errno on failure.}(hjKhjKhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMKhjIubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjChhhNhNubjc)}(hhh]h}(h]h ]h"]h$]h&]entries](jomemblock_add_node (C function)c.memblock_add_nodehNtauh1jbhjChhhNhNubjt)}(hhh](jy)}(hnint __init_memblock memblock_add_node (phys_addr_t base, phys_addr_t size, int nid, enum memblock_flags flags)h]j)}(hmint __init_memblock memblock_add_node(phys_addr_t base, phys_addr_t size, int nid, enum memblock_flags flags)h](jQ!)}(hinth]hint}(hhhjKhhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hjKhhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMubj)}(h h]h }(hhhjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhjKhMubh__init_memblock}(hhhjKhhhNhNubj)}(h h]h }(hhhjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKhhhjKhMubj)}(hmemblock_add_nodeh]j)}(hmemblock_add_nodeh]hmemblock_add_node}(hhhjKhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubah}(h]h ](jjeh"]h$]h&]jjuh1jhjKhhhjKhMubj!)}(hH(phys_addr_t base, phys_addr_t size, int nid, enum memblock_flags flags)h](j!)}(hphys_addr_t baseh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjLmodnameN classnameNj!j!)}j!]j!)}j!jKsbc.memblock_add_nodeasbuh1hhjKubj)}(h h]h }(hhhj$LhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubj)}(hbaseh]hbase}(hhhj2LhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjKubj!)}(hphys_addr_t sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhjNLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjKLubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjPLmodnameN classnameNj!j!)}j!]j Lc.memblock_add_nodeasbuh1hhjGLubj)}(h h]h }(hhhjlLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGLubj)}(hsizeh]hsize}(hhhjzLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGLubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjKubj!)}(hint nidh](jQ!)}(hinth]hint}(hhhjLhhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hjLubj)}(h h]h }(hhhjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(hnidh]hnid}(hhhjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjKubj!)}(henum memblock_flags flagsh](j)}(hjh]henum}(hhhjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(h h]h }(hhhjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubh)}(hhh]j)}(hmemblock_flagsh]hmemblock_flags}(hhhjLhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjLmodnameN classnameNj!j!)}j!]j Lc.memblock_add_nodeasbuh1hhjLubj)}(h h]h }(hhhjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubj)}(hflagsh]hflags}(hhhjMhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjKubeh}(h]h ]h"]h$]h&]jjuh1j!hjKhhhjKhMubeh}(h]h ]h"]h$]h&]jjjuh1j~jjhjKhhhjKhMubah}(h]jKah ](jjeh"]h$]h&]juh1jxhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjKhhubj)}(hhh]h)}(h*add new memblock region within a NUMA nodeh]h*add new memblock region within a NUMA node}(hj?Mhj=MhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj:Mhhubah}(h]h ]h"]h$]h&]uh1jhjKhhhjKhMubeh}(h]h ](hfunctioneh"]h$]h&]jhjjUMjjUMjuh1jshhhjChNhNubj)}(hX**Parameters** ``phys_addr_t base`` base address of the new region ``phys_addr_t size`` size of the new region ``int nid`` nid of the new region ``enum memblock_flags flags`` flags of the new region **Description** Add new memblock region [**base**, **base** + **size**) to the "memory" type. See memblock_add_range() description for mode details **Return** 0 on success, -errno on failure.h](h)}(h**Parameters**h]j)}(hj_Mh]h Parameters}(hhhjaMhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj]Mubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjYMubj)}(hhh](j#)}(h4``phys_addr_t base`` base address of the new region h](j))}(h``phys_addr_t base``h]h)}(hj~Mh]hphys_addr_t base}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj|Mubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjxMubjC)}(hhh]h)}(hbase address of the new regionh]hbase address of the new region}(hjMhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMhMhjMubah}(h]h ]h"]h$]h&]uh1jBhjxMubeh}(h]h ]h"]h$]h&]uh1j"hjMhMhjuMubj#)}(h,``phys_addr_t size`` size of the new region h](j))}(h``phys_addr_t size``h]h)}(hjMh]hphys_addr_t size}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjMubjC)}(hhh]h)}(hsize of the new regionh]hsize of the new region}(hjMhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMhMhjMubah}(h]h ]h"]h$]h&]uh1jBhjMubeh}(h]h ]h"]h$]h&]uh1j"hjMhMhjuMubj#)}(h"``int nid`` nid of the new region h](j))}(h ``int nid``h]h)}(hjMh]hint nid}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjMubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjMubjC)}(hhh]h)}(hnid of the new regionh]hnid of the new region}(hj Nhj NhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjNhMhjNubah}(h]h ]h"]h$]h&]uh1jBhjMubeh}(h]h ]h"]h$]h&]uh1j"hjNhMhjuMubj#)}(h6``enum memblock_flags flags`` flags of the new region h](j))}(h``enum memblock_flags flags``h]h)}(hj)Nh]henum memblock_flags flags}(hhhj+NhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'Nubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj#NubjC)}(hhh]h)}(hflags of the new regionh]hflags of the new region}(hjDNhjBNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>NhMhj?Nubah}(h]h ]h"]h$]h&]uh1jBhj#Nubeh}(h]h ]h"]h$]h&]uh1j"hj>NhMhjuMubeh}(h]h ]h"]h$]h&]uh1jhjYMubh)}(h**Description**h]j)}(hjdNh]h Description}(hhhjfNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjbNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjYMubh)}(hAdd new memblock region [**base**, **base** + **size**) to the "memory" type. See memblock_add_range() description for mode detailsh](hAdd new memblock region [}(hAdd new memblock region [hjzNhhhNhNubj)}(h**base**h]hbase}(hhhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzNubh, }(h, hjzNhhhNhNubj)}(h**base**h]hbase}(hhhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzNubh + }(h + hjzNhhhNhNubj)}(h**size**h]hsize}(hhhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjzNubhQ) to the “memory” type. See memblock_add_range() description for mode details}(hM) to the "memory" type. See memblock_add_range() description for mode detailshjzNhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjYMubh)}(h **Return**h]j)}(hjNh]hReturn}(hhhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjYMubh)}(h 0 on success, -errno on failure.h]h 0 on success, -errno on failure.}(hjNhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjYMubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjChhhNhNubjc)}(hhh]h}(h]h ]h"]h$]h&]entries](jomemblock_add (C function)c.memblock_addhNtauh1jbhjChhhNhNubjt)}(hhh](jy)}(hEint __init_memblock memblock_add (phys_addr_t base, phys_addr_t size)h]j)}(hDint __init_memblock memblock_add(phys_addr_t base, phys_addr_t size)h](jQ!)}(hinth]hint}(hhhj OhhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hjOhhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMubj)}(h h]h }(hhhjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOhhhjOhMubh__init_memblock}(hhhjOhhhNhNubj)}(h h]h }(hhhj+OhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOhhhjOhMubj)}(h memblock_addh]j)}(h memblock_addh]h memblock_add}(hhhj=OhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9Oubah}(h]h ](jjeh"]h$]h&]jjuh1jhjOhhhjOhMubj!)}(h$(phys_addr_t base, phys_addr_t size)h](j!)}(hphys_addr_t baseh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhj\OhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYOubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetj^OmodnameN classnameNj!j!)}j!]j!)}j!j?Osbc.memblock_addasbuh1hhjUOubj)}(h h]h }(hhhj|OhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUOubj)}(hbaseh]hbase}(hhhjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUOubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjQOubj!)}(hphys_addr_t sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjOmodnameN classnameNj!j!)}j!]jxOc.memblock_addasbuh1hhjOubj)}(h h]h }(hhhjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubj)}(hsizeh]hsize}(hhhjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjOubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjQOubeh}(h]h ]h"]h$]h&]jjuh1j!hjOhhhjOhMubeh}(h]h ]h"]h$]h&]jjjuh1j~jjhjOhhhjOhMubah}(h]jNah ](jjeh"]h$]h&]juh1jxhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjNhhubj)}(hhh]h)}(hadd new memblock regionh]hadd new memblock region}(hjOhjOhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjOhhubah}(h]h ]h"]h$]h&]uh1jhjNhhhjOhMubeh}(h]h ](hfunctioneh"]h$]h&]jhjjPjjPjuh1jshhhjChNhNubj)}(hX:**Parameters** ``phys_addr_t base`` base address of the new region ``phys_addr_t size`` size of the new region **Description** Add new memblock region [**base**, **base** + **size**) to the "memory" type. See memblock_add_range() description for mode details **Return** 0 on success, -errno on failure.h](h)}(h**Parameters**h]j)}(hjPh]h Parameters}(hhhj!PhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjPubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjPubj)}(hhh](j#)}(h4``phys_addr_t base`` base address of the new region h](j))}(h``phys_addr_t base``h]h)}(hj>Ph]hphys_addr_t base}(hhhj@PhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj**Parameters** ``unsigned long threshold_bytes`` maximal number of pages that can have unassigned node ID (in bytes). **Description** A buggy firmware may report memory that does not belong to any node. Check if amount of such memory is below **threshold_bytes**. **Return** true on success, false on failure.h](h)}(h**Parameters**h]j)}(hj,Rh]h Parameters}(hhhj.RhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*Rubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj&Rubj)}(hhh]j#)}(hg``unsigned long threshold_bytes`` maximal number of pages that can have unassigned node ID (in bytes). h](j))}(h!``unsigned long threshold_bytes``h]h)}(hjKRh]hunsigned long threshold_bytes}(hhhjMRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIRubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjERubjC)}(hhh]h)}(hDmaximal number of pages that can have unassigned node ID (in bytes).h]hDmaximal number of pages that can have unassigned node ID (in bytes).}(hjfRhjdRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjaRubah}(h]h ]h"]h$]h&]uh1jBhjERubeh}(h]h ]h"]h$]h&]uh1j"hj`RhMhjBRubah}(h]h ]h"]h$]h&]uh1jhj&Rubh)}(h**Description**h]j)}(hjRh]h Description}(hhhjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj&Rubh)}(hA buggy firmware may report memory that does not belong to any node. Check if amount of such memory is below **threshold_bytes**.h](hmA buggy firmware may report memory that does not belong to any node. Check if amount of such memory is below }(hmA buggy firmware may report memory that does not belong to any node. Check if amount of such memory is below hjRhhhNhNubj)}(h**threshold_bytes**h]hthreshold_bytes}(hhhjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubh.}(h.hjRhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj&Rubh)}(h **Return**h]j)}(hjRh]hReturn}(hhhjRhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjRubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj&Rubh)}(h"true on success, false on failure.h]h"true on success, false on failure.}(hjRhjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj&Rubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjChhhNhNubjc)}(hhh]h}(h]h ]h"]h$]h&]entries](jo#memblock_isolate_range (C function)c.memblock_isolate_rangehNtauh1jbhjChhhNhNubjt)}(hhh](jy)}(hint __init_memblock memblock_isolate_range (struct memblock_type *type, phys_addr_t base, phys_addr_t size, int *start_rgn, int *end_rgn)h]j)}(hint __init_memblock memblock_isolate_range(struct memblock_type *type, phys_addr_t base, phys_addr_t size, int *start_rgn, int *end_rgn)h](jQ!)}(hinth]hint}(hhhjShhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hjShhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMubj)}(h h]h }(hhhjShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhjShMubh__init_memblock}(hhhjShhhNhNubj)}(h h]h }(hhhj(ShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjShhhjShMubj)}(hmemblock_isolate_rangeh]j)}(hmemblock_isolate_rangeh]hmemblock_isolate_range}(hhhj:ShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj6Subah}(h]h ](jjeh"]h$]h&]jjuh1jhjShhhjShMubj!)}(h^(struct memblock_type *type, phys_addr_t base, phys_addr_t size, int *start_rgn, int *end_rgn)h](j!)}(hstruct memblock_type *typeh](j)}(hjh]hstruct}(hhhjVShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRSubj)}(h h]h }(hhhjcShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRSubh)}(hhh]j)}(h memblock_typeh]h memblock_type}(hhhjtShhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqSubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjvSmodnameN classnameNj!j!)}j!]j!)}j!j``int *end_rgn`` out parameter for the end of isolated region h](j))}(h``int *end_rgn``h]h)}(hjVh]h int *end_rgn}(hhhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM hj VubjC)}(hhh]h)}(h,out parameter for the end of isolated regionh]h,out parameter for the end of isolated region}(hj.Vhj,VhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(VhM hj)Vubah}(h]h ]h"]h$]h&]uh1jBhj Vubeh}(h]h ]h"]h$]h&]uh1j"hj(VhM hj&Uubeh}(h]h ]h"]h$]h&]uh1jhj Uubh)}(h**Description**h]j)}(hjNVh]h Description}(hhhjPVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjLVubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM hj Uubh)}(hX-Walk **type** and ensure that regions don't cross the boundaries defined by [**base**, **base** + **size**). Crossing regions are split at the boundaries, which may create at most two more regions. The index of the first region inside the range is returned in ***start_rgn** and end in ***end_rgn**.h](hWalk }(hWalk hjdVhhhNhNubj)}(h**type**h]htype}(hhhjmVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdVubhB and ensure that regions don’t cross the boundaries defined by [}(h@ and ensure that regions don't cross the boundaries defined by [hjdVhhhNhNubj)}(h**base**h]hbase}(hhhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdVubh, }(h, hjdVhhhNhNubj)}(h**base**h]hbase}(hhhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdVubh + }(h + hjdVhhhNhNubj)}(h**size**h]hsize}(hhhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdVubh). Crossing regions are split at the boundaries, which may create at most two more regions. The index of the first region inside the range is returned in }(h). Crossing regions are split at the boundaries, which may create at most two more regions. The index of the first region inside the range is returned in hjdVhhhNhNubj)}(h***start_rgn**h]h *start_rgn}(hhhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdVubh and end in }(h and end in hjdVhhhNhNubj)}(h ***end_rgn**h]h*end_rgn}(hhhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjdVubh.}(hjRhjdVhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM hj Uubh)}(h **Return**h]j)}(hjVh]hReturn}(hhhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj Uubh)}(h 0 on success, -errno on failure.h]h 0 on success, -errno on failure.}(hjVhjVhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj Uubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjChhhNhNubjc)}(hhh]h}(h]h ]h"]h$]h&]entries](jomemblock_free (C function)c.memblock_freehNtauh1jbhjChhhNhNubjt)}(hhh](jy)}(h;void __init_memblock memblock_free (void *ptr, size_t size)h]j)}(h:void __init_memblock memblock_free(void *ptr, size_t size)h](jQ!)}(hvoidh]hvoid}(hhhj,WhhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hj(WhhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMkubj)}(h h]h }(hhhj;WhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(Whhhj:WhMkubh__init_memblock}(hhhj(WhhhNhNubj)}(h h]h }(hhhjMWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj(Whhhj:WhMkubj)}(h memblock_freeh]j)}(h memblock_freeh]h memblock_free}(hhhj_WhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[Wubah}(h]h ](jjeh"]h$]h&]jjuh1jhj(Whhhj:WhMkubj!)}(h(void *ptr, size_t size)h](j!)}(h void *ptrh](jQ!)}(hvoidh]hvoid}(hhhj{WhhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hjwWubj)}(h h]h }(hhhjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwWubjU#)}(hj-h]h*}(hhhjWhhhNhNubah}(h]h ]j`#ah"]h$]h&]uh1jT#hjwWubj)}(hptrh]hptr}(hhhjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwWubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjsWubj!)}(h size_t sizeh](h)}(hhh]j)}(hsize_th]hsize_t}(hhhjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjWmodnameN classnameNj!j!)}j!]j!)}j!jaWsbc.memblock_freeasbuh1hhjWubj)}(h h]h }(hhhjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubj)}(hsizeh]hsize}(hhhjWhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjWubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjsWubeh}(h]h ]h"]h$]h&]jjuh1j!hj(Whhhj:WhMkubeh}(h]h ]h"]h$]h&]jjjuh1j~jjhj$Whhhj:WhMkubah}(h]jWah ](jjeh"]h$]h&]juh1jxhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMqhj!Whhubj)}(hhh]h)}(hfree boot memory allocationh]hfree boot memory allocation}(hjXhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMjhjXhhubah}(h]h ]h"]h$]h&]uh1jhj!Whhhj:WhMkubeh}(h]h ](hfunctioneh"]h$]h&]jhjj1Xjj1Xjuh1jshhhjChNhNubj)}(hX#**Parameters** ``void *ptr`` starting address of the boot memory allocation ``size_t size`` size of the boot memory block in bytes **Description** Free boot memory block previously allocated by memblock_alloc_xx() API. The freeing memory will not be released to the buddy allocator.h](h)}(h**Parameters**h]j)}(hj;Xh]h Parameters}(hhhj=XhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj9Xubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMnhj5Xubj)}(hhh](j#)}(h>``void *ptr`` starting address of the boot memory allocation h](j))}(h ``void *ptr``h]h)}(hjZXh]h void *ptr}(hhhj\XhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXXubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMkhjTXubjC)}(hhh]h)}(h/starting address of the boot memory allocationh]h/starting address of the boot memory allocation}(hjuXhjsXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjoXhMkhjpXubah}(h]h ]h"]h$]h&]uh1jBhjTXubeh}(h]h ]h"]h$]h&]uh1j"hjoXhMkhjQXubj#)}(h7``size_t size`` size of the boot memory block in bytes h](j))}(h``size_t size``h]h)}(hjXh]h size_t size}(hhhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMlhjXubjC)}(hhh]h)}(h&size of the boot memory block in bytesh]h&size of the boot memory block in bytes}(hjXhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXhMlhjXubah}(h]h ]h"]h$]h&]uh1jBhjXubeh}(h]h ]h"]h$]h&]uh1j"hjXhMlhjQXubeh}(h]h ]h"]h$]h&]uh1jhj5Xubh)}(h**Description**h]j)}(hjXh]h Description}(hhhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjXubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMnhj5Xubh)}(hFree boot memory block previously allocated by memblock_alloc_xx() API. The freeing memory will not be released to the buddy allocator.h]hFree boot memory block previously allocated by memblock_alloc_xx() API. The freeing memory will not be released to the buddy allocator.}(hjXhjXhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMnhj5Xubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjChhhNhNubjc)}(hhh]h}(h]h ]h"]h$]h&]entries](jomemblock_phys_free (C function)c.memblock_phys_freehNtauh1jbhjChhhNhNubjt)}(hhh](jy)}(hKint __init_memblock memblock_phys_free (phys_addr_t base, phys_addr_t size)h]j)}(hJint __init_memblock memblock_phys_free(phys_addr_t base, phys_addr_t size)h](jQ!)}(hinth]hint}(hhhjYhhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hjYhhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMyubj)}(h h]h }(hhhj"YhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhhj!YhMyubh__init_memblock}(hhhjYhhhNhNubj)}(h h]h }(hhhj4YhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYhhhj!YhMyubj)}(hmemblock_phys_freeh]j)}(hmemblock_phys_freeh]hmemblock_phys_free}(hhhjFYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBYubah}(h]h ](jjeh"]h$]h&]jjuh1jhjYhhhj!YhMyubj!)}(h$(phys_addr_t base, phys_addr_t size)h](j!)}(hphys_addr_t baseh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhjeYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbYubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjgYmodnameN classnameNj!j!)}j!]j!)}j!jHYsbc.memblock_phys_freeasbuh1hhj^Yubj)}(h h]h }(hhhjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^Yubj)}(hbaseh]hbase}(hhhjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^Yubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjZYubj!)}(hphys_addr_t sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjYmodnameN classnameNj!j!)}j!]jYc.memblock_phys_freeasbuh1hhjYubj)}(h h]h }(hhhjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubj)}(hsizeh]hsize}(hhhjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjZYubeh}(h]h ]h"]h$]h&]jjuh1j!hjYhhhj!YhMyubeh}(h]h ]h"]h$]h&]jjjuh1j~jjhj Yhhhj!YhMyubah}(h]jYah ](jjeh"]h$]h&]juh1jxhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjYhhubj)}(hhh]h)}(hfree boot memory blockh]hfree boot memory block}(hjZhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMxhjZhhubah}(h]h ]h"]h$]h&]uh1jhjYhhhj!YhMyubeh}(h]h ](hfunctioneh"]h$]h&]jhjjZjjZjuh1jshhhjChNhNubj)}(hX4**Parameters** ``phys_addr_t base`` phys starting address of the boot memory block ``phys_addr_t size`` size of the boot memory block in bytes **Description** Free boot memory block previously allocated by memblock_phys_alloc_xx() API. The freeing memory will not be released to the buddy allocator.h](h)}(h**Parameters**h]j)}(hj(Zh]h Parameters}(hhhj*ZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj&Zubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM|hj"Zubj)}(hhh](j#)}(hE``phys_addr_t base`` phys starting address of the boot memory block h](j))}(h``phys_addr_t base``h]h)}(hjGZh]hphys_addr_t base}(hhhjIZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjEZubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMyhjAZubjC)}(hhh]h)}(h/phys starting address of the boot memory blockh]h/phys starting address of the boot memory block}(hjbZhj`ZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\ZhMyhj]Zubah}(h]h ]h"]h$]h&]uh1jBhjAZubeh}(h]h ]h"]h$]h&]uh1j"hj\ZhMyhj>Zubj#)}(h<``phys_addr_t size`` size of the boot memory block in bytes h](j))}(h``phys_addr_t size``h]h)}(hjZh]hphys_addr_t size}(hhhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~Zubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMzhjzZubjC)}(hhh]h)}(h&size of the boot memory block in bytesh]h&size of the boot memory block in bytes}(hjZhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZhMzhjZubah}(h]h ]h"]h$]h&]uh1jBhjzZubeh}(h]h ]h"]h$]h&]uh1j"hjZhMzhj>Zubeh}(h]h ]h"]h$]h&]uh1jhj"Zubh)}(h**Description**h]j)}(hjZh]h Description}(hhhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjZubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM|hj"Zubh)}(hFree boot memory block previously allocated by memblock_phys_alloc_xx() API. The freeing memory will not be released to the buddy allocator.h]hFree boot memory block previously allocated by memblock_phys_alloc_xx() API. The freeing memory will not be released to the buddy allocator.}(hjZhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM|hj"Zubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjChhhNhNubjc)}(hhh]h}(h]h ]h"]h$]h&]entries](jo!memblock_setclr_flag (C function)c.memblock_setclr_flaghNtauh1jbhjChhhNhNubjt)}(hhh](jy)}(h|int __init_memblock memblock_setclr_flag (struct memblock_type *type, phys_addr_t base, phys_addr_t size, int set, int flag)h]j)}(h{int __init_memblock memblock_setclr_flag(struct memblock_type *type, phys_addr_t base, phys_addr_t size, int set, int flag)h](jQ!)}(hinth]hint}(hhhj[hhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hjZhhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMubj)}(h h]h }(hhhj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhj[hMubh__init_memblock}(hhhjZhhhNhNubj)}(h h]h }(hhhj![hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZhhhj[hMubj)}(hmemblock_setclr_flagh]j)}(hmemblock_setclr_flagh]hmemblock_setclr_flag}(hhhj3[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/[ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjZhhhj[hMubj!)}(hS(struct memblock_type *type, phys_addr_t base, phys_addr_t size, int set, int flag)h](j!)}(hstruct memblock_type *typeh](j)}(hjh]hstruct}(hhhjO[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK[ubj)}(h h]h }(hhhj\[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK[ubh)}(hhh]j)}(h memblock_typeh]h memblock_type}(hhhjm[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjj[ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjo[modnameN classnameNj!j!)}j!]j!)}j!j5[sbc.memblock_setclr_flagasbuh1hhjK[ubj)}(h h]h }(hhhj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK[ubjU#)}(hj-h]h*}(hhhj[hhhNhNubah}(h]h ]j`#ah"]h$]h&]uh1jT#hjK[ubj)}(htypeh]htype}(hhhj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjK[ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjG[ubj!)}(hphys_addr_t baseh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetj[modnameN classnameNj!j!)}j!]j[c.memblock_setclr_flagasbuh1hhj[ubj)}(h h]h }(hhhj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubj)}(hbaseh]hbase}(hhhj[hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj[ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjG[ubj!)}(hphys_addr_t sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhj \hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj \ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetj\modnameN classnameNj!j!)}j!]j[c.memblock_setclr_flagasbuh1hhj\ubj)}(h h]h }(hhhj*\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj)}(hsizeh]hsize}(hhhj8\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjG[ubj!)}(hint seth](jQ!)}(hinth]hint}(hhhjQ\hhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hjM\ubj)}(h h]h }(hhhj_\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjM\ubj)}(hseth]hset}(hhhjm\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjM\ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjG[ubj!)}(hint flagh](jQ!)}(hinth]hint}(hhhj\hhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hj\ubj)}(h h]h }(hhhj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubj)}(hflagh]hflag}(hhhj\hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj\ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjG[ubeh}(h]h ]h"]h$]h&]jjuh1j!hjZhhhj[hMubeh}(h]h ]h"]h$]h&]jjjuh1j~jjhjZhhhj[hMubah}(h]jZah ](jjeh"]h$]h&]juh1jxhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjZhhubj)}(hhh]h)}(h%set or clear flag for a memory regionh]h%set or clear flag for a memory region}(hj\hj\hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj\hhubah}(h]h ]h"]h$]h&]uh1jhjZhhhj[hMubeh}(h]h ](hfunctioneh"]h$]h&]jhjj\jj\juh1jshhhjChNhNubj)}(hX**Parameters** ``struct memblock_type *type`` memblock type to set/clear flag for ``phys_addr_t base`` base address of the region ``phys_addr_t size`` size of the region ``int set`` set or clear the flag ``int flag`` the flag to update **Description** This function isolates region [**base**, **base** + **size**), and sets/clears flag **Return** 0 on success, -errno on failure.h](h)}(h**Parameters**h]j)}(hj\h]h Parameters}(hhhj\hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj\ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj\ubj)}(hhh](j#)}(hC``struct memblock_type *type`` memblock type to set/clear flag for h](j))}(h``struct memblock_type *type``h]h)}(hj]h]hstruct memblock_type *type}(hhhj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ]ubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj]ubjC)}(hhh]h)}(h#memblock type to set/clear flag forh]h#memblock type to set/clear flag for}(hj)]hj']hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj#]hMhj$]ubah}(h]h ]h"]h$]h&]uh1jBhj]ubeh}(h]h ]h"]h$]h&]uh1j"hj#]hMhj]ubj#)}(h0``phys_addr_t base`` base address of the region h](j))}(h``phys_addr_t base``h]h)}(hjG]h]hphys_addr_t base}(hhhjI]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjE]ubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjA]ubjC)}(hhh]h)}(hbase address of the regionh]hbase address of the region}(hjb]hj`]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj\]hMhj]]ubah}(h]h ]h"]h$]h&]uh1jBhjA]ubeh}(h]h ]h"]h$]h&]uh1j"hj\]hMhj]ubj#)}(h(``phys_addr_t size`` size of the region h](j))}(h``phys_addr_t size``h]h)}(hj]h]hphys_addr_t size}(hhhj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj~]ubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjz]ubjC)}(hhh]h)}(hsize of the regionh]hsize of the region}(hj]hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hMhj]ubah}(h]h ]h"]h$]h&]uh1jBhjz]ubeh}(h]h ]h"]h$]h&]uh1j"hj]hMhj]ubj#)}(h"``int set`` set or clear the flag h](j))}(h ``int set``h]h)}(hj]h]hint set}(hhhj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]ubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj]ubjC)}(hhh]h)}(hset or clear the flagh]hset or clear the flag}(hj]hj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]hMhj]ubah}(h]h ]h"]h$]h&]uh1jBhj]ubeh}(h]h ]h"]h$]h&]uh1j"hj]hMhj]ubj#)}(h ``int flag`` the flag to update h](j))}(h ``int flag``h]h)}(hj]h]hint flag}(hhhj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]ubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj]ubjC)}(hhh]h)}(hthe flag to updateh]hthe flag to update}(hj ^hj ^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj^hMhj^ubah}(h]h ]h"]h$]h&]uh1jBhj]ubeh}(h]h ]h"]h$]h&]uh1j"hj^hMhj]ubeh}(h]h ]h"]h$]h&]uh1jhj\ubh)}(h**Description**h]j)}(hj-^h]h Description}(hhhj/^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj+^ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj\ubh)}(hSThis function isolates region [**base**, **base** + **size**), and sets/clears flagh](hThis function isolates region [}(hThis function isolates region [hjC^hhhNhNubj)}(h**base**h]hbase}(hhhjL^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjC^ubh, }(h, hjC^hhhNhNubj)}(h**base**h]hbase}(hhhj_^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjC^ubh + }(h + hjC^hhhNhNubj)}(h**size**h]hsize}(hhhjr^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjC^ubh), and sets/clears flag}(h), and sets/clears flaghjC^hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj\ubh)}(h **Return**h]j)}(hj^h]hReturn}(hhhj^hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj\ubh)}(h 0 on success, -errno on failure.h]h 0 on success, -errno on failure.}(hj^hj^hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj\ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjChhhNhNubjc)}(hhh]h}(h]h ]h"]h$]h&]entries](jo"memblock_mark_hotplug (C function)c.memblock_mark_hotplughNtauh1jbhjChhhNhNubjt)}(hhh](jy)}(hNint __init_memblock memblock_mark_hotplug (phys_addr_t base, phys_addr_t size)h]j)}(hMint __init_memblock memblock_mark_hotplug(phys_addr_t base, phys_addr_t size)h](jQ!)}(hinth]hint}(hhhj^hhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hj^hhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMubj)}(h h]h }(hhhj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhj^hMubh__init_memblock}(hhhj^hhhNhNubj)}(h h]h }(hhhj^hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^hhhj^hMubj)}(hmemblock_mark_hotplugh]j)}(hmemblock_mark_hotplugh]hmemblock_mark_hotplug}(hhhj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj^hhhj^hMubj!)}(h$(phys_addr_t base, phys_addr_t size)h](j!)}(hphys_addr_t baseh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhj%_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"_ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetj'_modnameN classnameNj!j!)}j!]j!)}j!j_sbc.memblock_mark_hotplugasbuh1hhj_ubj)}(h h]h }(hhhjE_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubj)}(hbaseh]hbase}(hhhjS_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj_ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hj_ubj!)}(hphys_addr_t sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhjo_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjl_ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjq_modnameN classnameNj!j!)}j!]jA_c.memblock_mark_hotplugasbuh1hhjh_ubj)}(h h]h }(hhhj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjh_ubj)}(hsizeh]hsize}(hhhj_hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjh_ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hj_ubeh}(h]h ]h"]h$]h&]jjuh1j!hj^hhhj^hMubeh}(h]h ]h"]h$]h&]jjjuh1j~jjhj^hhhj^hMubah}(h]j^ah ](jjeh"]h$]h&]juh1jxhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj^hhubj)}(hhh]h)}(h4Mark hotpluggable memory with flag MEMBLOCK_HOTPLUG.h]h4Mark hotpluggable memory with flag MEMBLOCK_HOTPLUG.}(hj_hj_hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj_hhubah}(h]h ]h"]h$]h&]uh1jhj^hhhj^hMubeh}(h]h ](hfunctioneh"]h$]h&]jhjj_jj_juh1jshhhjChNhNubj)}(h**Parameters** ``phys_addr_t base`` the base phys addr of the region ``phys_addr_t size`` the size of the region **Return** 0 on success, -errno on failure.h](h)}(h**Parameters**h]j)}(hj_h]h Parameters}(hhhj_hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj_ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj_ubj)}(hhh](j#)}(h6``phys_addr_t base`` the base phys addr of the region h](j))}(h``phys_addr_t base``h]h)}(hj`h]hphys_addr_t base}(hhhj `hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`ubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj`ubjC)}(hhh]h)}(h the base phys addr of the regionh]h the base phys addr of the region}(hj"`hj `hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hMhj`ubah}(h]h ]h"]h$]h&]uh1jBhj`ubeh}(h]h ]h"]h$]h&]uh1j"hj`hMhj_ubj#)}(h,``phys_addr_t size`` the size of the region h](j))}(h``phys_addr_t size``h]h)}(hj@`h]hphys_addr_t size}(hhhjB`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>`ubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj:`ubjC)}(hhh]h)}(hthe size of the regionh]hthe size of the region}(hj[`hjY`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjU`hMhjV`ubah}(h]h ]h"]h$]h&]uh1jBhj:`ubeh}(h]h ]h"]h$]h&]uh1j"hjU`hMhj_ubeh}(h]h ]h"]h$]h&]uh1jhj_ubh)}(h **Return**h]j)}(hj{`h]hReturn}(hhhj}`hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjy`ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj_ubh)}(h 0 on success, -errno on failure.h]h 0 on success, -errno on failure.}(hj`hj`hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj_ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjChhhNhNubjc)}(hhh]h}(h]h ]h"]h$]h&]entries](jo#memblock_clear_hotplug (C function)c.memblock_clear_hotplughNtauh1jbhjChhhNhNubjt)}(hhh](jy)}(hOint __init_memblock memblock_clear_hotplug (phys_addr_t base, phys_addr_t size)h]j)}(hNint __init_memblock memblock_clear_hotplug(phys_addr_t base, phys_addr_t size)h](jQ!)}(hinth]hint}(hhhj`hhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hj`hhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMubj)}(h h]h }(hhhj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhj`hMubh__init_memblock}(hhhj`hhhNhNubj)}(h h]h }(hhhj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`hhhj`hMubj)}(hmemblock_clear_hotplugh]j)}(hmemblock_clear_hotplugh]hmemblock_clear_hotplug}(hhhj`hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj`ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj`hhhj`hMubj!)}(h$(phys_addr_t base, phys_addr_t size)h](j!)}(hphys_addr_t baseh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjamodnameN classnameNj!j!)}j!]j!)}j!j`sbc.memblock_clear_hotplugasbuh1hhj aubj)}(h h]h }(hhhj2ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj aubj)}(hbaseh]hbase}(hhhj@ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj aubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjaubj!)}(hphys_addr_t sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhj\ahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjYaubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetj^amodnameN classnameNj!j!)}j!]j.ac.memblock_clear_hotplugasbuh1hhjUaubj)}(h h]h }(hhhjzahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUaubj)}(hsizeh]hsize}(hhhjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjUaubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjaubeh}(h]h ]h"]h$]h&]jjuh1j!hj`hhhj`hMubeh}(h]h ]h"]h$]h&]jjjuh1j~jjhj`hhhj`hMubah}(h]j`ah ](jjeh"]h$]h&]juh1jxhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj`hhubj)}(hhh]h)}(h3Clear flag MEMBLOCK_HOTPLUG for a specified region.h]h3Clear flag MEMBLOCK_HOTPLUG for a specified region.}(hjahjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjahhubah}(h]h ]h"]h$]h&]uh1jhj`hhhj`hMubeh}(h]h ](hfunctioneh"]h$]h&]jhjjajjajuh1jshhhjChNhNubj)}(h**Parameters** ``phys_addr_t base`` the base phys addr of the region ``phys_addr_t size`` the size of the region **Return** 0 on success, -errno on failure.h](h)}(h**Parameters**h]j)}(hjah]h Parameters}(hhhjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjaubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjaubj)}(hhh](j#)}(h6``phys_addr_t base`` the base phys addr of the region h](j))}(h``phys_addr_t base``h]h)}(hjah]hphys_addr_t base}(hhhjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhjaubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjaubjC)}(hhh]h)}(h the base phys addr of the regionh]h the base phys addr of the region}(hjbhj bhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj bhMhj bubah}(h]h ]h"]h$]h&]uh1jBhjaubeh}(h]h ]h"]h$]h&]uh1j"hj bhMhjaubj#)}(h,``phys_addr_t size`` the size of the region h](j))}(h``phys_addr_t size``h]h)}(hj-bh]hphys_addr_t size}(hhhj/bhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj+bubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj'bubjC)}(hhh]h)}(hthe size of the regionh]hthe size of the region}(hjHbhjFbhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjBbhMhjCbubah}(h]h ]h"]h$]h&]uh1jBhj'bubeh}(h]h ]h"]h$]h&]uh1j"hjBbhMhjaubeh}(h]h ]h"]h$]h&]uh1jhjaubh)}(h **Return**h]j)}(hjhbh]hReturn}(hhhjjbhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfbubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjaubh)}(h 0 on success, -errno on failure.h]h 0 on success, -errno on failure.}(hjbhj~bhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjaubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjChhhNhNubjc)}(hhh]h}(h]h ]h"]h$]h&]entries](jo!memblock_mark_mirror (C function)c.memblock_mark_mirrorhNtauh1jbhjChhhNhNubjt)}(hhh](jy)}(hMint __init_memblock memblock_mark_mirror (phys_addr_t base, phys_addr_t size)h]j)}(hLint __init_memblock memblock_mark_mirror(phys_addr_t base, phys_addr_t size)h](jQ!)}(hinth]hint}(hhhjbhhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hjbhhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMubj)}(h h]h }(hhhjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbhhhjbhMubh__init_memblock}(hhhjbhhhNhNubj)}(h h]h }(hhhjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbhhhjbhMubj)}(hmemblock_mark_mirrorh]j)}(hmemblock_mark_mirrorh]hmemblock_mark_mirror}(hhhjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubah}(h]h ](jjeh"]h$]h&]jjuh1jhjbhhhjbhMubj!)}(h$(phys_addr_t base, phys_addr_t size)h](j!)}(hphys_addr_t baseh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjcmodnameN classnameNj!j!)}j!]j!)}j!jbsbc.memblock_mark_mirrorasbuh1hhjbubj)}(h h]h }(hhhjchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubj)}(hbaseh]hbase}(hhhj-chhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjbubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjbubj!)}(hphys_addr_t sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhjIchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjFcubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjKcmodnameN classnameNj!j!)}j!]jcc.memblock_mark_mirrorasbuh1hhjBcubj)}(h h]h }(hhhjgchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBcubj)}(hsizeh]hsize}(hhhjuchhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjBcubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjbubeh}(h]h ]h"]h$]h&]jjuh1j!hjbhhhjbhMubeh}(h]h ]h"]h$]h&]jjjuh1j~jjhjbhhhjbhMubah}(h]jbah ](jjeh"]h$]h&]juh1jxhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjbhhubj)}(hhh]h)}(h/Mark mirrored memory with flag MEMBLOCK_MIRROR.h]h/Mark mirrored memory with flag MEMBLOCK_MIRROR.}(hjchjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjchhubah}(h]h ]h"]h$]h&]uh1jhjbhhhjbhMubeh}(h]h ](hfunctioneh"]h$]h&]jhjjcjjcjuh1jshhhjChNhNubj)}(h**Parameters** ``phys_addr_t base`` the base phys addr of the region ``phys_addr_t size`` the size of the region **Return** 0 on success, -errno on failure.h](h)}(h**Parameters**h]j)}(hjch]h Parameters}(hhhjchhhNhNubah}(h]h ]h"]h$]h&]uh1jhjcubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjcubj)}(hhh](j#)}(h6``phys_addr_t base`` the base phys addr of the region h](j))}(h``phys_addr_t base``h]h)}(hjch]hphys_addr_t base}(hhhjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhjcubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjcubjC)}(hhh]h)}(h the base phys addr of the regionh]h the base phys addr of the region}(hjchjchhhNhNubah}(h]h ]h"]h$]h&]uh1hhjchMhjcubah}(h]h ]h"]h$]h&]uh1jBhjcubeh}(h]h ]h"]h$]h&]uh1j"hjchMhjcubj#)}(h,``phys_addr_t size`` the size of the region h](j))}(h``phys_addr_t size``h]h)}(hjdh]hphys_addr_t size}(hhhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjdubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjdubjC)}(hhh]h)}(hthe size of the regionh]hthe size of the region}(hj5dhj3dhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/dhMhj0dubah}(h]h ]h"]h$]h&]uh1jBhjdubeh}(h]h ]h"]h$]h&]uh1j"hj/dhMhjcubeh}(h]h ]h"]h$]h&]uh1jhjcubh)}(h **Return**h]j)}(hjUdh]hReturn}(hhhjWdhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjSdubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjcubh)}(h 0 on success, -errno on failure.h]h 0 on success, -errno on failure.}(hjmdhjkdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjcubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjChhhNhNubjc)}(hhh]h}(h]h ]h"]h$]h&]entries](jo memblock_mark_nomap (C function)c.memblock_mark_nomaphNtauh1jbhjChhhNhNubjt)}(hhh](jy)}(hLint __init_memblock memblock_mark_nomap (phys_addr_t base, phys_addr_t size)h]j)}(hKint __init_memblock memblock_mark_nomap(phys_addr_t base, phys_addr_t size)h](jQ!)}(hinth]hint}(hhhjdhhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hjdhhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMubj)}(h h]h }(hhhjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhhhjdhMubh__init_memblock}(hhhjdhhhNhNubj)}(h h]h }(hhhjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdhhhjdhMubj)}(hmemblock_mark_nomaph]j)}(hmemblock_mark_nomaph]hmemblock_mark_nomap}(hhhjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubah}(h]h ](jjeh"]h$]h&]jjuh1jhjdhhhjdhMubj!)}(h$(phys_addr_t base, phys_addr_t size)h](j!)}(hphys_addr_t baseh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhjdhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjdmodnameN classnameNj!j!)}j!]j!)}j!jdsbc.memblock_mark_nomapasbuh1hhjdubj)}(h h]h }(hhhj ehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(hbaseh]hbase}(hhhjehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjdubj!)}(hphys_addr_t sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhj6ehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3eubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetj8emodnameN classnameNj!j!)}j!]jec.memblock_mark_nomapasbuh1hhj/eubj)}(h h]h }(hhhjTehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/eubj)}(hsizeh]hsize}(hhhjbehhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/eubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjdubeh}(h]h ]h"]h$]h&]jjuh1j!hjdhhhjdhMubeh}(h]h ]h"]h$]h&]jjjuh1j~jjhjdhhhjdhMubah}(h]jdah ](jjeh"]h$]h&]juh1jxhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjdhhubj)}(hhh]h)}(h.Mark a memory region with flag MEMBLOCK_NOMAP.h]h.Mark a memory region with flag MEMBLOCK_NOMAP.}(hjehjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjehhubah}(h]h ]h"]h$]h&]uh1jhjdhhhjdhMubeh}(h]h ](hfunctioneh"]h$]h&]jhjjejjejuh1jshhhjChNhNubj)}(hXE**Parameters** ``phys_addr_t base`` the base phys addr of the region ``phys_addr_t size`` the size of the region **Description** The memory regions marked with ``MEMBLOCK_NOMAP`` will not be added to the direct mapping of the physical memory. These regions will still be covered by the memory map. The struct page representing NOMAP memory frames in the memory map will be PageReserved() **Note** if the memory being marked ``MEMBLOCK_NOMAP`` was allocated from memblock, the caller must inform kmemleak to ignore that memory **Return** 0 on success, -errno on failure.h](h)}(h**Parameters**h]j)}(hjeh]h Parameters}(hhhjehhhNhNubah}(h]h ]h"]h$]h&]uh1jhjeubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjeubj)}(hhh](j#)}(h6``phys_addr_t base`` the base phys addr of the region h](j))}(h``phys_addr_t base``h]h)}(hjeh]hphys_addr_t base}(hhhjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjeubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjeubjC)}(hhh]h)}(h the base phys addr of the regionh]h the base phys addr of the region}(hjehjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjehMhjeubah}(h]h ]h"]h$]h&]uh1jBhjeubeh}(h]h ]h"]h$]h&]uh1j"hjehMhjeubj#)}(h,``phys_addr_t size`` the size of the region h](j))}(h``phys_addr_t size``h]h)}(hjfh]hphys_addr_t size}(hhhj fhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjfubjC)}(hhh]h)}(hthe size of the regionh]hthe size of the region}(hj"fhj fhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfhMhjfubah}(h]h ]h"]h$]h&]uh1jBhjfubeh}(h]h ]h"]h$]h&]uh1j"hjfhMhjeubeh}(h]h ]h"]h$]h&]uh1jhjeubh)}(h**Description**h]j)}(hjBfh]h Description}(hhhjDfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj@fubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjeubh)}(hXThe memory regions marked with ``MEMBLOCK_NOMAP`` will not be added to the direct mapping of the physical memory. These regions will still be covered by the memory map. The struct page representing NOMAP memory frames in the memory map will be PageReserved()h](hThe memory regions marked with }(hThe memory regions marked with hjXfhhhNhNubh)}(h``MEMBLOCK_NOMAP``h]hMEMBLOCK_NOMAP}(hhhjafhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjXfubh will not be added to the direct mapping of the physical memory. These regions will still be covered by the memory map. The struct page representing NOMAP memory frames in the memory map will be PageReserved()}(h will not be added to the direct mapping of the physical memory. These regions will still be covered by the memory map. The struct page representing NOMAP memory frames in the memory map will be PageReserved()hjXfhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjeubh)}(h**Note**h]j)}(hj}fh]hNote}(hhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{fubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjeubh)}(hif the memory being marked ``MEMBLOCK_NOMAP`` was allocated from memblock, the caller must inform kmemleak to ignore that memoryh](hif the memory being marked }(hif the memory being marked hjfhhhNhNubh)}(h``MEMBLOCK_NOMAP``h]hMEMBLOCK_NOMAP}(hhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjfubhS was allocated from memblock, the caller must inform kmemleak to ignore that memory}(hS was allocated from memblock, the caller must inform kmemleak to ignore that memoryhjfhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjeubh)}(h **Return**h]j)}(hjfh]hReturn}(hhhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjfubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjeubh)}(h 0 on success, -errno on failure.h]h 0 on success, -errno on failure.}(hjfhjfhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjeubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjChhhNhNubjc)}(hhh]h}(h]h ]h"]h$]h&]entries](jo!memblock_clear_nomap (C function)c.memblock_clear_nomaphNtauh1jbhjChhhNhNubjt)}(hhh](jy)}(hMint __init_memblock memblock_clear_nomap (phys_addr_t base, phys_addr_t size)h]j)}(hLint __init_memblock memblock_clear_nomap(phys_addr_t base, phys_addr_t size)h](jQ!)}(hinth]hint}(hhhjfhhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hjfhhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMubj)}(h h]h }(hhhj ghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfhhhj ghMubh__init_memblock}(hhhjfhhhNhNubj)}(h h]h }(hhhjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjfhhhj ghMubj)}(hmemblock_clear_nomaph]j)}(hmemblock_clear_nomaph]hmemblock_clear_nomap}(hhhj0ghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj,gubah}(h]h ](jjeh"]h$]h&]jjuh1jhjfhhhj ghMubj!)}(h$(phys_addr_t base, phys_addr_t size)h](j!)}(hphys_addr_t baseh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhjOghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjLgubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjQgmodnameN classnameNj!j!)}j!]j!)}j!j2gsbc.memblock_clear_nomapasbuh1hhjHgubj)}(h h]h }(hhhjoghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHgubj)}(hbaseh]hbase}(hhhj}ghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjHgubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjDgubj!)}(hphys_addr_t sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjgmodnameN classnameNj!j!)}j!]jkgc.memblock_clear_nomapasbuh1hhjgubj)}(h h]h }(hhhjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubj)}(hsizeh]hsize}(hhhjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjgubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjDgubeh}(h]h ]h"]h$]h&]jjuh1j!hjfhhhj ghMubeh}(h]h ]h"]h$]h&]jjjuh1j~jjhjfhhhj ghMubah}(h]jfah ](jjeh"]h$]h&]juh1jxhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjfhhubj)}(hhh]h)}(h1Clear flag MEMBLOCK_NOMAP for a specified region.h]h1Clear flag MEMBLOCK_NOMAP for a specified region.}(hjghjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjghhubah}(h]h ]h"]h$]h&]uh1jhjfhhhj ghMubeh}(h]h ](hfunctioneh"]h$]h&]jhjjhjjhjuh1jshhhjChNhNubj)}(h**Parameters** ``phys_addr_t base`` the base phys addr of the region ``phys_addr_t size`` the size of the region **Return** 0 on success, -errno on failure.h](h)}(h**Parameters**h]j)}(hjhh]h Parameters}(hhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj hubj)}(hhh](j#)}(h6``phys_addr_t base`` the base phys addr of the region h](j))}(h``phys_addr_t base``h]h)}(hj1hh]hphys_addr_t base}(hhhj3hhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj/hubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj+hubjC)}(hhh]h)}(h the base phys addr of the regionh]h the base phys addr of the region}(hjLhhjJhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjFhhMhjGhubah}(h]h ]h"]h$]h&]uh1jBhj+hubeh}(h]h ]h"]h$]h&]uh1j"hjFhhMhj(hubj#)}(h,``phys_addr_t size`` the size of the region h](j))}(h``phys_addr_t size``h]h)}(hjjhh]hphys_addr_t size}(hhhjlhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjdhubjC)}(hhh]h)}(hthe size of the regionh]hthe size of the region}(hjhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhhMhjhubah}(h]h ]h"]h$]h&]uh1jBhjdhubeh}(h]h ]h"]h$]h&]uh1j"hjhhMhj(hubeh}(h]h ]h"]h$]h&]uh1jhj hubh)}(h **Return**h]j)}(hjhh]hReturn}(hhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj hubh)}(h 0 on success, -errno on failure.h]h 0 on success, -errno on failure.}(hjhhjhhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj hubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjChhhNhNubjc)}(hhh]h}(h]h ]h"]h$]h&]entries](jo*memblock_reserved_mark_noinit (C function)c.memblock_reserved_mark_noinithNtauh1jbhjChhhNhNubjt)}(hhh](jy)}(hVint __init_memblock memblock_reserved_mark_noinit (phys_addr_t base, phys_addr_t size)h]j)}(hUint __init_memblock memblock_reserved_mark_noinit(phys_addr_t base, phys_addr_t size)h](jQ!)}(hinth]hint}(hhhjhhhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hjhhhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM ubj)}(h h]h }(hhhjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhhjhhM ubh__init_memblock}(hhhjhhhhNhNubj)}(h h]h }(hhhj ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhhjhhM ubj)}(hmemblock_reserved_mark_noinith]j)}(hmemblock_reserved_mark_noinith]hmemblock_reserved_mark_noinit}(hhhjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhhjhhM ubj!)}(h$(phys_addr_t base, phys_addr_t size)h](j!)}(hphys_addr_t baseh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhjimodnameN classnameNj!j!)}j!]j!)}j!jisbc.memblock_reserved_mark_noinitasbuh1hhj5iubj)}(h h]h }(hhhj\ihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5iubj)}(hbaseh]hbase}(hhhjjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj5iubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hj1iubj!)}(hphys_addr_t sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjimodnameN classnameNj!j!)}j!]jXic.memblock_reserved_mark_noinitasbuh1hhjiubj)}(h h]h }(hhhjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubj)}(hsizeh]hsize}(hhhjihhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjiubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hj1iubeh}(h]h ]h"]h$]h&]jjuh1j!hjhhhhjhhM ubeh}(h]h ]h"]h$]h&]jjjuh1j~jjhjhhhhjhhM ubah}(h]jhah ](jjeh"]h$]h&]juh1jxhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjhhhubj)}(hhh]h)}(hMark a reserved memory region with flag MEMBLOCK_RSRV_NOINIT which results in the struct pages not being initialized for this region.h]hMark a reserved memory region with flag MEMBLOCK_RSRV_NOINIT which results in the struct pages not being initialized for this region.}(hjihjihhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM hjihhubah}(h]h ]h"]h$]h&]uh1jhjhhhhjhhM ubeh}(h]h ](hfunctioneh"]h$]h&]jhjjijjijuh1jshhhjChNhNubj)}(hX**Parameters** ``phys_addr_t base`` the base phys addr of the region ``phys_addr_t size`` the size of the region **Description** struct pages will not be initialized for reserved memory regions marked with ``MEMBLOCK_RSRV_NOINIT``. **Return** 0 on success, -errno on failure.h](h)}(h**Parameters**h]j)}(hjih]h Parameters}(hhhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjiubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjiubj)}(hhh](j#)}(h6``phys_addr_t base`` the base phys addr of the region h](j))}(h``phys_addr_t base``h]h)}(hjjh]hphys_addr_t base}(hhhj jhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjjubjC)}(hhh]h)}(h the base phys addr of the regionh]h the base phys addr of the region}(hj9jhj7jhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj3jhMhj4jubah}(h]h ]h"]h$]h&]uh1jBhjjubeh}(h]h ]h"]h$]h&]uh1j"hj3jhMhjjubj#)}(h,``phys_addr_t size`` the size of the region h](j))}(h``phys_addr_t size``h]h)}(hjWjh]hphys_addr_t size}(hhhjYjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjUjubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjQjubjC)}(hhh]h)}(hthe size of the regionh]hthe size of the region}(hjrjhjpjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjljhMhjmjubah}(h]h ]h"]h$]h&]uh1jBhjQjubeh}(h]h ]h"]h$]h&]uh1j"hjljhMhjjubeh}(h]h ]h"]h$]h&]uh1jhjiubh)}(h**Description**h]j)}(hjjh]h Description}(hhhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjiubh)}(hfstruct pages will not be initialized for reserved memory regions marked with ``MEMBLOCK_RSRV_NOINIT``.h](hMstruct pages will not be initialized for reserved memory regions marked with }(hMstruct pages will not be initialized for reserved memory regions marked with hjjhhhNhNubh)}(h``MEMBLOCK_RSRV_NOINIT``h]hMEMBLOCK_RSRV_NOINIT}(hhhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjjubh.}(hjRhjjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjiubh)}(h **Return**h]j)}(hjjh]hReturn}(hhhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjiubh)}(h 0 on success, -errno on failure.h]h 0 on success, -errno on failure.}(hjjhjjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjiubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjChhhNhNubjc)}(hhh]h}(h]h ]h"]h$]h&]entries](jo__next_mem_range (C function)c.__next_mem_rangehNtauh1jbhjChhhNhNubjt)}(hhh](jy)}(hvoid __next_mem_range (u64 *idx, int nid, enum memblock_flags flags, struct memblock_type *type_a, struct memblock_type *type_b, phys_addr_t *out_start, phys_addr_t *out_end, int *out_nid)h]j)}(hvoid __next_mem_range(u64 *idx, int nid, enum memblock_flags flags, struct memblock_type *type_a, struct memblock_type *type_b, phys_addr_t *out_start, phys_addr_t *out_end, int *out_nid)h](jQ!)}(hvoidh]hvoid}(hhhjkhhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hj khhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMAubj)}(h h]h }(hhhj khhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj khhhjkhMAubj)}(h__next_mem_rangeh]j)}(h__next_mem_rangeh]h__next_mem_range}(hhhj2khhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj.kubah}(h]h ](jjeh"]h$]h&]jjuh1jhj khhhjkhMAubj!)}(h(u64 *idx, int nid, enum memblock_flags flags, struct memblock_type *type_a, struct memblock_type *type_b, phys_addr_t *out_start, phys_addr_t *out_end, int *out_nid)h](j!)}(hu64 *idxh](h)}(hhh]j)}(hu64h]hu64}(hhhjQkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjNkubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjSkmodnameN classnameNj!j!)}j!]j!)}j!j4ksbc.__next_mem_rangeasbuh1hhjJkubj)}(h h]h }(hhhjqkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJkubjU#)}(hj-h]h*}(hhhjkhhhNhNubah}(h]h ]j`#ah"]h$]h&]uh1jT#hjJkubj)}(hidxh]hidx}(hhhjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJkubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjFkubj!)}(hint nidh](jQ!)}(hinth]hint}(hhhjkhhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hjkubj)}(h h]h }(hhhjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(hnidh]hnid}(hhhjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjFkubj!)}(henum memblock_flags flagsh](j)}(hjh]henum}(hhhjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(h h]h }(hhhjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubh)}(hhh]j)}(hmemblock_flagsh]hmemblock_flags}(hhhjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjkmodnameN classnameNj!j!)}j!]jmkc.__next_mem_rangeasbuh1hhjkubj)}(h h]h }(hhhjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubj)}(hflagsh]hflags}(hhhj$lhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjkubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjFkubj!)}(hstruct memblock_type *type_ah](j)}(hjh]hstruct}(hhhj=lhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9lubj)}(h h]h }(hhhjJlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9lubh)}(hhh]j)}(h memblock_typeh]h memblock_type}(hhhj[lhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjXlubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetj]lmodnameN classnameNj!j!)}j!]jmkc.__next_mem_rangeasbuh1hhj9lubj)}(h h]h }(hhhjylhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9lubjU#)}(hj-h]h*}(hhhjlhhhNhNubah}(h]h ]j`#ah"]h$]h&]uh1jT#hj9lubj)}(htype_ah]htype_a}(hhhjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj9lubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjFkubj!)}(hstruct memblock_type *type_bh](j)}(hjh]hstruct}(hhhjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubj)}(h h]h }(hhhjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubh)}(hhh]j)}(h memblock_typeh]h memblock_type}(hhhjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjlmodnameN classnameNj!j!)}j!]jmkc.__next_mem_rangeasbuh1hhjlubj)}(h h]h }(hhhjlhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubjU#)}(hj-h]h*}(hhhjlhhhNhNubah}(h]h ]j`#ah"]h$]h&]uh1jT#hjlubj)}(htype_bh]htype_b}(hhhjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjlubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjFkubj!)}(hphys_addr_t *out_starth](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhj mhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetj"mmodnameN classnameNj!j!)}j!]jmkc.__next_mem_rangeasbuh1hhjmubj)}(h h]h }(hhhj>mhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubjU#)}(hj-h]h*}(hhhjLmhhhNhNubah}(h]h ]j`#ah"]h$]h&]uh1jT#hjmubj)}(h out_starth]h out_start}(hhhjYmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjFkubj!)}(hphys_addr_t *out_endh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhjumhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrmubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjwmmodnameN classnameNj!j!)}j!]jmkc.__next_mem_rangeasbuh1hhjnmubj)}(h h]h }(hhhjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnmubjU#)}(hj-h]h*}(hhhjmhhhNhNubah}(h]h ]j`#ah"]h$]h&]uh1jT#hjnmubj)}(hout_endh]hout_end}(hhhjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjnmubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjFkubj!)}(h int *out_nidh](jQ!)}(hinth]hint}(hhhjmhhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hjmubj)}(h h]h }(hhhjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubjU#)}(hj-h]h*}(hhhjmhhhNhNubah}(h]h ]j`#ah"]h$]h&]uh1jT#hjmubj)}(hout_nidh]hout_nid}(hhhjmhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjmubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjFkubeh}(h]h ]h"]h$]h&]jjuh1j!hj khhhjkhMAubeh}(h]h ]h"]h$]h&]jjjuh1j~jjhj khhhjkhMAubah}(h]jkah ](jjeh"]h$]h&]juh1jxhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMYhjkhhubj)}(hhh]h)}(h0next function for for_each_free_mem_range() etc.h]h0next function for for_each_free_mem_range() etc.}(hjnhjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM@hjnhhubah}(h]h ]h"]h$]h&]uh1jhjkhhhjkhMAubeh}(h]h ](hfunctioneh"]h$]h&]jhjj3njj3njuh1jshhhjChNhNubj)}(hX**Parameters** ``u64 *idx`` pointer to u64 loop variable ``int nid`` node selector, ``NUMA_NO_NODE`` for all nodes ``enum memblock_flags flags`` pick from blocks based on memory attributes ``struct memblock_type *type_a`` pointer to memblock_type from where the range is taken ``struct memblock_type *type_b`` pointer to memblock_type which excludes memory from being taken ``phys_addr_t *out_start`` ptr to phys_addr_t for start address of the range, can be ``NULL`` ``phys_addr_t *out_end`` ptr to phys_addr_t for end address of the range, can be ``NULL`` ``int *out_nid`` ptr to int for nid of the range, can be ``NULL`` **Description** Find the first area from ***idx** which matches **nid**, fill the out parameters, and update ***idx** for the next iteration. The lower 32bit of ***idx** contains index into type_a and the upper 32bit indexes the areas before each region in type_b. For example, if type_b regions look like the following, 0:[0-16), 1:[32-48), 2:[128-130) The upper 32bit indexes the following regions. 0:[0-0), 1:[16-32), 2:[48-128), 3:[130-MAX) As both region arrays are sorted, the function advances the two indices in lockstep and returns each intersection.h](h)}(h**Parameters**h]j)}(hj=nh]h Parameters}(hhhj?nhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj;nubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMDhj7nubj)}(hhh](j#)}(h*``u64 *idx`` pointer to u64 loop variable h](j))}(h ``u64 *idx``h]h)}(hj\nh]hu64 *idx}(hhhj^nhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjZnubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMAhjVnubjC)}(hhh]h)}(hpointer to u64 loop variableh]hpointer to u64 loop variable}(hjwnhjunhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjqnhMAhjrnubah}(h]h ]h"]h$]h&]uh1jBhjVnubeh}(h]h ]h"]h$]h&]uh1j"hjqnhMAhjSnubj#)}(h:``int nid`` node selector, ``NUMA_NO_NODE`` for all nodes h](j))}(h ``int nid``h]h)}(hjnh]hint nid}(hhhjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMBhjnubjC)}(hhh]h)}(h-node selector, ``NUMA_NO_NODE`` for all nodesh](hnode selector, }(hnode selector, hjnhhhNhNubh)}(h``NUMA_NO_NODE``h]h NUMA_NO_NODE}(hhhjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnubh for all nodes}(h for all nodeshjnhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjnhMBhjnubah}(h]h ]h"]h$]h&]uh1jBhjnubeh}(h]h ]h"]h$]h&]uh1j"hjnhMBhjSnubj#)}(hJ``enum memblock_flags flags`` pick from blocks based on memory attributes h](j))}(h``enum memblock_flags flags``h]h)}(hjnh]henum memblock_flags flags}(hhhjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMChjnubjC)}(hhh]h)}(h+pick from blocks based on memory attributesh]h+pick from blocks based on memory attributes}(hjnhjnhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjnhMChjnubah}(h]h ]h"]h$]h&]uh1jBhjnubeh}(h]h ]h"]h$]h&]uh1j"hjnhMChjSnubj#)}(hX``struct memblock_type *type_a`` pointer to memblock_type from where the range is taken h](j))}(h ``struct memblock_type *type_a``h]h)}(hjoh]hstruct memblock_type *type_a}(hhhjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjoubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMDhjoubjC)}(hhh]h)}(h6pointer to memblock_type from where the range is takenh]h6pointer to memblock_type from where the range is taken}(hj6ohj4ohhhNhNubah}(h]h ]h"]h$]h&]uh1hhj0ohMDhj1oubah}(h]h ]h"]h$]h&]uh1jBhjoubeh}(h]h ]h"]h$]h&]uh1j"hj0ohMDhjSnubj#)}(ha``struct memblock_type *type_b`` pointer to memblock_type which excludes memory from being taken h](j))}(h ``struct memblock_type *type_b``h]h)}(hjToh]hstruct memblock_type *type_b}(hhhjVohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjRoubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMEhjNoubjC)}(hhh]h)}(h?pointer to memblock_type which excludes memory from being takenh]h?pointer to memblock_type which excludes memory from being taken}(hjoohjmohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjiohMEhjjoubah}(h]h ]h"]h$]h&]uh1jBhjNoubeh}(h]h ]h"]h$]h&]uh1j"hjiohMEhjSnubj#)}(h^``phys_addr_t *out_start`` ptr to phys_addr_t for start address of the range, can be ``NULL`` h](j))}(h``phys_addr_t *out_start``h]h)}(hjoh]hphys_addr_t *out_start}(hhhjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjoubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMFhjoubjC)}(hhh]h)}(hBptr to phys_addr_t for start address of the range, can be ``NULL``h](h:ptr to phys_addr_t for start address of the range, can be }(h:ptr to phys_addr_t for start address of the range, can be hjohhhNhNubh)}(h``NULL``h]hNULL}(hhhjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjoubeh}(h]h ]h"]h$]h&]uh1hhjohMFhjoubah}(h]h ]h"]h$]h&]uh1jBhjoubeh}(h]h ]h"]h$]h&]uh1j"hjohMFhjSnubj#)}(hZ``phys_addr_t *out_end`` ptr to phys_addr_t for end address of the range, can be ``NULL`` h](j))}(h``phys_addr_t *out_end``h]h)}(hjoh]hphys_addr_t *out_end}(hhhjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjoubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMGhjoubjC)}(hhh]h)}(h@ptr to phys_addr_t for end address of the range, can be ``NULL``h](h8ptr to phys_addr_t for end address of the range, can be }(h8ptr to phys_addr_t for end address of the range, can be hjohhhNhNubh)}(h``NULL``h]hNULL}(hhhjohhhNhNubah}(h]h ]h"]h$]h&]uh1hhjoubeh}(h]h ]h"]h$]h&]uh1hhjohMGhjoubah}(h]h ]h"]h$]h&]uh1jBhjoubeh}(h]h ]h"]h$]h&]uh1j"hjohMGhjSnubj#)}(hB``int *out_nid`` ptr to int for nid of the range, can be ``NULL`` h](j))}(h``int *out_nid``h]h)}(hjph]h int *out_nid}(hhhjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhjpubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMHhjpubjC)}(hhh]h)}(h0ptr to int for nid of the range, can be ``NULL``h](h(ptr to int for nid of the range, can be }(h(ptr to int for nid of the range, can be hj6phhhNhNubh)}(h``NULL``h]hNULL}(hhhj?phhhNhNubah}(h]h ]h"]h$]h&]uh1hhj6pubeh}(h]h ]h"]h$]h&]uh1hhj2phMHhj3pubah}(h]h ]h"]h$]h&]uh1jBhjpubeh}(h]h ]h"]h$]h&]uh1j"hj2phMHhjSnubeh}(h]h ]h"]h$]h&]uh1jhj7nubh)}(h**Description**h]j)}(hjgph]h Description}(hhhjiphhhNhNubah}(h]h ]h"]h$]h&]uh1jhjepubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMJhj7nubh)}(hX2Find the first area from ***idx** which matches **nid**, fill the out parameters, and update ***idx** for the next iteration. The lower 32bit of ***idx** contains index into type_a and the upper 32bit indexes the areas before each region in type_b. For example, if type_b regions look like the following,h](hFind the first area from }(hFind the first area from hj}phhhNhNubj)}(h***idx**h]h*idx}(hhhjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}pubh which matches }(h which matches hj}phhhNhNubj)}(h**nid**h]hnid}(hhhjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}pubh&, fill the out parameters, and update }(h&, fill the out parameters, and update hj}phhhNhNubj)}(h***idx**h]h*idx}(hhhjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}pubh- for the next iteration. The lower 32bit of }(h- for the next iteration. The lower 32bit of hj}phhhNhNubj)}(h***idx**h]h*idx}(hhhjphhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}pubh contains index into type_a and the upper 32bit indexes the areas before each region in type_b. For example, if type_b regions look like the following,}(h contains index into type_a and the upper 32bit indexes the areas before each region in type_b. For example, if type_b regions look like the following,hj}phhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMJhj7nubjQ )}(hhh]h)}(h 0:[0-16), 1:[32-48), 2:[128-130)h]h 0:[0-16), 1:[32-48), 2:[128-130)}(hjphjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMPhjpubah}(h]h ]h"]h$]h&]uh1jP hj7nubh)}(h.The upper 32bit indexes the following regions.h]h.The upper 32bit indexes the following regions.}(hjphjphhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMRhj7nubjQ )}(hhh]h)}(h+0:[0-0), 1:[16-32), 2:[48-128), 3:[130-MAX)h]h+0:[0-0), 1:[16-32), 2:[48-128), 3:[130-MAX)}(hjqhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMThjqubah}(h]h ]h"]h$]h&]uh1jP hj7nubh)}(hrAs both region arrays are sorted, the function advances the two indices in lockstep and returns each intersection.h]hrAs both region arrays are sorted, the function advances the two indices in lockstep and returns each intersection.}(hjqhjqhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMVhj7nubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjChhhNhNubjc)}(hhh]h}(h]h ]h"]h$]h&]entries](jo!__next_mem_range_rev (C function)c.__next_mem_range_revhNtauh1jbhjChhhNhNubjt)}(hhh](jy)}(hvoid __init_memblock __next_mem_range_rev (u64 *idx, int nid, enum memblock_flags flags, struct memblock_type *type_a, struct memblock_type *type_b, phys_addr_t *out_start, phys_addr_t *out_end, int *out_nid)h]j)}(hvoid __init_memblock __next_mem_range_rev(u64 *idx, int nid, enum memblock_flags flags, struct memblock_type *type_a, struct memblock_type *type_b, phys_addr_t *out_start, phys_addr_t *out_end, int *out_nid)h](jQ!)}(hvoidh]hvoid}(hhhjGqhhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hjCqhhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMubj)}(h h]h }(hhhjVqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCqhhhjUqhMubh__init_memblock}(hhhjCqhhhNhNubj)}(h h]h }(hhhjhqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCqhhhjUqhMubj)}(h__next_mem_range_revh]j)}(h__next_mem_range_revh]h__next_mem_range_rev}(hhhjzqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjvqubah}(h]h ](jjeh"]h$]h&]jjuh1jhjCqhhhjUqhMubj!)}(h(u64 *idx, int nid, enum memblock_flags flags, struct memblock_type *type_a, struct memblock_type *type_b, phys_addr_t *out_start, phys_addr_t *out_end, int *out_nid)h](j!)}(hu64 *idxh](h)}(hhh]j)}(hu64h]hu64}(hhhjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjqmodnameN classnameNj!j!)}j!]j!)}j!j|qsbc.__next_mem_range_revasbuh1hhjqubj)}(h h]h }(hhhjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubjU#)}(hj-h]h*}(hhhjqhhhNhNubah}(h]h ]j`#ah"]h$]h&]uh1jT#hjqubj)}(hidxh]hidx}(hhhjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjqubj!)}(hint nidh](jQ!)}(hinth]hint}(hhhjqhhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hjqubj)}(h h]h }(hhhjqhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubj)}(hnidh]hnid}(hhhj rhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjqubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjqubj!)}(henum memblock_flags flagsh](j)}(hjh]henum}(hhhj"rhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(h h]h }(hhhj/rhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubh)}(hhh]j)}(hmemblock_flagsh]hmemblock_flags}(hhhj@rhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj=rubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjBrmodnameN classnameNj!j!)}j!]jqc.__next_mem_range_revasbuh1hhjrubj)}(h h]h }(hhhj^rhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(hflagsh]hflags}(hhhjlrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjqubj!)}(hstruct memblock_type *type_ah](j)}(hjh]hstruct}(hhhjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(h h]h }(hhhjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubh)}(hhh]j)}(h memblock_typeh]h memblock_type}(hhhjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjrmodnameN classnameNj!j!)}j!]jqc.__next_mem_range_revasbuh1hhjrubj)}(h h]h }(hhhjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubjU#)}(hj-h]h*}(hhhjrhhhNhNubah}(h]h ]j`#ah"]h$]h&]uh1jT#hjrubj)}(htype_ah]htype_a}(hhhjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjqubj!)}(hstruct memblock_type *type_bh](j)}(hjh]hstruct}(hhhjrhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubj)}(h h]h }(hhhjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubh)}(hhh]j)}(h memblock_typeh]h memblock_type}(hhhjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjsmodnameN classnameNj!j!)}j!]jqc.__next_mem_range_revasbuh1hhjrubj)}(h h]h }(hhhj1shhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubjU#)}(hj-h]h*}(hhhj?shhhNhNubah}(h]h ]j`#ah"]h$]h&]uh1jT#hjrubj)}(htype_bh]htype_b}(hhhjLshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjrubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjqubj!)}(hphys_addr_t *out_starth](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhjhshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjesubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjjsmodnameN classnameNj!j!)}j!]jqc.__next_mem_range_revasbuh1hhjasubj)}(h h]h }(hhhjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjasubjU#)}(hj-h]h*}(hhhjshhhNhNubah}(h]h ]j`#ah"]h$]h&]uh1jT#hjasubj)}(h out_starth]h out_start}(hhhjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjasubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjqubj!)}(hphys_addr_t *out_endh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjsmodnameN classnameNj!j!)}j!]jqc.__next_mem_range_revasbuh1hhjsubj)}(h h]h }(hhhjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubjU#)}(hj-h]h*}(hhhjshhhNhNubah}(h]h ]j`#ah"]h$]h&]uh1jT#hjsubj)}(hout_endh]hout_end}(hhhjshhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjsubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjqubj!)}(h int *out_nidh](jQ!)}(hinth]hint}(hhhjthhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hj tubj)}(h h]h }(hhhjthhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj tubjU#)}(hj-h]h*}(hhhj+thhhNhNubah}(h]h ]j`#ah"]h$]h&]uh1jT#hj tubj)}(hout_nidh]hout_nid}(hhhj8thhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj tubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjqubeh}(h]h ]h"]h$]h&]jjuh1j!hjCqhhhjUqhMubeh}(h]h ]h"]h$]h&]jjjuh1j~jjhj?qhhhjUqhMubah}(h]j:qah ](jjeh"]h$]h&]juh1jxhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj}hhhNhNubh)}(h``NULL``h]hNULL}(hhhjG}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj>}ubeh}(h]h ]h"]h$]h&]uh1hhj:}hMPhj;}ubah}(h]h ]h"]h$]h&]uh1jBhj}ubeh}(h]h ]h"]h$]h&]uh1j"hj:}hMPhj|ubj#)}(hS``unsigned long *out_epfn`` ptr to ulong for end pfn of the range, can be ``NULL`` h](j))}(h``unsigned long *out_epfn``h]h)}(hjm}h]hunsigned long *out_epfn}(hhhjo}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjk}ubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMQhjg}ubjC)}(hhh]h)}(h6ptr to ulong for end pfn of the range, can be ``NULL``h](h.ptr to ulong for end pfn of the range, can be }(h.ptr to ulong for end pfn of the range, can be hj}hhhNhNubh)}(h``NULL``h]hNULL}(hhhj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj}ubeh}(h]h ]h"]h$]h&]uh1hhj}hMQhj}ubah}(h]h ]h"]h$]h&]uh1jBhjg}ubeh}(h]h ]h"]h$]h&]uh1j"hj}hMQhj|ubeh}(h]h ]h"]h$]h&]uh1jhj|ubh)}(h**Description**h]j)}(hj}h]h Description}(hhhj}hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMShj|ubh)}(hXThis function is meant to be a zone/pfn specific wrapper for the for_each_mem_range type iterators. Specifically they are used in the deferred memory init routines and as such we were duplicating much of this logic throughout the code. So instead of having it in multiple locations it seemed like it would make more sense to centralize this to one new iterator that does everything they need.h]hXThis function is meant to be a zone/pfn specific wrapper for the for_each_mem_range type iterators. Specifically they are used in the deferred memory init routines and as such we were duplicating much of this logic throughout the code. So instead of having it in multiple locations it seemed like it would make more sense to centralize this to one new iterator that does everything they need.}(hj}hj}hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMShj|ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjChhhNhNubjc)}(hhh]h}(h]h ]h"]h$]h&]entries](jo%memblock_alloc_range_nid (C function)c.memblock_alloc_range_nidhNtauh1jbhjChhhNhNubjt)}(hhh](jy)}(hphys_addr_t memblock_alloc_range_nid (phys_addr_t size, phys_addr_t align, phys_addr_t start, phys_addr_t end, int nid, bool exact_nid)h]j)}(hphys_addr_t memblock_alloc_range_nid(phys_addr_t size, phys_addr_t align, phys_addr_t start, phys_addr_t end, int nid, bool exact_nid)h](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhj}hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetj~modnameN classnameNj!j!)}j!]j!)}j!memblock_alloc_range_nidsbc.memblock_alloc_range_nidasbuh1hhj}hhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMubj)}(h h]h }(hhhj!~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj}hhhj ~hMubj)}(hmemblock_alloc_range_nidh]j)}(hj~h]hmemblock_alloc_range_nid}(hhhj3~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/~ubah}(h]h ](jjeh"]h$]h&]jjuh1jhj}hhhj ~hMubj!)}(hb(phys_addr_t size, phys_addr_t align, phys_addr_t start, phys_addr_t end, int nid, bool exact_nid)h](j!)}(hphys_addr_t sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhjQ~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjN~ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjS~modnameN classnameNj!j!)}j!]j~c.memblock_alloc_range_nidasbuh1hhjJ~ubj)}(h h]h }(hhhjo~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ~ubj)}(hsizeh]hsize}(hhhj}~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjJ~ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjF~ubj!)}(hphys_addr_t alignh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetj~modnameN classnameNj!j!)}j!]j~c.memblock_alloc_range_nidasbuh1hhj~ubj)}(h h]h }(hhhj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(halignh]halign}(hhhj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjF~ubj!)}(hphys_addr_t starth](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetj~modnameN classnameNj!j!)}j!]j~c.memblock_alloc_range_nidasbuh1hhj~ubj)}(h h]h }(hhhj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubj)}(hstarth]hstart}(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj~ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjF~ubj!)}(hphys_addr_t endh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhj)hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj&ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetj+modnameN classnameNj!j!)}j!]j~c.memblock_alloc_range_nidasbuh1hhj"ubj)}(h h]h }(hhhjGhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubj)}(hendh]hend}(hhhjUhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj"ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjF~ubj!)}(hint nidh](jQ!)}(hinth]hint}(hhhjnhhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hjjubj)}(h h]h }(hhhj|hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubj)}(hnidh]hnid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjjubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjF~ubj!)}(hbool exact_nidh](jQ!)}(hjZQh]hbool}(hhhjhhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(h exact_nidh]h exact_nid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjF~ubeh}(h]h ]h"]h$]h&]jjuh1j!hj}hhhj ~hMubeh}(h]h ]h"]h$]h&]jjjuh1j~jjhj}hhhj ~hMubah}(h]j}ah ](jjeh"]h$]h&]juh1jxhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj}hhubj)}(hhh]h)}(hallocate boot memory blockh]hallocate boot memory block}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhj}hhhj ~hMubeh}(h]h ](hfunctioneh"]h$]h&]jhjjjjjuh1jshhhjChNhNubj)}(hXQ**Parameters** ``phys_addr_t size`` size of memory block to be allocated in bytes ``phys_addr_t align`` alignment of the region and block's size ``phys_addr_t start`` the lower bound of the memory region to allocate (phys address) ``phys_addr_t end`` the upper bound of the memory region to allocate (phys address) ``int nid`` nid of the free area to find, ``NUMA_NO_NODE`` for any node ``bool exact_nid`` control the allocation fall back to other nodes **Description** The allocation is performed from memory region limited by memblock.current_limit if **end** == ``MEMBLOCK_ALLOC_ACCESSIBLE``. If the specified node can not hold the requested memory and **exact_nid** is false, the allocation falls back to any node in the system. For systems with memory mirroring, the allocation is attempted first from the regions with mirroring enabled and then retried from any memory region. In addition, function using kmemleak_alloc_phys for allocated boot memory block, it is never reported as leaks. **Return** Physical address of allocated memory block on success, ``0`` on failure.h](h)}(h**Parameters**h]j)}(hj h]h Parameters}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubj)}(hhh](j#)}(hC``phys_addr_t size`` size of memory block to be allocated in bytes h](j))}(h``phys_addr_t size``h]h)}(hj*h]hphys_addr_t size}(hhhj,hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj(ubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj$ubjC)}(hhh]h)}(h-size of memory block to be allocated in bytesh]h-size of memory block to be allocated in bytes}(hjEhjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?hMhj@ubah}(h]h ]h"]h$]h&]uh1jBhj$ubeh}(h]h ]h"]h$]h&]uh1j"hj?hMhj!ubj#)}(h?``phys_addr_t align`` alignment of the region and block's size h](j))}(h``phys_addr_t align``h]h)}(hjch]hphys_addr_t align}(hhhjehhhNhNubah}(h]h ]h"]h$]h&]uh1hhjaubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj]ubjC)}(hhh]h)}(h(alignment of the region and block's sizeh]h*alignment of the region and block’s size}(hj~hj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxhMhjyubah}(h]h ]h"]h$]h&]uh1jBhj]ubeh}(h]h ]h"]h$]h&]uh1j"hjxhMhj!ubj#)}(hV``phys_addr_t start`` the lower bound of the memory region to allocate (phys address) h](j))}(h``phys_addr_t start``h]h)}(hjh]hphys_addr_t start}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubjC)}(hhh]h)}(h?the lower bound of the memory region to allocate (phys address)h]h?the lower bound of the memory region to allocate (phys address)}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j"hjhMhj!ubj#)}(hT``phys_addr_t end`` the upper bound of the memory region to allocate (phys address) h](j))}(h``phys_addr_t end``h]h)}(hjՀh]hphys_addr_t end}(hhhj׀hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjӀubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjπubjC)}(hhh]h)}(h?the upper bound of the memory region to allocate (phys address)h]h?the upper bound of the memory region to allocate (phys address)}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jBhjπubeh}(h]h ]h"]h$]h&]uh1j"hjhMhj!ubj#)}(hH``int nid`` nid of the free area to find, ``NUMA_NO_NODE`` for any node h](j))}(h ``int nid``h]h)}(hjh]hint nid}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubjC)}(hhh]h)}(h;nid of the free area to find, ``NUMA_NO_NODE`` for any nodeh](hnid of the free area to find, }(hnid of the free area to find, hj'hhhNhNubh)}(h``NUMA_NO_NODE``h]h NUMA_NO_NODE}(hhhj0hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj'ubh for any node}(h for any nodehj'hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj#hMhj$ubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j"hj#hMhj!ubj#)}(hC``bool exact_nid`` control the allocation fall back to other nodes h](j))}(h``bool exact_nid``h]h)}(hj[h]hbool exact_nid}(hhhj]hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjYubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjUubjC)}(hhh]h)}(h/control the allocation fall back to other nodesh]h/control the allocation fall back to other nodes}(hjvhjthhhNhNubah}(h]h ]h"]h$]h&]uh1hhjphMhjqubah}(h]h ]h"]h$]h&]uh1jBhjUubeh}(h]h ]h"]h$]h&]uh1j"hjphMhj!ubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubh)}(h}The allocation is performed from memory region limited by memblock.current_limit if **end** == ``MEMBLOCK_ALLOC_ACCESSIBLE``.h](hTThe allocation is performed from memory region limited by memblock.current_limit if }(hTThe allocation is performed from memory region limited by memblock.current_limit if hjhhhNhNubj)}(h**end**h]hend}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubh == }(h == hjhhhNhNubh)}(h``MEMBLOCK_ALLOC_ACCESSIBLE``h]hMEMBLOCK_ALLOC_ACCESSIBLE}(hhhjȁhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh.}(hjRhjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubh)}(hIf the specified node can not hold the requested memory and **exact_nid** is false, the allocation falls back to any node in the system.h](hhhhNhNubj)}(h**size**h]hsize}(hhhjGhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubh bytes in the between }(h bytes in the between hj>hhhNhNubj)}(h **start**h]hstart}(hhhjZhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubh and }(h and hj>hhhNhNubj)}(h**end**h]hend}(hhhjmhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubh.}(hjRhj>hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubh)}(h **Return**h]j)}(hjh]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubh)}(hLphysical address of the allocated memory block on success, ``0`` on failure.h](h;physical address of the allocated memory block on success, }(h;physical address of the allocated memory block on success, hjhhhNhNubh)}(h``0``h]h0}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh on failure.}(h on failure.hjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjChhhNhNubjc)}(hhh]h}(h]h ]h"]h$]h&]entries](jo(memblock_phys_alloc_try_nid (C function)c.memblock_phys_alloc_try_nidhNtauh1jbhjChhhNhNubjt)}(hhh](jy)}(hVphys_addr_t memblock_phys_alloc_try_nid (phys_addr_t size, phys_addr_t align, int nid)h]j)}(hUphys_addr_t memblock_phys_alloc_try_nid(phys_addr_t size, phys_addr_t align, int nid)h](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjmodnameN classnameNj!j!)}j!]j!)}j!memblock_phys_alloc_try_nidsbc.memblock_phys_alloc_try_nidasbuh1hhj݅hhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj݅hhhjhMubj)}(hmemblock_phys_alloc_try_nidh]j)}(hjh]hmemblock_phys_alloc_try_nid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhj݅hhhjhMubj!)}(h.(phys_addr_t size, phys_addr_t align, int nid)h](j!)}(hphys_addr_t sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhj6hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj3ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetj8modnameN classnameNj!j!)}j!]jc.memblock_phys_alloc_try_nidasbuh1hhj/ubj)}(h h]h }(hhhjThhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubj)}(hsizeh]hsize}(hhhjbhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj/ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hj+ubj!)}(hphys_addr_t alignh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhj~hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjmodnameN classnameNj!j!)}j!]jc.memblock_phys_alloc_try_nidasbuh1hhjwubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubj)}(halignh]halign}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjwubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hj+ubj!)}(hint nidh](jQ!)}(hinth]hint}(hhhjÆhhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hjubj)}(h h]h }(hhhjцhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hnidh]hnid}(hhhj߆hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hj+ubeh}(h]h ]h"]h$]h&]jjuh1j!hj݅hhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j~jjhjمhhhjhMubah}(h]jԅah ](jjeh"]h$]h&]juh1jxhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM hjօhhubj)}(hhh]h)}(h0allocate a memory block from specified NUMA nodeh]h0allocate a memory block from specified NUMA node}(hj hj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjhhubah}(h]h ]h"]h$]h&]uh1jhjօhhhjhMubeh}(h]h ](hfunctioneh"]h$]h&]jhjj"jj"juh1jshhhjChNhNubj)}(hX**Parameters** ``phys_addr_t size`` size of memory block to be allocated in bytes ``phys_addr_t align`` alignment of the region and block's size ``int nid`` nid of the free area to find, ``NUMA_NO_NODE`` for any node **Description** Allocates memory block from the specified NUMA node. If the node has no available memory, attempts to allocated from any node in the system. **Return** physical address of the allocated memory block on success, ``0`` on failure.h](h)}(h**Parameters**h]j)}(hj,h]h Parameters}(hhhj.hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj*ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj&ubj)}(hhh](j#)}(hC``phys_addr_t size`` size of memory block to be allocated in bytes h](j))}(h``phys_addr_t size``h]h)}(hjKh]hphys_addr_t size}(hhhjMhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjEubjC)}(hhh]h)}(h-size of memory block to be allocated in bytesh]h-size of memory block to be allocated in bytes}(hjfhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`hMhjaubah}(h]h ]h"]h$]h&]uh1jBhjEubeh}(h]h ]h"]h$]h&]uh1j"hj`hMhjBubj#)}(h?``phys_addr_t align`` alignment of the region and block's size h](j))}(h``phys_addr_t align``h]h)}(hjh]hphys_addr_t align}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj~ubjC)}(hhh]h)}(h(alignment of the region and block's sizeh]h*alignment of the region and block’s size}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jBhj~ubeh}(h]h ]h"]h$]h&]uh1j"hjhMhjBubj#)}(hH``int nid`` nid of the free area to find, ``NUMA_NO_NODE`` for any node h](j))}(h ``int nid``h]h)}(hjh]hint nid}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubjC)}(hhh]h)}(h;nid of the free area to find, ``NUMA_NO_NODE`` for any nodeh](hnid of the free area to find, }(hnid of the free area to find, hjևhhhNhNubh)}(h``NUMA_NO_NODE``h]h NUMA_NO_NODE}(hhhj߇hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjևubh for any node}(h for any nodehjևhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhj҇hMhjӇubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j"hj҇hMhjBubeh}(h]h ]h"]h$]h&]uh1jhj&ubh)}(h**Description**h]j)}(hj h]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj&ubh)}(hAllocates memory block from the specified NUMA node. If the node has no available memory, attempts to allocated from any node in the system.h]hAllocates memory block from the specified NUMA node. If the node has no available memory, attempts to allocated from any node in the system.}(hj$hj"hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj&ubh)}(h **Return**h]j)}(hj3h]hReturn}(hhhj5hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj1ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj&ubh)}(hLphysical address of the allocated memory block on success, ``0`` on failure.h](h;physical address of the allocated memory block on success, }(h;physical address of the allocated memory block on success, hjIhhhNhNubh)}(h``0``h]h0}(hhhjRhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjIubh on failure.}(h on failure.hjIhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj&ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjChhhNhNubjc)}(hhh]h}(h]h ]h"]h$]h&]entries](jo$memblock_alloc_internal (C function)c.memblock_alloc_internalhNtauh1jbhjChhhNhNubjt)}(hhh](jy)}(hvoid * memblock_alloc_internal (phys_addr_t size, phys_addr_t align, phys_addr_t min_addr, phys_addr_t max_addr, int nid, bool exact_nid)h]j)}(hvoid *memblock_alloc_internal(phys_addr_t size, phys_addr_t align, phys_addr_t min_addr, phys_addr_t max_addr, int nid, bool exact_nid)h](jQ!)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjhMubjU#)}(hj-h]h*}(hhhjhhhNhNubah}(h]h ]j`#ah"]h$]h&]uh1jT#hjhhhjhMubj)}(hmemblock_alloc_internalh]j)}(hmemblock_alloc_internalh]hmemblock_alloc_internal}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjhMubj!)}(hj(phys_addr_t size, phys_addr_t align, phys_addr_t min_addr, phys_addr_t max_addr, int nid, bool exact_nid)h](j!)}(hphys_addr_t sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhjوhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjֈubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjۈmodnameN classnameNj!j!)}j!]j!)}j!jsbc.memblock_alloc_internalasbuh1hhj҈ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj҈ubj)}(hsizeh]hsize}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj҈ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjΈubj!)}(hphys_addr_t alignh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetj%modnameN classnameNj!j!)}j!]jc.memblock_alloc_internalasbuh1hhjubj)}(h h]h }(hhhjAhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(halignh]halign}(hhhjOhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjΈubj!)}(hphys_addr_t min_addrh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhjkhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjmmodnameN classnameNj!j!)}j!]jc.memblock_alloc_internalasbuh1hhjdubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubj)}(hmin_addrh]hmin_addr}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjdubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjΈubj!)}(hphys_addr_t max_addrh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjmodnameN classnameNj!j!)}j!]jc.memblock_alloc_internalasbuh1hhjubj)}(h h]h }(hhhjщhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hmax_addrh]hmax_addr}(hhhj߉hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjΈubj!)}(hint nidh](jQ!)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hnidh]hnid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjΈubj!)}(hbool exact_nidh](jQ!)}(hjZQh]hbool}(hhhj-hhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hj)ubj)}(h h]h }(hhhj:hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubj)}(h exact_nidh]h exact_nid}(hhhjHhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj)ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjΈubeh}(h]h ]h"]h$]h&]jjuh1j!hjhhhjhMubeh}(h]h ]h"]h$]h&]jjjuh1j~jjhjhhhjhMubah}(h]jah ](jjeh"]h$]h&]juh1jxhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM$hjhhubj)}(hhh]h)}(hallocate boot memory blockh]hallocate boot memory block}(hjuhjshhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjphhubah}(h]h ]h"]h$]h&]uh1jhjhhhjhMubeh}(h]h ](hfunctioneh"]h$]h&]jhjjjjjuh1jshhhjChNhNubj)}(hX**Parameters** ``phys_addr_t size`` size of memory block to be allocated in bytes ``phys_addr_t align`` alignment of the region and block's size ``phys_addr_t min_addr`` the lower bound of the memory region to allocate (phys address) ``phys_addr_t max_addr`` the upper bound of the memory region to allocate (phys address) ``int nid`` nid of the free area to find, ``NUMA_NO_NODE`` for any node ``bool exact_nid`` control the allocation fall back to other nodes **Description** Allocates memory block using memblock_alloc_range_nid() and converts the returned physical address to virtual. The **min_addr** limit is dropped if it can not be satisfied and the allocation will fall back to memory below **min_addr**. Other constraints, such as node and mirrored memory will be handled again in memblock_alloc_range_nid(). **Return** Virtual address of allocated memory block on success, NULL on failure.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubj)}(hhh](j#)}(hC``phys_addr_t size`` size of memory block to be allocated in bytes h](j))}(h``phys_addr_t size``h]h)}(hjh]hphys_addr_t size}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubjC)}(hhh]h)}(h-size of memory block to be allocated in bytesh]h-size of memory block to be allocated in bytes}(hjϊhj͊hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjɊhMhjʊubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j"hjɊhMhjubj#)}(h?``phys_addr_t align`` alignment of the region and block's size h](j))}(h``phys_addr_t align``h]h)}(hjh]hphys_addr_t align}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubjC)}(hhh]h)}(h(alignment of the region and block's sizeh]h*alignment of the region and block’s size}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j"hjhMhjubj#)}(hY``phys_addr_t min_addr`` the lower bound of the memory region to allocate (phys address) h](j))}(h``phys_addr_t min_addr``h]h)}(hj&h]hphys_addr_t min_addr}(hhhj(hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$ubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj ubjC)}(hhh]h)}(h?the lower bound of the memory region to allocate (phys address)h]h?the lower bound of the memory region to allocate (phys address)}(hjAhj?hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj;hMhj<ubah}(h]h ]h"]h$]h&]uh1jBhj ubeh}(h]h ]h"]h$]h&]uh1j"hj;hMhjubj#)}(hY``phys_addr_t max_addr`` the upper bound of the memory region to allocate (phys address) h](j))}(h``phys_addr_t max_addr``h]h)}(hj_h]hphys_addr_t max_addr}(hhhjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]ubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjYubjC)}(hhh]h)}(h?the upper bound of the memory region to allocate (phys address)h]h?the upper bound of the memory region to allocate (phys address)}(hjzhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthMhjuubah}(h]h ]h"]h$]h&]uh1jBhjYubeh}(h]h ]h"]h$]h&]uh1j"hjthMhjubj#)}(hH``int nid`` nid of the free area to find, ``NUMA_NO_NODE`` for any node h](j))}(h ``int nid``h]h)}(hjh]hint nid}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubjC)}(hhh]h)}(h;nid of the free area to find, ``NUMA_NO_NODE`` for any nodeh](hnid of the free area to find, }(hnid of the free area to find, hjhhhNhNubh)}(h``NUMA_NO_NODE``h]h NUMA_NO_NODE}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh for any node}(h for any nodehjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j"hjhMhjubj#)}(hC``bool exact_nid`` control the allocation fall back to other nodes h](j))}(h``bool exact_nid``h]h)}(hjh]hbool exact_nid}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjߋubjC)}(hhh]h)}(h/control the allocation fall back to other nodesh]h/control the allocation fall back to other nodes}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jBhjߋubeh}(h]h ]h"]h$]h&]uh1j"hjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hj h]h Description}(hhhj"hhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubh)}(hnAllocates memory block using memblock_alloc_range_nid() and converts the returned physical address to virtual.h]hnAllocates memory block using memblock_alloc_range_nid() and converts the returned physical address to virtual.}(hj8hj6hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubh)}(hThe **min_addr** limit is dropped if it can not be satisfied and the allocation will fall back to memory below **min_addr**. Other constraints, such as node and mirrored memory will be handled again in memblock_alloc_range_nid().h](hThe }(hThe hjEhhhNhNubj)}(h **min_addr**h]hmin_addr}(hhhjNhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubh_ limit is dropped if it can not be satisfied and the allocation will fall back to memory below }(h_ limit is dropped if it can not be satisfied and the allocation will fall back to memory below hjEhhhNhNubj)}(h **min_addr**h]hmin_addr}(hhhjahhhNhNubah}(h]h ]h"]h$]h&]uh1jhjEubhj. Other constraints, such as node and mirrored memory will be handled again in memblock_alloc_range_nid().}(hj. Other constraints, such as node and mirrored memory will be handled again in memblock_alloc_range_nid().hjEhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubh)}(h **Return**h]j)}(hj}h]hReturn}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj{ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM!hjubh)}(hFVirtual address of allocated memory block on success, NULL on failure.h]hFVirtual address of allocated memory block on success, NULL on failure.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chM#hjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjChhhNhNubjc)}(hhh]h}(h]h ]h"]h$]h&]entries](jo)memblock_alloc_exact_nid_raw (C function)c.memblock_alloc_exact_nid_rawhNtauh1jbhjChhhNhNubjt)}(hhh](jy)}(h~void * memblock_alloc_exact_nid_raw (phys_addr_t size, phys_addr_t align, phys_addr_t min_addr, phys_addr_t max_addr, int nid)h]j)}(h|void *memblock_alloc_exact_nid_raw(phys_addr_t size, phys_addr_t align, phys_addr_t min_addr, phys_addr_t max_addr, int nid)h](jQ!)}(hvoidh]hvoid}(hhhjŒhhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMFubj)}(h h]h }(hhhjьhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhjЌhMFubjU#)}(hj-h]h*}(hhhjߌhhhNhNubah}(h]h ]j`#ah"]h$]h&]uh1jT#hjhhhjЌhMFubj)}(hmemblock_alloc_exact_nid_rawh]j)}(hmemblock_alloc_exact_nid_rawh]hmemblock_alloc_exact_nid_raw}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhjЌhMFubj!)}(hZ(phys_addr_t size, phys_addr_t align, phys_addr_t min_addr, phys_addr_t max_addr, int nid)h](j!)}(hphys_addr_t sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjmodnameN classnameNj!j!)}j!]j!)}j!jsbc.memblock_alloc_exact_nid_rawasbuh1hhjubj)}(h h]h }(hhhj/hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hsizeh]hsize}(hhhj=hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjubj!)}(hphys_addr_t alignh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjVubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetj[modnameN classnameNj!j!)}j!]j+c.memblock_alloc_exact_nid_rawasbuh1hhjRubj)}(h h]h }(hhhjwhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubj)}(halignh]halign}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjRubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjubj!)}(hphys_addr_t min_addrh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjmodnameN classnameNj!j!)}j!]j+c.memblock_alloc_exact_nid_rawasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hmin_addrh]hmin_addr}(hhhj͍hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjubj!)}(hphys_addr_t max_addrh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjmodnameN classnameNj!j!)}j!]j+c.memblock_alloc_exact_nid_rawasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hmax_addrh]hmax_addr}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjubj!)}(hint nidh](jQ!)}(hinth]hint}(hhhj.hhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hj*ubj)}(h h]h }(hhhj<hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubj)}(hnidh]hnid}(hhhjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj*ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjubeh}(h]h ]h"]h$]h&]jjuh1j!hjhhhjЌhMFubeh}(h]h ]h"]h$]h&]jjjuh1j~jjhjhhhjЌhMFubah}(h]jah ](jjeh"]h$]h&]juh1jxhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMVhjhhubj)}(hhh]h)}(hCallocate boot memory block on the exact node without zeroing memoryh]hCallocate boot memory block on the exact node without zeroing memory}(hjwhjuhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMEhjrhhubah}(h]h ]h"]h$]h&]uh1jhjhhhjЌhMFubeh}(h]h ](hfunctioneh"]h$]h&]jhjjjjjuh1jshhhjChNhNubj)}(hX **Parameters** ``phys_addr_t size`` size of memory block to be allocated in bytes ``phys_addr_t align`` alignment of the region and block's size ``phys_addr_t min_addr`` the lower bound of the memory region from where the allocation is preferred (phys address) ``phys_addr_t max_addr`` the upper bound of the memory region from where the allocation is preferred (phys address), or ``MEMBLOCK_ALLOC_ACCESSIBLE`` to allocate only from memory limited by memblock.current_limit value ``int nid`` nid of the free area to find, ``NUMA_NO_NODE`` for any node **Description** Public function, provides additional debug information (including caller info), if enabled. Does not zero allocated memory. **Return** Virtual address of allocated memory block on success, NULL on failure.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMIhjubj)}(hhh](j#)}(hC``phys_addr_t size`` size of memory block to be allocated in bytes h](j))}(h``phys_addr_t size``h]h)}(hjh]hphys_addr_t size}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMGhjubjC)}(hhh]h)}(h-size of memory block to be allocated in bytesh]h-size of memory block to be allocated in bytes}(hjюhjώhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjˎhMGhj̎ubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j"hjˎhMGhjubj#)}(h?``phys_addr_t align`` alignment of the region and block's size h](j))}(h``phys_addr_t align``h]h)}(hjh]hphys_addr_t align}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMHhjubjC)}(hhh]h)}(h(alignment of the region and block's sizeh]h*alignment of the region and block’s size}(hj hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMHhjubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j"hjhMHhjubj#)}(ht``phys_addr_t min_addr`` the lower bound of the memory region from where the allocation is preferred (phys address) h](j))}(h``phys_addr_t min_addr``h]h)}(hj(h]hphys_addr_t min_addr}(hhhj*hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj&ubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMJhj"ubjC)}(hhh]h)}(hZthe lower bound of the memory region from where the allocation is preferred (phys address)h]hZthe lower bound of the memory region from where the allocation is preferred (phys address)}(hjChjAhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMIhj>ubah}(h]h ]h"]h$]h&]uh1jBhj"ubeh}(h]h ]h"]h$]h&]uh1j"hj=hMJhjubj#)}(h``phys_addr_t max_addr`` the upper bound of the memory region from where the allocation is preferred (phys address), or ``MEMBLOCK_ALLOC_ACCESSIBLE`` to allocate only from memory limited by memblock.current_limit value h](j))}(h``phys_addr_t max_addr``h]h)}(hjbh]hphys_addr_t max_addr}(hhhjdhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj`ubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMMhj\ubjC)}(hhh]h)}(hthe upper bound of the memory region from where the allocation is preferred (phys address), or ``MEMBLOCK_ALLOC_ACCESSIBLE`` to allocate only from memory limited by memblock.current_limit valueh](h_the upper bound of the memory region from where the allocation is preferred (phys address), or }(h_the upper bound of the memory region from where the allocation is preferred (phys address), or hj{hhhNhNubh)}(h``MEMBLOCK_ALLOC_ACCESSIBLE``h]hMEMBLOCK_ALLOC_ACCESSIBLE}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhj{ubhE to allocate only from memory limited by memblock.current_limit value}(hE to allocate only from memory limited by memblock.current_limit valuehj{hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMKhjxubah}(h]h ]h"]h$]h&]uh1jBhj\ubeh}(h]h ]h"]h$]h&]uh1j"hjwhMMhjubj#)}(hH``int nid`` nid of the free area to find, ``NUMA_NO_NODE`` for any node h](j))}(h ``int nid``h]h)}(hjh]hint nid}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMNhjubjC)}(hhh]h)}(h;nid of the free area to find, ``NUMA_NO_NODE`` for any nodeh](hnid of the free area to find, }(hnid of the free area to find, hjɏhhhNhNubh)}(h``NUMA_NO_NODE``h]h NUMA_NO_NODE}(hhhjҏhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjɏubh for any node}(h for any nodehjɏhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjŏhMNhjƏubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j"hjŏhMNhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMPhjubh)}(h{Public function, provides additional debug information (including caller info), if enabled. Does not zero allocated memory.h]h{Public function, provides additional debug information (including caller info), if enabled. Does not zero allocated memory.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMPhjubh)}(h **Return**h]j)}(hj&h]hReturn}(hhhj(hhhNhNubah}(h]h ]h"]h$]h&]uh1jhj$ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMShjubh)}(hFVirtual address of allocated memory block on success, NULL on failure.h]hFVirtual address of allocated memory block on success, NULL on failure.}(hj>hj<hhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMUhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjChhhNhNubjc)}(hhh]h}(h]h ]h"]h$]h&]entries](jo'memblock_alloc_try_nid_raw (C function)c.memblock_alloc_try_nid_rawhNtauh1jbhjChhhNhNubjt)}(hhh](jy)}(h|void * memblock_alloc_try_nid_raw (phys_addr_t size, phys_addr_t align, phys_addr_t min_addr, phys_addr_t max_addr, int nid)h]j)}(hzvoid *memblock_alloc_try_nid_raw(phys_addr_t size, phys_addr_t align, phys_addr_t min_addr, phys_addr_t max_addr, int nid)h](jQ!)}(hvoidh]hvoid}(hhhjkhhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hjghhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMeubj)}(h h]h }(hhhjzhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjghhhjyhMeubjU#)}(hj-h]h*}(hhhjhhhNhNubah}(h]h ]j`#ah"]h$]h&]uh1jT#hjghhhjyhMeubj)}(hmemblock_alloc_try_nid_rawh]j)}(hmemblock_alloc_try_nid_rawh]hmemblock_alloc_try_nid_raw}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ](jjeh"]h$]h&]jjuh1jhjghhhjyhMeubj!)}(hZ(phys_addr_t size, phys_addr_t align, phys_addr_t min_addr, phys_addr_t max_addr, int nid)h](j!)}(hphys_addr_t sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjmodnameN classnameNj!j!)}j!]j!)}j!jsbc.memblock_alloc_try_nid_rawasbuh1hhjubj)}(h h]h }(hhhjؐhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hsizeh]hsize}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjubj!)}(hphys_addr_t alignh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjmodnameN classnameNj!j!)}j!]jԐc.memblock_alloc_try_nid_rawasbuh1hhjubj)}(h h]h }(hhhj hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(halignh]halign}(hhhj.hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjubj!)}(hphys_addr_t min_addrh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhjJhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjGubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjLmodnameN classnameNj!j!)}j!]jԐc.memblock_alloc_try_nid_rawasbuh1hhjCubj)}(h h]h }(hhhjhhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubj)}(hmin_addrh]hmin_addr}(hhhjvhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjCubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjubj!)}(hphys_addr_t max_addrh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjmodnameN classnameNj!j!)}j!]jԐc.memblock_alloc_try_nid_rawasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hmax_addrh]hmax_addr}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjubj!)}(hint nidh](jQ!)}(hinth]hint}(hhhjבhhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hjӑubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjӑubj)}(hnidh]hnid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjӑubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjubeh}(h]h ]h"]h$]h&]jjuh1j!hjghhhjyhMeubeh}(h]h ]h"]h$]h&]jjjuh1j~jjhjchhhjyhMeubah}(h]j^ah ](jjeh"]h$]h&]juh1jxhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMvhj`hhubj)}(hhh]h)}(hGallocate boot memory block without zeroing memory and without panickingh]hGallocate boot memory block without zeroing memory and without panicking}(hj hjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMdhjhhubah}(h]h ]h"]h$]h&]uh1jhj`hhhjyhMeubeh}(h]h ](hfunctioneh"]h$]h&]jhjj6jj6juh1jshhhjChNhNubj)}(hXO**Parameters** ``phys_addr_t size`` size of memory block to be allocated in bytes ``phys_addr_t align`` alignment of the region and block's size ``phys_addr_t min_addr`` the lower bound of the memory region from where the allocation is preferred (phys address) ``phys_addr_t max_addr`` the upper bound of the memory region from where the allocation is preferred (phys address), or ``MEMBLOCK_ALLOC_ACCESSIBLE`` to allocate only from memory limited by memblock.current_limit value ``int nid`` nid of the free area to find, ``NUMA_NO_NODE`` for any node **Description** Public function, provides additional debug information (including caller info), if enabled. Does not zero allocated memory, does not panic if request cannot be satisfied. **Return** Virtual address of allocated memory block on success, NULL on failure.h](h)}(h**Parameters**h]j)}(hj@h]h Parameters}(hhhjBhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj>ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhhj:ubj)}(hhh](j#)}(hC``phys_addr_t size`` size of memory block to be allocated in bytes h](j))}(h``phys_addr_t size``h]h)}(hj_h]hphys_addr_t size}(hhhjahhhNhNubah}(h]h ]h"]h$]h&]uh1hhj]ubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMfhjYubjC)}(hhh]h)}(h-size of memory block to be allocated in bytesh]h-size of memory block to be allocated in bytes}(hjzhjxhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjthMfhjuubah}(h]h ]h"]h$]h&]uh1jBhjYubeh}(h]h ]h"]h$]h&]uh1j"hjthMfhjVubj#)}(h?``phys_addr_t align`` alignment of the region and block's size h](j))}(h``phys_addr_t align``h]h)}(hjh]hphys_addr_t align}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMghjubjC)}(hhh]h)}(h(alignment of the region and block's sizeh]h*alignment of the region and block’s size}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMghjubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j"hjhMghjVubj#)}(ht``phys_addr_t min_addr`` the lower bound of the memory region from where the allocation is preferred (phys address) h](j))}(h``phys_addr_t min_addr``h]h)}(hjђh]hphys_addr_t min_addr}(hhhjӒhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjϒubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMihj˒ubjC)}(hhh]h)}(hZthe lower bound of the memory region from where the allocation is preferred (phys address)h]hZthe lower bound of the memory region from where the allocation is preferred (phys address)}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhhjubah}(h]h ]h"]h$]h&]uh1jBhj˒ubeh}(h]h ]h"]h$]h&]uh1j"hjhMihjVubj#)}(h``phys_addr_t max_addr`` the upper bound of the memory region from where the allocation is preferred (phys address), or ``MEMBLOCK_ALLOC_ACCESSIBLE`` to allocate only from memory limited by memblock.current_limit value h](j))}(h``phys_addr_t max_addr``h]h)}(hj h]hphys_addr_t max_addr}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj ubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMlhjubjC)}(hhh]h)}(hthe upper bound of the memory region from where the allocation is preferred (phys address), or ``MEMBLOCK_ALLOC_ACCESSIBLE`` to allocate only from memory limited by memblock.current_limit valueh](h_the upper bound of the memory region from where the allocation is preferred (phys address), or }(h_the upper bound of the memory region from where the allocation is preferred (phys address), or hj$hhhNhNubh)}(h``MEMBLOCK_ALLOC_ACCESSIBLE``h]hMEMBLOCK_ALLOC_ACCESSIBLE}(hhhj-hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj$ubhE to allocate only from memory limited by memblock.current_limit value}(hE to allocate only from memory limited by memblock.current_limit valuehj$hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMjhj!ubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j"hj hMlhjVubj#)}(hH``int nid`` nid of the free area to find, ``NUMA_NO_NODE`` for any node h](j))}(h ``int nid``h]h)}(hjYh]hint nid}(hhhj[hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjWubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMmhjSubjC)}(hhh]h)}(h;nid of the free area to find, ``NUMA_NO_NODE`` for any nodeh](hnid of the free area to find, }(hnid of the free area to find, hjrhhhNhNubh)}(h``NUMA_NO_NODE``h]h NUMA_NO_NODE}(hhhj{hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjrubh for any node}(h for any nodehjrhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjnhMmhjoubah}(h]h ]h"]h$]h&]uh1jBhjSubeh}(h]h ]h"]h$]h&]uh1j"hjnhMmhjVubeh}(h]h ]h"]h$]h&]uh1jhj:ubh)}(h**Description**h]j)}(hjh]h Description}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMohj:ubh)}(hPublic function, provides additional debug information (including caller info), if enabled. Does not zero allocated memory, does not panic if request cannot be satisfied.h]hPublic function, provides additional debug information (including caller info), if enabled. Does not zero allocated memory, does not panic if request cannot be satisfied.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMohj:ubh)}(h **Return**h]j)}(hjϓh]hReturn}(hhhjѓhhhNhNubah}(h]h ]h"]h$]h&]uh1jhj͓ubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMshj:ubh)}(hFVirtual address of allocated memory block on success, NULL on failure.h]hFVirtual address of allocated memory block on success, NULL on failure.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMuhj:ubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjChhhNhNubjc)}(hhh]h}(h]h ]h"]h$]h&]entries](jo#memblock_alloc_try_nid (C function)c.memblock_alloc_try_nidhNtauh1jbhjChhhNhNubjt)}(hhh](jy)}(hxvoid * memblock_alloc_try_nid (phys_addr_t size, phys_addr_t align, phys_addr_t min_addr, phys_addr_t max_addr, int nid)h]j)}(hvvoid *memblock_alloc_try_nid(phys_addr_t size, phys_addr_t align, phys_addr_t min_addr, phys_addr_t max_addr, int nid)h](jQ!)}(hvoidh]hvoid}(hhhjhhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hjhhhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMubj)}(h h]h }(hhhj#hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjhhhj"hMubjU#)}(hj-h]h*}(hhhj1hhhNhNubah}(h]h ]j`#ah"]h$]h&]uh1jT#hjhhhj"hMubj)}(hmemblock_alloc_try_nidh]j)}(hmemblock_alloc_try_nidh]hmemblock_alloc_try_nid}(hhhjBhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj>ubah}(h]h ](jjeh"]h$]h&]jjuh1jhjhhhj"hMubj!)}(hZ(phys_addr_t size, phys_addr_t align, phys_addr_t min_addr, phys_addr_t max_addr, int nid)h](j!)}(hphys_addr_t sizeh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhjahhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj^ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjcmodnameN classnameNj!j!)}j!]j!)}j!jDsbc.memblock_alloc_try_nidasbuh1hhjZubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubj)}(hsizeh]hsize}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjZubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjVubj!)}(hphys_addr_t alignh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjmodnameN classnameNj!j!)}j!]j}c.memblock_alloc_try_nidasbuh1hhjubj)}(h h]h }(hhhjɔhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(halignh]halign}(hhhjהhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjVubj!)}(hphys_addr_t min_addrh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetjmodnameN classnameNj!j!)}j!]j}c.memblock_alloc_try_nidasbuh1hhjubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubj)}(hmin_addrh]hmin_addr}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhjubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjVubj!)}(hphys_addr_t max_addrh](h)}(hhh]j)}(h phys_addr_th]h phys_addr_t}(hhhj;hhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj8ubah}(h]h ]h"]h$]h&] refdomainhreftypej! reftargetj=modnameN classnameNj!j!)}j!]j}c.memblock_alloc_try_nidasbuh1hhj4ubj)}(h h]h }(hhhjYhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubj)}(hmax_addrh]hmax_addr}(hhhjghhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj4ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjVubj!)}(hint nidh](jQ!)}(hinth]hint}(hhhjhhhNhNubah}(h]h ]j]!ah"]h$]h&]uh1jP!hj|ubj)}(h h]h }(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubj)}(hnidh]hnid}(hhhjhhhNhNubah}(h]h ]jah"]h$]h&]uh1jhj|ubeh}(h]h ]h"]h$]h&]noemphjjuh1j!hjVubeh}(h]h ]h"]h$]h&]jjuh1j!hjhhhj"hMubeh}(h]h ]h"]h$]h&]jjjuh1j~jjhj hhhj"hMubah}(h]jah ](jjeh"]h$]h&]juh1jxhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj hhubj)}(hhh]h)}(hallocate boot memory blockh]hallocate boot memory block}(hjɕhjǕhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjĕhhubah}(h]h ]h"]h$]h&]uh1jhj hhhj"hMubeh}(h]h ](hfunctioneh"]h$]h&]jhjjߕjjߕjuh1jshhhjChNhNubj)}(hX+**Parameters** ``phys_addr_t size`` size of memory block to be allocated in bytes ``phys_addr_t align`` alignment of the region and block's size ``phys_addr_t min_addr`` the lower bound of the memory region from where the allocation is preferred (phys address) ``phys_addr_t max_addr`` the upper bound of the memory region from where the allocation is preferred (phys address), or ``MEMBLOCK_ALLOC_ACCESSIBLE`` to allocate only from memory limited by memblock.current_limit value ``int nid`` nid of the free area to find, ``NUMA_NO_NODE`` for any node **Description** Public function, provides additional debug information (including caller info), if enabled. This function zeroes the allocated memory. **Return** Virtual address of allocated memory block on success, NULL on failure.h](h)}(h**Parameters**h]j)}(hjh]h Parameters}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubj)}(hhh](j#)}(hC``phys_addr_t size`` size of memory block to be allocated in bytes h](j))}(h``phys_addr_t size``h]h)}(hjh]hphys_addr_t size}(hhhj hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubjC)}(hhh]h)}(h-size of memory block to be allocated in bytesh]h-size of memory block to be allocated in bytes}(hj#hj!hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j"hjhMhjubj#)}(h?``phys_addr_t align`` alignment of the region and block's size h](j))}(h``phys_addr_t align``h]h)}(hjAh]hphys_addr_t align}(hhhjChhhNhNubah}(h]h ]h"]h$]h&]uh1hhj?ubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhj;ubjC)}(hhh]h)}(h(alignment of the region and block's sizeh]h*alignment of the region and block’s size}(hj\hjZhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjVhMhjWubah}(h]h ]h"]h$]h&]uh1jBhj;ubeh}(h]h ]h"]h$]h&]uh1j"hjVhMhjubj#)}(ht``phys_addr_t min_addr`` the lower bound of the memory region from where the allocation is preferred (phys address) h](j))}(h``phys_addr_t min_addr``h]h)}(hjzh]hphys_addr_t min_addr}(hhhj|hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjxubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjtubjC)}(hhh]h)}(hZthe lower bound of the memory region from where the allocation is preferred (phys address)h]hZthe lower bound of the memory region from where the allocation is preferred (phys address)}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubah}(h]h ]h"]h$]h&]uh1jBhjtubeh}(h]h ]h"]h$]h&]uh1j"hjhMhjubj#)}(h``phys_addr_t max_addr`` the upper bound of the memory region from where the allocation is preferred (phys address), or ``MEMBLOCK_ALLOC_ACCESSIBLE`` to allocate only from memory limited by memblock.current_limit value h](j))}(h``phys_addr_t max_addr``h]h)}(hjh]hphys_addr_t max_addr}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubjC)}(hhh]h)}(hthe upper bound of the memory region from where the allocation is preferred (phys address), or ``MEMBLOCK_ALLOC_ACCESSIBLE`` to allocate only from memory limited by memblock.current_limit valueh](h_the upper bound of the memory region from where the allocation is preferred (phys address), or }(h_the upper bound of the memory region from where the allocation is preferred (phys address), or hj͖hhhNhNubh)}(h``MEMBLOCK_ALLOC_ACCESSIBLE``h]hMEMBLOCK_ALLOC_ACCESSIBLE}(hhhj֖hhhNhNubah}(h]h ]h"]h$]h&]uh1hhj͖ubhE to allocate only from memory limited by memblock.current_limit value}(hE to allocate only from memory limited by memblock.current_limit valuehj͖hhhNhNubeh}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjʖubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j"hjɖhMhjubj#)}(hH``int nid`` nid of the free area to find, ``NUMA_NO_NODE`` for any node h](j))}(h ``int nid``h]h)}(hjh]hint nid}(hhhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubah}(h]h ]h"]h$]h&]uh1j(hS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubjC)}(hhh]h)}(h;nid of the free area to find, ``NUMA_NO_NODE`` for any nodeh](hnid of the free area to find, }(hnid of the free area to find, hjhhhNhNubh)}(h``NUMA_NO_NODE``h]h NUMA_NO_NODE}(hhhj$hhhNhNubah}(h]h ]h"]h$]h&]uh1hhjubh for any node}(h for any nodehjhhhNhNubeh}(h]h ]h"]h$]h&]uh1hhjhMhjubah}(h]h ]h"]h$]h&]uh1jBhjubeh}(h]h ]h"]h$]h&]uh1j"hjhMhjubeh}(h]h ]h"]h$]h&]uh1jhjubh)}(h**Description**h]j)}(hjQh]h Description}(hhhjShhhNhNubah}(h]h ]h"]h$]h&]uh1jhjOubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubh)}(hPublic function, provides additional debug information (including caller info), if enabled. This function zeroes the allocated memory.h]hPublic function, provides additional debug information (including caller info), if enabled. This function zeroes the allocated memory.}(hjihjghhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubh)}(h **Return**h]j)}(hjxh]hReturn}(hhhjzhhhNhNubah}(h]h ]h"]h$]h&]uh1jhjvubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubh)}(hFVirtual address of allocated memory block on success, NULL on failure.h]hFVirtual address of allocated memory block on success, NULL on failure.}(hjhjhhhNhNubah}(h]h ]h"]h$]h&]uh1hhS/var/lib/git/docbuild/linux/Documentation/core-api/boot-time-mm:40: ./mm/memblock.chMhjubeh}(h]h ] kernelindentah"]h$]h&]uh1jhjChhhNhNubjc)}(hhh]h}(h]h ]h"]h$]h&]entries](jomemblock_free_late (C function)c.memblock_free_latehNtauh1jbhjChhhNhNubjt)}(hhh](jy)}(h