All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chao Fan <fanc.fnst@cn.fujitsu.com>
To: Masayoshi Mizuma <msys.mizuma@gmail.com>
Cc: linux-kernel@vger.kernel.org, x86@kernel.org,
	linux-efi@vger.kernel.org, linux-acpi@vger.kernel.org,
	bp@alien8.de, tglx@linutronix.de, mingo@redhat.com,
	hpa@zytor.com, keescook@chromium.org, bhe@redhat.com,
	indou.takao@jp.fujitsu.com, caoj.fnst@cn.fujitsu.com
Subject: Re: [PATCH v11 3/5] x86/boot: Add get_acpi_rsdp() to parse RSDP in cmdlien from kexec
Date: Tue, 13 Nov 2018 10:12:18 +0800	[thread overview]
Message-ID: <20181113021218.GD7453@localhost.localdomain> (raw)
In-Reply-To: <20181112174343.mvjri2okwboew2nw@gabell>

On Mon, Nov 12, 2018 at 12:43:44PM -0500, Masayoshi Mizuma wrote:
>Hi Chao,
>
>On Mon, Nov 12, 2018 at 05:46:43PM +0800, Chao Fan wrote:
>> Imitate setup_acpi_rsdp() for the early_param of 'acpi_rsdp'.
>> KEXEC writes the RSDP pointer to cmdline for EFI booting.
>> So if 'acpi_rsdp' found in cmdline, use it directely.
>> 
>
>> Since function kstrtoull() is needed, include it in
>> arch/x86/boot/string.h. To solve the definition conflict
>> problem, set BOOT_STRING tag to expose only kstrtoull() and
>> functions used by it. Other functions in lib/kstrtox.c will
>> be covered.
>
>How about the following get_acpi_rsdp()...? It doesn't use kstrtoull().
>
>static void get_acpi_rsdp(acpi_physical_address *rsdp_addr)
>{
>#ifdef CONFIG_KEXEC
>        unsigned long addr;
>        char val[32];
>
>        if (cmdline_find_option("acpi_rsdp", val, sizeof(val)) > 0) {
>                char *e;
>
>                if (!strncmp(val, "0x", 2)) {
>                        addr = simple_strtoull(val + 2, &e, 16);
>                        if ((addr == 0) || ((val + 2) == e))
>                                return;
>                        *rsdp_addr = (acpi_physical_address)addr;
>                }
>        }
>#endif
>}

Thanks for the suggestion.
I used this function. In the old version, Boris said simple_strtoull()
is the old function and told me use the new kstrtoull().

Thanks,
Chao Fan

