mm/sparse.c: add note about only VMEMMAP supporting sub-section hotplug
authorBaoquan He <bhe@redhat.com>
Tue, 7 Apr 2020 03:07:09 +0000 (20:07 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 7 Apr 2020 17:43:40 +0000 (10:43 -0700)
And tell check_pfn_span() gating the porper alignment and size of hot
added memory region.

And also move the code comments from inside section_deactivate() to being
above it.  The code comments are reasonable for the whole function, and
the moving makes code cleaner.

Signed-off-by: Baoquan He <bhe@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Reviewed-by: David Hildenbrand <david@redhat.com>
Acked-by: Michal Hocko <mhocko@suse.com>
Cc: Dan Williams <dan.j.williams@intel.com>
Cc: Pankaj Gupta <pankaj.gupta.linux@gmail.com>
Cc: Wei Yang <richard.weiyang@gmail.com>
Link: http://lkml.kernel.org/r/20200312124414.439-5-bhe@redhat.com
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
mm/sparse.c

index 095ecf5..9d43fde 100644 (file)
@@ -750,6 +750,22 @@ static bool is_subsection_map_empty(struct mem_section *ms)
 }
 #endif
 
+/*
+ * To deactivate a memory region, there are 3 cases to handle across
+ * two configurations (SPARSEMEM_VMEMMAP={y,n}):
+ *
+ * 1. deactivation of a partial hot-added section (only possible in
+ *    the SPARSEMEM_VMEMMAP=y case).
+ *      a) section was present at memory init.
+ *      b) section was hot-added post memory init.
+ * 2. deactivation of a complete hot-added section.
+ * 3. deactivation of a complete section from memory init.
+ *
+ * For 1, when subsection_map does not empty we will not be freeing the
+ * usage map, but still need to free the vmemmap range.
+ *
+ * For 2 and 3, the SPARSEMEM_VMEMMAP={y,n} cases are unified
+ */
 static void section_deactivate(unsigned long pfn, unsigned long nr_pages,
                struct vmem_altmap *altmap)
 {
@@ -760,23 +776,7 @@ static void section_deactivate(unsigned long pfn, unsigned long nr_pages,
 
        if (clear_subsection_map(pfn, nr_pages))
                return;
-       /*
-        * There are 3 cases to handle across two configurations
-        * (SPARSEMEM_VMEMMAP={y,n}):
-        *
-        * 1/ deactivation of a partial hot-added section (only possible
-        * in the SPARSEMEM_VMEMMAP=y case).
-        *    a/ section was present at memory init
-        *    b/ section was hot-added post memory init
-        * 2/ deactivation of a complete hot-added section
-        * 3/ deactivation of a complete section from memory init
-        *
-        * For 1/, when subsection_map does not empty we will not be
-        * freeing the usage map, but still need to free the vmemmap
-        * range.
-        *
-        * For 2/ and 3/ the SPARSEMEM_VMEMMAP={y,n} cases are unified
-        */
+
        empty = is_subsection_map_empty(ms);
        if (empty) {
                unsigned long section_nr = pfn_to_section_nr(pfn);
@@ -890,6 +890,10 @@ static struct page * __meminit section_activate(int nid, unsigned long pfn,
  *
  * This is only intended for hotplug.
  *
+ * Note that only VMEMMAP supports sub-section aligned hotplug,
+ * the proper alignment and size are gated by check_pfn_span().
+ *
+ *
  * Return:
  * * 0         - On success.
  * * -EEXIST   - Section has been present.