lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20200220070420.GD4937@MiWiFi-R3L-srv>
Date:   Thu, 20 Feb 2020 15:04:20 +0800
From:   Baoquan He <bhe@...hat.com>
To:     Wei Yang <richardw.yang@...ux.intel.com>
Cc:     linux-kernel@...r.kernel.org, linux-mm@...ck.org,
        akpm@...ux-foundation.org, david@...hat.com, osalvador@...e.de,
        dan.j.williams@...el.com, mhocko@...e.com, rppt@...ux.ibm.com,
        robin.murphy@....com
Subject: Re: [PATCH v2 6/7] mm/sparse.c: move subsection_map related codes
 together

On 02/20/20 at 02:18pm, Wei Yang wrote:
> On Thu, Feb 20, 2020 at 12:33:15PM +0800, Baoquan He wrote:
> >No functional change.
> >
> 
> Those functions are introduced in your previous patches.
> 
> Is it possible to define them close to each other at the very beginning?

Thanks for reviewing.

Do you mean to discard this patch and keep it as they are in the patch 4/7?
If yes, it's fine to me to drop it as you suggested. To me, I prefer to put
all subsection map handling codes together.

> 
> >Signed-off-by: Baoquan He <bhe@...hat.com>
> >---
> > mm/sparse.c | 172 +++++++++++++++++++++++++---------------------------
> > 1 file changed, 84 insertions(+), 88 deletions(-)
> >
> >diff --git a/mm/sparse.c b/mm/sparse.c
> >index 14bff0b44e7c..053d6c2e5c1f 100644
> >--- a/mm/sparse.c
> >+++ b/mm/sparse.c
> >@@ -244,10 +244,94 @@ void __init subsection_map_init(unsigned long pfn, unsigned long nr_pages)
> > 		nr_pages -= pfns;
> > 	}
> > }
> >+
> >+/**
> >+ * clear_subsection_map - Clear subsection map of one memory region
> >+ *
> >+ * @pfn - start pfn of the memory range
> >+ * @nr_pages - number of pfns to add in the region
> >+ *
> >+ * This is only intended for hotplug, and clear the related subsection
> >+ * map inside one section.
> >+ *
> >+ * Return:
> >+ * * -EINVAL	- Section already deactived.
> >+ * * 0		- Subsection map is emptied.
> >+ * * 1		- Subsection map is not empty.
> >+ */
> >+static int clear_subsection_map(unsigned long pfn, unsigned long nr_pages)
> >+{
> >+	DECLARE_BITMAP(map, SUBSECTIONS_PER_SECTION) = { 0 };
> >+	DECLARE_BITMAP(tmp, SUBSECTIONS_PER_SECTION) = { 0 };
> >+	struct mem_section *ms = __pfn_to_section(pfn);
> >+	unsigned long *subsection_map = ms->usage
> >+		? &ms->usage->subsection_map[0] : NULL;
> >+
> >+	subsection_mask_set(map, pfn, nr_pages);
> >+	if (subsection_map)
> >+		bitmap_and(tmp, map, subsection_map, SUBSECTIONS_PER_SECTION);
> >+
> >+	if (WARN(!subsection_map || !bitmap_equal(tmp, map, SUBSECTIONS_PER_SECTION),
> >+				"section already deactivated (%#lx + %ld)\n",
> >+				pfn, nr_pages))
> >+		return -EINVAL;
> >+
> >+	bitmap_xor(subsection_map, map, subsection_map, SUBSECTIONS_PER_SECTION);
> >+
> >+	if (bitmap_empty(subsection_map, SUBSECTIONS_PER_SECTION))
> >+		return 0;
> >+
> >+	return 1;
> >+}
> >+
> >+/**
> >+ * fill_subsection_map - fill subsection map of a memory region
> >+ * @pfn - start pfn of the memory range
> >+ * @nr_pages - number of pfns to add in the region
> >+ *
> >+ * This fills the related subsection map inside one section, and only
> >+ * intended for hotplug.
> >+ *
> >+ * Return:
> >+ * * 0		- On success.
> >+ * * -EINVAL	- Invalid memory region.
> >+ * * -EEXIST	- Subsection map has been set.
> >+ */
> >+static int fill_subsection_map(unsigned long pfn, unsigned long nr_pages)
> >+{
> >+	struct mem_section *ms = __pfn_to_section(pfn);
> >+	DECLARE_BITMAP(map, SUBSECTIONS_PER_SECTION) = { 0 };
> >+	unsigned long *subsection_map;
> >+	int rc = 0;
> >+
> >+	subsection_mask_set(map, pfn, nr_pages);
> >+
> >+	subsection_map = &ms->usage->subsection_map[0];
> >+
> >+	if (bitmap_empty(map, SUBSECTIONS_PER_SECTION))
> >+		rc = -EINVAL;
> >+	else if (bitmap_intersects(map, subsection_map, SUBSECTIONS_PER_SECTION))
> >+		rc = -EEXIST;
> >+	else
> >+		bitmap_or(subsection_map, map, subsection_map,
> >+				SUBSECTIONS_PER_SECTION);
> >+
> >+	return rc;
> >+}
> > #else
> > void __init subsection_map_init(unsigned long pfn, unsigned long nr_pages)
> > {
> > }
> >+
> >+static int clear_subsection_map(unsigned long pfn, unsigned long nr_pages)
> >+{
> >+	return 0;
> >+}
> >+
> >+static int fill_subsection_map(unsigned long pfn, unsigned long nr_pages)
> >+{
> >+	return 0;
> >+}
> > #endif
> > 
> > /* Record a memory area against a node. */
> >@@ -732,52 +816,6 @@ static void free_map_bootmem(struct page *memmap)
> > }
> > #endif /* CONFIG_SPARSEMEM_VMEMMAP */
> > 
> >-#ifdef CONFIG_SPARSEMEM_VMEMMAP
> >-/**
> >- * clear_subsection_map - Clear subsection map of one memory region
> >- *
> >- * @pfn - start pfn of the memory range
> >- * @nr_pages - number of pfns to add in the region
> >- *
> >- * This is only intended for hotplug, and clear the related subsection
> >- * map inside one section.
> >- *
> >- * Return:
> >- * * -EINVAL	- Section already deactived.
> >- * * 0		- Subsection map is emptied.
> >- * * 1		- Subsection map is not empty.
> >- */
> >-static int clear_subsection_map(unsigned long pfn, unsigned long nr_pages)
> >-{
> >-	DECLARE_BITMAP(map, SUBSECTIONS_PER_SECTION) = { 0 };
> >-	DECLARE_BITMAP(tmp, SUBSECTIONS_PER_SECTION) = { 0 };
> >-	struct mem_section *ms = __pfn_to_section(pfn);
> >-	unsigned long *subsection_map = ms->usage
> >-		? &ms->usage->subsection_map[0] : NULL;
> >-
> >-	subsection_mask_set(map, pfn, nr_pages);
> >-	if (subsection_map)
> >-		bitmap_and(tmp, map, subsection_map, SUBSECTIONS_PER_SECTION);
> >-
> >-	if (WARN(!subsection_map || !bitmap_equal(tmp, map, SUBSECTIONS_PER_SECTION),
> >-				"section already deactivated (%#lx + %ld)\n",
> >-				pfn, nr_pages))
> >-		return -EINVAL;
> >-
> >-	bitmap_xor(subsection_map, map, subsection_map, SUBSECTIONS_PER_SECTION);
> >-
> >-	if (bitmap_empty(subsection_map, SUBSECTIONS_PER_SECTION))
> >-		return 0;
> >-
> >-	return 1;
> >-}
> >-#else
> >-static int clear_subsection_map(unsigned long pfn, unsigned long nr_pages)
> >-{
> >-	return 0;
> >-}
> >-#endif
> >-
> > /*
> >  * To deactivate a memory region, there are 3 cases to handle across
> >  * two configurations (SPARSEMEM_VMEMMAP={y,n}):
> >@@ -833,48 +871,6 @@ static void section_deactivate(unsigned long pfn, unsigned long nr_pages,
> > 		ms->section_mem_map = (unsigned long)NULL;
> > }
> > 
> >-#ifdef CONFIG_SPARSEMEM_VMEMMAP
> >-/**
> >- * fill_subsection_map - fill subsection map of a memory region
> >- * @pfn - start pfn of the memory range
> >- * @nr_pages - number of pfns to add in the region
> >- *
> >- * This fills the related subsection map inside one section, and only
> >- * intended for hotplug.
> >- *
> >- * Return:
> >- * * 0		- On success.
> >- * * -EINVAL	- Invalid memory region.
> >- * * -EEXIST	- Subsection map has been set.
> >- */
> >-static int fill_subsection_map(unsigned long pfn, unsigned long nr_pages)
> >-{
> >-	struct mem_section *ms = __pfn_to_section(pfn);
> >-	DECLARE_BITMAP(map, SUBSECTIONS_PER_SECTION) = { 0 };
> >-	unsigned long *subsection_map;
> >-	int rc = 0;
> >-
> >-	subsection_mask_set(map, pfn, nr_pages);
> >-
> >-	subsection_map = &ms->usage->subsection_map[0];
> >-
> >-	if (bitmap_empty(map, SUBSECTIONS_PER_SECTION))
> >-		rc = -EINVAL;
> >-	else if (bitmap_intersects(map, subsection_map, SUBSECTIONS_PER_SECTION))
> >-		rc = -EEXIST;
> >-	else
> >-		bitmap_or(subsection_map, map, subsection_map,
> >-				SUBSECTIONS_PER_SECTION);
> >-
> >-	return rc;
> >-}
> >-#else
> >-static int fill_subsection_map(unsigned long pfn, unsigned long nr_pages)
> >-{
> >-	return 0;
> >-}
> >-#endif
> >-
> > static struct page * __meminit section_activate(int nid, unsigned long pfn,
> > 		unsigned long nr_pages, struct vmem_altmap *altmap)
> > {
> >-- 
> >2.17.2
> 
> -- 
> Wei Yang
> Help you, Help me
> 

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