>
>Thanks,
>Masa
>
>> 
>> Signed-off-by: Chao Fan <fanc.fnst@cn.fujitsu.com>
>> ---
>>  arch/x86/boot/compressed/acpitb.c | 26 ++++++++++++++++++++++++++
>>  arch/x86/boot/string.h            |  4 ++++
>>  lib/kstrtox.c                     |  4 ++++
>>  3 files changed, 34 insertions(+)
>> 
>> diff --git a/arch/x86/boot/compressed/acpitb.c b/arch/x86/boot/compressed/acpitb.c
>> index 50fa65cf824d..5cfb4efa5a19 100644
>> --- a/arch/x86/boot/compressed/acpitb.c
>> +++ b/arch/x86/boot/compressed/acpitb.c
>> @@ -8,6 +8,12 @@
>>  #include <linux/numa.h>
>>  #include <linux/acpi.h>
>>  
>> +#define STATIC
>> +#include <linux/decompress/mm.h>
>> +
>> +#define BOOT_STRING
>> +#include "../string.h"
>> +
>>  /* Search EFI table for RSDP table. */
>>  static void efi_get_rsdp_addr(acpi_physical_address *rsdp_addr)
>>  {
>> @@ -200,3 +206,23 @@ static void bios_get_rsdp_addr(acpi_physical_address *rsdp_addr)
>>  		*rsdp_addr = (acpi_physical_address)address;
>>  	}
>>  }
>> +
>> +static void get_acpi_rsdp(acpi_physical_address *rsdp_addr)
>> +{
>> +#ifdef CONFIG_KEXEC
>> +	unsigned long long res;
>> +	int len = 0;
>> +	char *val;
>> +
>> +	val = malloc(19);
>> +	len = cmdline_find_option("acpi_rsdp", val, 19);
>> +
>> +	if (len == -1)
>> +		return;
>> +
>> +	if (len > 0) {
>> +		val[len] = 0;
>> +		*rsdp_addr = (acpi_physical_address)kstrtoull(val, 16, &res);
>> +	}
>> +#endif
>> +}
>> diff --git a/arch/x86/boot/string.h b/arch/x86/boot/string.h
>> index 3d78e27077f4..0ff3edb888e4 100644
>> --- a/arch/x86/boot/string.h
>> +++ b/arch/x86/boot/string.h
>> @@ -30,3 +30,7 @@ extern unsigned long long simple_strtoull(const char *cp, char **endp,
>>  					  unsigned int base);
>>  
>>  #endif /* BOOT_STRING_H */
>> +
>> +#ifdef BOOT_STRING
>> +#include "../../../lib/kstrtox.c"
>> +#endif
>> diff --git a/lib/kstrtox.c b/lib/kstrtox.c
>> index 1006bf70bf74..3804db9eed56 100644
>> --- a/lib/kstrtox.c
>> +++ b/lib/kstrtox.c
>> @@ -126,6 +126,8 @@ int kstrtoull(const char *s, unsigned int base, unsigned long long *res)
>>  }
>>  EXPORT_SYMBOL(kstrtoull);
>>  
>> +#ifndef BOOT_STRING
>> +
>>  /**
>>   * kstrtoll - convert a string to a long long
>>   * @s: The start of the string. The string must be null-terminated, and may also
>> @@ -408,3 +410,5 @@ kstrto_from_user(kstrtou16_from_user,	kstrtou16,	u16);
>>  kstrto_from_user(kstrtos16_from_user,	kstrtos16,	s16);
>>  kstrto_from_user(kstrtou8_from_user,	kstrtou8,	u8);
>>  kstrto_from_user(kstrtos8_from_user,	kstrtos8,	s8);
>> +
>> +#endif
>> -- 
>> 2.19.1
>> 
>> 
>> 
>
>

WARNING: multiple messages have this Message-ID (diff)
From: Chao Fan <fanc.fnst@cn.fujitsu.com>
To: Masayoshi Mizuma <msys.mizuma@gmail.com>
Cc: <linux-kernel@vger.kernel.org>, <x86@kernel.org>,
	<linux-efi@vger.kernel.org>, <linux-acpi@vger.kernel.org>,
	<bp@alien8.de>, <tglx@linutronix.de>, <mingo@redhat.com>,
	<hpa@zytor.com>, <keescook@chromium.org>, <bhe@redhat.com>,
	<indou.takao@jp.fujitsu.com>, <caoj.fnst@cn.fujitsu.com>
Subject: Re: [PATCH v11 3/5] x86/boot: Add get_acpi_rsdp() to parse RSDP in cmdlien from kexec
Date: Tue, 13 Nov 2018 10:12:18 +0800	[thread overview]
Message-ID: <20181113021218.GD7453@localhost.localdomain> (raw)
In-Reply-To: <20181112174343.mvjri2okwboew2nw@gabell>

On Mon, Nov 12, 2018 at 12:43:44PM -0500, Masayoshi Mizuma wrote:
>Hi Chao,
>
>On Mon, Nov 12, 2018 at 05:46:43PM +0800, Chao Fan wrote:
>> Imitate setup_acpi_rsdp() for the early_param of 'acpi_rsdp'.
>> KEXEC writes the RSDP pointer to cmdline for EFI booting.
>> So if 'acpi_rsdp' found in cmdline, use it directely.
>> 
>
>> Since function kstrtoull() is needed, include it in
>> arch/x86/boot/string.h. To solve the definition conflict
>> problem, set BOOT_STRING tag to expose only kstrtoull() and
>> functions used by it. Other functions in lib/kstrtox.c will
>> be covered.
>
>How about the following get_acpi_rsdp()...? It doesn't use kstrtoull().
>
>static void get_acpi_rsdp(acpi_physical_address *rsdp_addr)
>{
>#ifdef CONFIG_KEXEC
>        unsigned long addr;
>        char val[32];
>
>        if (cmdline_find_option("acpi_rsdp", val, sizeof(val)) > 0) {
>                char *e;
>
>                if (!strncmp(val, "0x", 2)) {
>                        addr = simple_strtoull(val + 2, &e, 16);
>                        if ((addr == 0) || ((val + 2) == e))
>                                return;
>                        *rsdp_addr = (acpi_physical_address)addr;
>                }
>        }
>#endif
>}

Thanks for the suggestion.
I used this function. In the old version, Boris said simple_strtoull()
is the old function and told me use the new kstrtoull().

Thanks,
Chao Fan

>
>Thanks,
>Masa
>
>> 
>> Signed-off-by: Chao Fan <fanc.fnst@cn.fujitsu.com>
>> ---
>>  arch/x86/boot/compressed/acpitb.c | 26 ++++++++++++++++++++++++++
>>  arch/x86/boot/string.h            |  4 ++++
>>  lib/kstrtox.c                     |  4 ++++
>>  3 files changed, 34 insertions(+)
>> 
>> diff --git a/arch/x86/boot/compressed/acpitb.c b/arch/x86/boot/compressed/acpitb.c
>> index 50fa65cf824d..5cfb4efa5a19 100644
>> --- a/arch/x86/boot/compressed/acpitb.c
>> +++ b/arch/x86/boot/compressed/acpitb.c
>> @@ -8,6 +8,12 @@
>>  #include <linux/numa.h>
>>  #include <linux/acpi.h>
>>  
>> +#define STATIC
>> +#include <linux/decompress/mm.h>
>> +
>> +#define BOOT_STRING
>> +#include "../string.h"
>> +
>>  /* Search EFI table for RSDP table. */
>>  static void efi_get_rsdp_addr(acpi_physical_address *rsdp_addr)
>>  {
>> @@ -200,3 +206,23 @@ static void bios_get_rsdp_addr(acpi_physical_address *rsdp_addr)
>>  		*rsdp_addr = (acpi_physical_address)address;
>>  	}
>>  }
>> +
>> +static void get_acpi_rsdp(acpi_physical_address *rsdp_addr)
>> +{
>> +#ifdef CONFIG_KEXEC
>> +	unsigned long long res;
>> +	int len = 0;
>> +	char *val;
>> +
>> +	val = malloc(19);
>> +	len = cmdline_find_option("acpi_rsdp", val, 19);
>> +
>> +	if (len == -1)
>> +		return;
>> +
>> +	if (len > 0) {
>> +		val[len] = 0;
>> +		*rsdp_addr = (acpi_physical_address)kstrtoull(val, 16, &res);
>> +	}
>> +#endif
>> +}
>> diff --git a/arch/x86/boot/string.h b/arch/x86/boot/string.h
>> index 3d78e27077f4..0ff3edb888e4 100644
>> --- a/arch/x86/boot/string.h
>> +++ b/arch/x86/boot/string.h
>> @@ -30,3 +30,7 @@ extern unsigned long long simple_strtoull(const char *cp, char **endp,
>>  					  unsigned int base);
>>  
>>  #endif /* BOOT_STRING_H */
>> +
>> +#ifdef BOOT_STRING
>> +#include "../../../lib/kstrtox.c"
>> +#endif
>> diff --git a/lib/kstrtox.c b/lib/kstrtox.c
>> index 1006bf70bf74..3804db9eed56 100644
>> --- a/lib/kstrtox.c
>> +++ b/lib/kstrtox.c
>> @@ -126,6 +126,8 @@ int kstrtoull(const char *s, unsigned int base, unsigned long long *res)
>>  }
>>  EXPORT_SYMBOL(kstrtoull);
>>  
>> +#ifndef BOOT_STRING
>> +
>>  /**
>>   * kstrtoll - convert a string to a long long
>>   * @s: The start of the string. The string must be null-terminated, and may also
>> @@ -408,3 +410,5 @@ kstrto_from_user(kstrtou16_from_user,	kstrtou16,	u16);
>>  kstrto_from_user(kstrtos16_from_user,	kstrtos16,	s16);
>>  kstrto_from_user(kstrtou8_from_user,	kstrtou8,	u8);
>>  kstrto_from_user(kstrtos8_from_user,	kstrtos8,	s8);
>> +
>> +#endif
>> -- 
>> 2.19.1
>> 
>> 
>> 
>
>



  reply	other threads:[~2018-11-13  2:12 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-12  9:46 [PATCH v11 0/5] x86/boot/KASLR: Parse ACPI table and limit kaslr in immovable memory Chao Fan
2018-11-12  9:46 ` Chao Fan
2018-11-12  9:46 ` [PATCH v11 1/5] x86/boot: Add efi_get_rsdp_addr() to dig out RSDP from EFI table Chao Fan
2018-11-12  9:46   ` Chao Fan
2018-11-12 14:54   ` Borislav Petkov
2018-11-13  1:57     ` Chao Fan
2018-11-13  1:57       ` Chao Fan
2018-11-12  9:46 ` [PATCH v11 2/5] x86/boot: Add bios_get_rsdp_addr() to search RSDP in memory Chao Fan
2018-11-12  9:46   ` Chao Fan
2018-11-12 15:27   ` Borislav Petkov
2018-11-13  2:10     ` Chao Fan
2018-11-13  2:10       ` Chao Fan
2018-11-13 10:09       ` Borislav Petkov
2018-11-12  9:46 ` [PATCH v11 3/5] x86/boot: Add get_acpi_rsdp() to parse RSDP in cmdlien from kexec Chao Fan
2018-11-12  9:46   ` Chao Fan
2018-11-12  9:50   ` Chao Fan
2018-11-12  9:50     ` Chao Fan
2018-11-12 17:43   ` Masayoshi Mizuma
2018-11-13  2:12     ` Chao Fan [this message]
2018-11-13  2:12       ` Chao Fan
2018-11-13 16:11       ` Masayoshi Mizuma
2018-11-13 17:22         ` Borislav Petkov
2018-11-13 17:54         ` Borislav Petkov
2018-11-13 20:06           ` Masayoshi Mizuma
2018-11-13 21:51             ` Borislav Petkov
2018-11-14  6:12               ` Chao Fan
2018-11-14  6:12                 ` Chao Fan
2018-11-14 18:30                 ` Borislav Petkov
2018-11-19  1:16                   ` Chao Fan
2018-11-19  1:16                     ` Chao Fan
2018-11-13 17:51   ` Borislav Petkov
2018-11-14  1:54     ` Chao Fan
2018-11-14  1:54       ` Chao Fan
2018-11-14  1:59       ` Chao Fan
2018-11-14  1:59         ` Chao Fan
2018-11-14 18:33       ` Borislav Petkov
2018-11-12  9:46 ` [PATCH v11 4/5] x86/boot: Dig out SRAT table from RSDP and find immovable memory Chao Fan
2018-11-12  9:46   ` Chao Fan
2018-11-12 20:52   ` Masayoshi Mizuma
2018-11-13  2:43     ` Chao Fan
2018-11-13  2:43       ` Chao Fan
2018-11-12 21:51   ` Masayoshi Mizuma
2018-11-13  2:45     ` Chao Fan
2018-11-13  2:45       ` Chao Fan
2018-11-16 11:16   ` Borislav Petkov
2018-11-19  2:08     ` Chao Fan
2018-11-19  2:08       ` Chao Fan
2018-11-20  6:18     ` Chao Fan
2018-11-20  6:18       ` Chao Fan
2018-11-12  9:46 ` [PATCH v11 5/5] x86/boot/KASLR: Walk srat tables to filter " Chao Fan
2018-11-12  9:46   ` Chao Fan
2018-11-16 13:50   ` Borislav Petkov
2018-11-19  1:31     ` Chao Fan
2018-11-19  1:31       ` 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=20181113021218.GD7453@localhost.localdomain \
    --to=fanc.fnst@cn.fujitsu.com \
    --cc=bhe@redhat.com \
    --cc=bp@alien8.de \
    --cc=caoj.fnst@cn.fujitsu.com \
    --cc=hpa@zytor.com \
    --cc=indou.takao@jp.fujitsu.com \
    --cc=keescook@chromium.org \
    --cc=linux-acpi@vger.kernel.org \
    --cc=linux-efi@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mingo@redhat.com \
    --cc=msys.mizuma@gmail.com \
    --cc=tglx@linutronix.de \
    --cc=x86@kernel.org \
    /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.