All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chao Fan <fanc.fnst@cn.fujitsu.com>
To: <linux-kernel@vger.kernel.org>, <x86@kernel.org>, <hpa@zytor.com>,
	<tglx@linutronix.de>, <mingo@redhat.com>, <bhe@redhat.com>,
	<keescook@chromium.org>, <yasu.isimatu@gmail.com>
Cc: <indou.takao@jp.fujitsu.com>, <caoj.fnst@cn.fujitsu.com>,
	<douly.fnst@cn.fujitsu.com>
Subject: Re: [PATCH v4 2/4] kaslr: calculate the memory region in immovable node
Date: Tue, 12 Dec 2017 20:18:11 +0800	[thread overview]
Message-ID: <20171212121811.GC15970@localhost.localdomain> (raw)
In-Reply-To: <20171212120705.5591-3-fanc.fnst@cn.fujitsu.com>

On Tue, Dec 12, 2017 at 08:07:03PM +0800, Chao Fan wrote:
>kaslr: calculate the memory region in immovable node
>
>If there is no immovable memory region specified, use region directely.
>There are several conditons:
>1. CONFIG_MEMORY_HOTPLUG is not specified to y.
>2. immovable_mem= is not specified.
>
>Otherwise, calculate the intersecting between memmap entry and
>immovable memory.
>
>Rename process_mem_region to slots_count to match
>slots_fetch_random, and rename new function sa process_mem_region.
>
>Signed-off-by: Chao Fan <fanc.fnst@cn.fujitsu.com>
>---
> arch/x86/boot/compressed/kaslr.c | 65 +++++++++++++++++++++++++++++++++-------
> 1 file changed, 54 insertions(+), 11 deletions(-)
>
>diff --git a/arch/x86/boot/compressed/kaslr.c b/arch/x86/boot/compressed/kaslr.c
>index 40f299d8cd34..fe49d6e79c50 100644
>--- a/arch/x86/boot/compressed/kaslr.c
>+++ b/arch/x86/boot/compressed/kaslr.c
>@@ -579,9 +579,9 @@ static unsigned long slots_fetch_random(void)
> 	return 0;
> }
> 
>-static void process_mem_region(struct mem_vector *entry,
>-			       unsigned long minimum,
>-			       unsigned long image_size)
>+static void slots_count(struct mem_vector *entry,
>+			unsigned long minimum,
>+			unsigned long image_size)
> {
> 	struct mem_vector region, overlap;
> 	struct slot_area slot_area;
>@@ -658,6 +658,53 @@ static void process_mem_region(struct mem_vector *entry,
> 	}
> }
> 
>+static bool process_mem_region(struct mem_vector region,
>+			       unsigned long long minimum,
>+			       unsigned long long image_size)
>+{

Hi Kees and Baoquan,

I follow Kees's suggestion, put num_immovable_region into #ifdef
CONFIG_MEMORY_HOTPLUG, since there won't be num_immovable_region if
not in #ifdef ..., so I changh the order of these two situations
of Baoquan's version.

Thanks,
Chao Fan

>+#ifdef CONFIG_MEMORY_HOTPLUG
>+	/*
>+	 * If immovable_mem= specified, walk all immovable regions, and
>+	 * filter the intersection to slots_count.
>+	 */
>+	if (num_immovable_region > 0) {
>+		for (int i = 0; i < num_immovable_region; i++) {
>+			struct mem_vector entry;
>+			unsigned long long start, end, entry_end, region_end;
>+
>+			start = immovable_mem[i].start;
>+			end = start + immovable_mem[i].size;
>+			region_end = region.start + region.size;
>+
>+			entry.start = clamp(region.start, start, end);
>+			entry_end = clamp(region_end, start, end);
>+
>+			if (entry.start < entry_end) {
>+				entry.size = entry_end - entry.start;
>+				slots_count(&entry, minimum, image_size);
>+			}
>+
>+			if (slot_area_index == MAX_SLOT_AREA) {
>+				debug_putstr("Aborted memmap scan (slot_areas full)!\n");
>+				return 1;
>+			}
>+		}
>+		return 0;
>+	}
>+#endif
>+
>+	/*
>+	 * If no immovable_mem stored, or CONFIG_MEMORY_HOTPLUG not specified,
>+	 * use region directly
>+	 */
>+	slots_count(&region, minimum, image_size);
>+	if (slot_area_index == MAX_SLOT_AREA) {
>+		debug_putstr("Aborted memmap scan (slot_areas full)!\n");
>+		return 1;
>+	}
>+	return 0;
>+}
>+
> #ifdef CONFIG_EFI
> /*
>  * Returns true if mirror region found (and must have been processed
>@@ -723,11 +770,9 @@ process_efi_entries(unsigned long minimum, unsigned long image_size)
> 
> 		region.start = md->phys_addr;
> 		region.size = md->num_pages << EFI_PAGE_SHIFT;
>-		process_mem_region(&region, minimum, image_size);
>-		if (slot_area_index == MAX_SLOT_AREA) {
>-			debug_putstr("Aborted EFI scan (slot_areas full)!\n");
>+
>+		if (process_mem_region(region, minimum, image_size))
> 			break;
>-		}
> 	}
> 	return true;
> }
>@@ -754,11 +799,9 @@ static void process_e820_entries(unsigned long minimum,
> 			continue;
> 		region.start = entry->addr;
> 		region.size = entry->size;
>-		process_mem_region(&region, minimum, image_size);
>-		if (slot_area_index == MAX_SLOT_AREA) {
>-			debug_putstr("Aborted e820 scan (slot_areas full)!\n");
>+
>+		if (process_mem_region(region, minimum, image_size))
> 			break;
>-		}
> 	}
> }
> 
>-- 
>2.14.3
>

  reply	other threads:[~2017-12-12 12:18 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-12-12 12:07 [PATCH v4 0/4] aslr: add parameter immovable_mem=nn[KMG]@ss[KMG] to make memory hotplug work well with kaslr Chao Fan
2017-12-12 12:07 ` [PATCH v4 1/4] kaslr: add immovable_mem=nn[KMG]@ss[KMG] to specify extracting memory Chao Fan
2017-12-12 12:12   ` Chao Fan
2017-12-12 12:25   ` Chao Fan
2017-12-12 12:07 ` [PATCH v4 2/4] kaslr: calculate the memory region in immovable node Chao Fan
2017-12-12 12:18   ` Chao Fan [this message]
2017-12-16 11:47   ` kbuild test robot
2017-12-18  3:40   ` [PATCH v4.1 " Chao Fan
2017-12-12 12:07 ` [PATCH v4 3/4] kaslr: disable memory mirror feature when movable_node Chao Fan
2017-12-12 12:07 ` [PATCH v4 4/4] document: change the document for immovable_mem Chao Fan

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=20171212121811.GC15970@localhost.localdomain \
    --to=fanc.fnst@cn.fujitsu.com \
    --cc=bhe@redhat.com \
    --cc=caoj.fnst@cn.fujitsu.com \
    --cc=douly.fnst@cn.fujitsu.com \
    --cc=hpa@zytor.com \
    --cc=indou.takao@jp.fujitsu.com \
    --cc=keescook@chromium.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=tglx@linutronix.de \
    --cc=x86@kernel.org \
    --cc=yasu.isimatu@gmail.com \
    /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
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.