All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chao Fan <fanc.fnst@cn.fujitsu.com>
To: Dou Liyang <douly.fnst@cn.fujitsu.com>
Cc: <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>,
	<indou.takao@jp.fujitsu.com>, <caoj.fnst@cn.fujitsu.com>
Subject: Re: [PATCH v4 3/4] x86/boot/KASLR: Walk srat tables to filter immovable memory
Date: Thu, 2 Aug 2018 11:54:14 +0800	[thread overview]
Message-ID: <20180802035413.GC6723@localhost.localdomain> (raw)
In-Reply-To: <18d27595-43d8-d2a0-bfdf-bd731b77d1b9@cn.fujitsu.com>

On Thu, Aug 02, 2018 at 11:47:13AM +0800, Dou Liyang wrote:
>Hi Fan,
>
>At 07/23/2018 05:29 PM, Chao Fan wrote:
>> If 'CONFIG_MEMORY_HOTREMOVE' specified, walk the acpi srat memory
>> tables, store the immovable memory regions, so that kaslr can get
>> the information abouth where can be selected or not.
>> If 'CONFIG_MEMORY_HOTREMOVE' not specified, go on the old code.
>> 
>> Signed-off-by: Chao Fan <fanc.fnst@cn.fujitsu.com>
>> ---
>>   arch/x86/boot/compressed/kaslr.c | 55 ++++++++++++++++++++++++++++++++
>>   1 file changed, 55 insertions(+)
>> 
>> diff --git a/arch/x86/boot/compressed/kaslr.c b/arch/x86/boot/compressed/kaslr.c
>> index 531c9876f573..4705682caf1f 100644
>> --- a/arch/x86/boot/compressed/kaslr.c
>> +++ b/arch/x86/boot/compressed/kaslr.c
>> @@ -31,6 +31,7 @@
>>   #include "misc.h"
>>   #include "error.h"
>> +#include "acpitb.h"
>>   #include "../string.h"
>>   #include <generated/compile.h>
>> @@ -104,6 +105,14 @@ static bool memmap_too_large;
>>   /* Store memory limit specified by "mem=nn[KMG]" or "memmap=nn[KMG]" */
>>   unsigned long long mem_limit = ULLONG_MAX;
>> +#ifdef CONFIG_MEMORY_HOTREMOVE
>> +/* Store the immovable memory regions */
>> +struct mem_vector immovable_mem[];
>> +
>> +/* Store the amount of immovable memory regions */
>> +static int num_immovable_mem;
>> +#endif
>> +
>>   enum mem_avoid_index {
>>   	MEM_AVOID_ZO_RANGE = 0,
>> @@ -298,6 +307,47 @@ static int handle_mem_options(void)
>>   	return 0;
>>   }
>> +#ifdef CONFIG_MEMORY_HOTREMOVE
>> +/*
>> + * According to ACPI table, filter the immvoable memory regions
>> + * and store them in immovable_mem[].
>> + */
>> +static void handle_immovable_mem(void)
>> +{
>> +	struct acpi_table_header *table_header;
>> +	struct acpi_subtable_header *table;
>> +	struct acpi_srat_mem_affinity *ma;
>> +	unsigned long table_size;
>> +	unsigned long table_end;
>> +	int i = 0;
>> +
>> +	table_header = get_acpi_srat_table();
>> +
>> +	if (!table_header)
>> +		return;
>> +
>> +	table_end = (unsigned long)table_header + table_header->length;
>> +
>> +	table = (struct acpi_subtable_header *)
>> +		((unsigned long)table_header + sizeof(struct acpi_table_srat));
>> +
>> +	table_size = sizeof(struct acpi_subtable_header);
>
>table_size isn't used, can be remove.
>

Thank you very much, will update in next version.

Thanks,
Chao Fan

>> +	while (((unsigned long)table) + table->length < table_end) {
>> +		if (table->type == 1) {
>> +			ma = (struct acpi_srat_mem_affinity *)table;
>> +			if (!(ma->flags & ACPI_SRAT_MEM_HOT_PLUGGABLE)) {
>> +				immovable_mem[i].start = ma->base_address;
>> +				immovable_mem[i].size = ma->length;
>> +				i++;
>
>need a check(i < MAX_NUMNODES*2) before doing that in case of
>__IndexOutOfBoundsException__ even if it may be impossible in ACPI.
>
>Thanks,
>	dou
>> +			}
>> +		}
>> +		table = (struct acpi_subtable_header *)
>> +			((unsigned long)table + table->length);
>> +	}
>> +	num_immovable_mem = i;
>> +}
>> +#endif
>> +
>>   /*
>>    * In theory, KASLR can put the kernel anywhere in the range of [16M, 64T).
>>    * The mem_avoid array is used to store the ranges that need to be avoided
>> @@ -421,6 +471,11 @@ static void mem_avoid_init(unsigned long input, unsigned long input_size,
>>   	/* Mark the memmap regions we need to avoid */
>>   	handle_mem_options();
>> +#ifdef CONFIG_MEMORY_HOTREMOVE
>> +	/* Mark the immovable regions we need to choose */
>> +	handle_immovable_mem();
>> +#endif
>> +
>>   #ifdef CONFIG_X86_VERBOSE_BOOTUP
>>   	/* Make sure video RAM can be used. */
>>   	add_identity_map(0, PMD_SIZE);
>> 



  reply	other threads:[~2018-08-02  3:56 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-07-23  9:29 [PATCH v4 0/4] x86/boot/KASLR: Parse ACPI table and limit kaslr in immovable memory Chao Fan
2018-07-23  9:29 ` [PATCH v4 1/4] x86/boot: Add acpitb.h to help parse acpi tables Chao Fan
2018-07-24  6:02   ` Baoquan He
2018-07-24  6:13     ` Chao Fan
2018-07-24  8:36     ` Chao Fan
2018-07-25  7:10       ` Baoquan He
2018-07-23  9:29 ` [PATCH v4 2/4] x86/boot: Add acpitb.c to " Chao Fan
2018-08-03  2:00   ` Dou Liyang
2018-08-03  2:08     ` Chao Fan
2018-07-23  9:29 ` [PATCH v4 3/4] x86/boot/KASLR: Walk srat tables to filter immovable memory Chao Fan
2018-08-02  3:47   ` Dou Liyang
2018-08-02  3:54     ` Chao Fan [this message]
2018-08-02  7:05       ` Thomas Gleixner
2018-08-02  7:20         ` Dou Liyang
2018-07-23  9:29 ` [PATCH v4 4/4] x86/boot/KASLR: Limit kaslr to choosing the " Chao Fan
2018-08-02  5:46   ` Dou Liyang
2018-08-02  6:00     ` Chao Fan
2018-08-02  6:05       ` Dou Liyang
2018-08-02  1:17 ` [PATCH v4 0/4] x86/boot/KASLR: Parse ACPI table and limit kaslr in " 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=20180802035413.GC6723@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.