linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Mike Rapoport <rppt@linux.vnet.ibm.com>
To: Jonathan Corbet <corbet@lwn.net>
Cc: Randy Dunlap <rdunlap@infradead.org>,
	linux-doc <linux-doc@vger.kernel.org>,
	linux-mm <linux-mm@kvack.org>,
	lkml <linux-kernel@vger.kernel.org>,
	Mike Rapoport <rppt@linux.vnet.ibm.com>
Subject: [PATCH v2 05/11] docs/mm: bootmem: add overview documentation
Date: Sat, 30 Jun 2018 17:55:00 +0300	[thread overview]
Message-ID: <1530370506-21751-6-git-send-email-rppt@linux.vnet.ibm.com> (raw)
In-Reply-To: <1530370506-21751-1-git-send-email-rppt@linux.vnet.ibm.com>

Signed-off-by: Mike Rapoport <rppt@linux.vnet.ibm.com>
---
 mm/bootmem.c | 47 +++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 47 insertions(+)

diff --git a/mm/bootmem.c b/mm/bootmem.c
index 76fc17e..97db0e8 100644
--- a/mm/bootmem.c
+++ b/mm/bootmem.c
@@ -21,6 +21,53 @@
 
 #include "internal.h"
 
+/**
+ * DOC: bootmem overview
+ *
+ * Bootmem is a boot-time physical memory allocator and configurator.
+ *
+ * It is used early in the boot process before the page allocator is
+ * set up.
+ *
+ * Bootmem is based on the most basic of allocators, a First Fit
+ * allocator which uses a bitmap to represent memory. If a bit is 1,
+ * the page is allocated and 0 if unallocated. To satisfy allocations
+ * of sizes smaller than a page, the allocator records the Page Frame
+ * Number (PFN) of the last allocation and the offset the allocation
+ * ended at. Subsequent small allocations are merged together and
+ * stored on the same page.
+ *
+ * The information used by the bootmem allocator is represented by
+ * :c:type:`struct bootmem_data`. An array to hold up to %MAX_NUMNODES
+ * such structures is statically allocated and then it is discarded
+ * when the system initialization completes. Each entry in this array
+ * corresponds to a node with memory. For UMA systems only entry 0 is
+ * used.
+ *
+ * The bootmem allocator is initialized during early architecture
+ * specific setup. Each architecture is required to supply a
+ * :c:func:`setup_arch` function which, among other tasks, is
+ * responsible for acquiring the necessary parameters to initialise
+ * the boot memory allocator. These parameters define limits of usable
+ * physical memory:
+ *
+ * * @min_low_pfn - the lowest PFN that is available in the system
+ * * @max_low_pfn - the highest PFN that may be addressed by low
+ *   memory (%ZONE_NORMAL)
+ * * @max_pfn - the last PFN available to the system.
+ *
+ * After those limits are determined, the :c:func:`init_bootmem` or
+ * :c:func:`init_bootmem_node` function should be called to initialize
+ * the bootmem allocator. The UMA case should use the `init_bootmem`
+ * function. It will initialize ``contig_page_data`` structure that
+ * represents the only memory node in the system. In the NUMA case the
+ * `init_bootmem_node` function should be called to initialize the
+ * bootmem allocator for each node.
+ *
+ * Once the allocator is set up, it is possible to use either single
+ * node or NUMA variant of the allocation APIs.
+ */
+
 #ifndef CONFIG_NEED_MULTIPLE_NODES
 struct pglist_data __refdata contig_page_data = {
 	.bdata = &bootmem_node_data[0]
-- 
2.7.4


  parent reply	other threads:[~2018-06-30 14:57 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-06-30 14:54 [PATCH v2 00/11] docs/mm: add boot time memory management docs Mike Rapoport
2018-06-30 14:54 ` [PATCH v2 01/11] mm/bootmem: drop duplicated kernel-doc comments Mike Rapoport
2018-06-30 14:54 ` [PATCH v2 02/11] docs/mm: nobootmem: fixup " Mike Rapoport
2018-06-30 14:54 ` [PATCH v2 03/11] docs/mm: bootmem: fix kernel-doc warnings Mike Rapoport
2018-06-30 14:54 ` [PATCH v2 04/11] docs/mm: bootmem: add kernel-doc description of 'struct bootmem_data' Mike Rapoport
2018-06-30 14:55 ` Mike Rapoport [this message]
2018-06-30 14:55 ` [PATCH v2 06/11] mm/memblock: add a name for memblock flags enumeration Mike Rapoport
2018-07-12  8:00   ` Michal Hocko
2018-06-30 14:55 ` [PATCH v2 07/11] docs/mm: memblock: update kernel-doc comments Mike Rapoport
2018-06-30 14:55 ` [PATCH v2 08/11] docs/mm: memblock: add kernel-doc comments for memblock_add[_node] Mike Rapoport
2018-06-30 14:55 ` [PATCH v2 09/11] docs/mm: memblock: add kernel-doc description for memblock types Mike Rapoport
2018-06-30 14:55 ` [PATCH v2 10/11] docs/mm: memblock: add overview documentation Mike Rapoport
2018-06-30 14:55 ` [PATCH v2 11/11] docs/mm: add description of boot time memory management Mike Rapoport
2018-07-03 12:23   ` Michal Hocko
2018-07-12  7:26     ` Mike Rapoport
2018-07-01 15:26 ` [PATCH v2 00/11] docs/mm: add boot time memory management docs Randy Dunlap
2018-07-02 17:32 ` Jonathan Corbet
2018-07-18 11:47   ` Mike Rapoport
2018-07-18 12:02     ` Jonathan Corbet
2018-07-18 17:00       ` Mike Rapoport
2018-07-26 21:45         ` Jonathan Corbet
2018-08-02 18:36           ` Jonathan Corbet

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1530370506-21751-6-git-send-email-rppt@linux.vnet.ibm.com \
    --to=rppt@linux.vnet.ibm.com \
    --cc=corbet@lwn.net \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=rdunlap@infradead.org \
    --subject='Re: [PATCH v2 05/11] docs/mm: bootmem: add overview documentation' \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).