From: Bernhard Walle <bwalle@suse.de>
To: Vivek Goyal <vgoyal@redhat.com>
Cc: Amul Shah <amul.shah@unisys.com>,
Andi Kleen <andi@firstfloor.org>,
Johannes Weiner <hannes@saeurebad.de>,
kexec@lists.infradead.org, linux-kernel@vger.kernel.org,
hpa@zytor.com, anderson@redhat.com, "Romer,
Benjamin M" <Benjamin.Romer@unisys.com>
Subject: Re: [patch 2/3] Add flags parameter to reserve_bootmem_generic()
Date: Mon, 9 Jun 2008 22:42:11 +0200 [thread overview]
Message-ID: <20080609224211.2ef0f74c@kopernikus.site> (raw)
In-Reply-To: <20080609202935.GI3542@redhat.com>
Hi Vivek,
* Vivek Goyal <vgoyal@redhat.com> [2008-06-09 16:29]:
>
> Can you please put some more explanation comment here to explain that
> why it is ok to return with success, despite the fact that we never
> reserved any memory.
Do you think that's ok?
When booting the kdump kernel, the MP tables (for example,
or other firmware-reserved memory) of the BIOS are beyond
end_pfn. (kexec-tools adds exactmap parameters to the kernel
so that the E820 map is no longer used.) Therefore, it's ok
to return "success" here. For normal boot, the MP tables
must be reserved normally.
Bernhard
------------------------------------------------------------------------------
From: Bernhard Walle <bwalle@suse.de>
Subject: Add 'flags' parameter to reserve_bootmem_generic()
This patch adds a 'flags' parameter to reserve_bootmem_generic() like it
already has been added in reserve_bootmem() with commit
72a7fe3967dbf86cb34e24fbf1d957fe24d2f246.
It also changes all users to use BOOTMEM_DEFAULT, which doesn't effectively
change the behaviour. Since the change is x86-specific, I don't think it's
necessary to add a new API for migration. There are only 4 users of that
function.
The change is necessary for the next patch, using reserve_bootmem_generic()
for crashkernel reservation.
Signed-off-by: Bernhard Walle <bwalle@suse.de>
---
arch/x86/kernel/e820_64.c | 3 ++-
arch/x86/kernel/efi_64.c | 3 ++-
arch/x86/kernel/mpparse.c | 5 +++--
arch/x86/mm/init_64.c | 27 +++++++++++++++++++--------
include/asm-x86/proto.h | 2 +-
5 files changed, 27 insertions(+), 13 deletions(-)
--- a/arch/x86/kernel/e820_64.c
+++ b/arch/x86/kernel/e820_64.c
@@ -118,7 +118,8 @@ void __init early_res_to_bootmem(unsigne
continue;
printk(KERN_INFO " early res: %d [%lx-%lx] %s\n", i,
final_start, final_end - 1, r->name);
- reserve_bootmem_generic(final_start, final_end - final_start);
+ reserve_bootmem_generic(final_start, final_end - final_start,
+ BOOTMEM_DEFAULT);
}
}
--- a/arch/x86/kernel/efi_64.c
+++ b/arch/x86/kernel/efi_64.c
@@ -100,7 +100,8 @@ void __init efi_call_phys_epilog(void)
void __init efi_reserve_bootmem(void)
{
reserve_bootmem_generic((unsigned long)memmap.phys_map,
- memmap.nr_map * memmap.desc_size);
+ memmap.nr_map * memmap.desc_size,
+ BOOTMEM_DEFAULT);
}
void __iomem * __init efi_ioremap(unsigned long phys_addr, unsigned long size)
--- a/arch/x86/kernel/mpparse.c
+++ b/arch/x86/kernel/mpparse.c
@@ -729,10 +729,11 @@ static int __init smp_scan_config(unsign
if (!reserve)
return 1;
- reserve_bootmem_generic(virt_to_phys(mpf), PAGE_SIZE);
+ reserve_bootmem_generic(virt_to_phys(mpf), PAGE_SIZE,
+ BOOTMEM_DEFAULT);
if (mpf->mpf_physptr)
reserve_bootmem_generic(mpf->mpf_physptr,
- PAGE_SIZE);
+ PAGE_SIZE, BOOTMEM_DEFAULT);
#endif
return 1;
}
--- a/arch/x86/mm/init_64.c
+++ b/arch/x86/mm/init_64.c
@@ -798,24 +798,29 @@ void free_initrd_mem(unsigned long start
}
#endif
-void __init reserve_bootmem_generic(unsigned long phys, unsigned len)
+int __init reserve_bootmem_generic(unsigned long phys, unsigned len, int flags)
{
#ifdef CONFIG_NUMA
int nid, next_nid;
#endif
unsigned long pfn = phys >> PAGE_SHIFT;
+ int ret;
if (pfn >= end_pfn) {
/*
- * This can happen with kdump kernels when accessing
- * firmware tables:
+ * When booting the kdump kernel, the MP tables (for example,
+ * or other firmware-reserved memory) of the BIOS are beyond
+ * end_pfn. (kexec-tools adds exactmap parameters to the kernel
+ * so that the E820 map is no longer used.) Therefore, it's ok
+ * to return "success" here. For normal boot, the MP tables
+ * must be reserved normally.
*/
if (pfn < max_pfn_mapped)
- return;
+ return 0;
printk(KERN_ERR "reserve_bootmem: illegal reserve %lx %u\n",
phys, len);
- return;
+ return -EFAULT;
}
/* Should check here against the e820 map to avoid double free */
@@ -823,17 +828,23 @@ void __init reserve_bootmem_generic(unsi
nid = phys_to_nid(phys);
next_nid = phys_to_nid(phys + len - 1);
if (nid == next_nid)
- reserve_bootmem_node(NODE_DATA(nid), phys, len, BOOTMEM_DEFAULT);
+ ret = reserve_bootmem_node(NODE_DATA(nid), phys, len, flags);
else
- reserve_bootmem(phys, len, BOOTMEM_DEFAULT);
+ ret = reserve_bootmem(phys, len, flags);
+
#else
- reserve_bootmem(phys, len, BOOTMEM_DEFAULT);
+ ret = reserve_bootmem(phys, len, flags);
#endif
+ if (ret != 0)
+ return ret;
+
if (phys+len <= MAX_DMA_PFN*PAGE_SIZE) {
dma_reserve += len / PAGE_SIZE;
set_dma_reserve(dma_reserve);
}
+
+ return 0;
}
int kern_addr_valid(unsigned long addr)
--- a/include/asm-x86/proto.h
+++ b/include/asm-x86/proto.h
@@ -14,7 +14,7 @@ extern void ia32_syscall(void);
extern void ia32_cstar_target(void);
extern void ia32_sysenter_target(void);
-extern void reserve_bootmem_generic(unsigned long phys, unsigned len);
+extern int reserve_bootmem_generic(unsigned long phys, unsigned len, int flags);
extern void syscall32_cpu_init(void);
next prev parent reply other threads:[~2008-06-09 20:42 UTC|newest]
Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-06-08 13:46 [patch 0/3] [x86] Fix crashkernel reservation on NUMA machines Bernhard Walle
2008-06-08 13:46 ` [patch 1/3] Add return value to reserve_bootmem_node() Bernhard Walle
2008-06-08 13:46 ` [patch 2/3] Add flags parameter to reserve_bootmem_generic() Bernhard Walle
2008-06-08 14:26 ` WANG Cong
2008-06-08 17:12 ` Bernhard Walle
2008-06-08 22:01 ` Johannes Weiner
2008-06-09 13:22 ` Vivek Goyal
2008-06-09 16:23 ` Bernhard Walle
2008-06-09 16:39 ` Andi Kleen
2008-06-09 19:50 ` Amul Shah
2008-06-09 20:17 ` Bernhard Walle
2008-06-09 20:29 ` Vivek Goyal
2008-06-09 20:42 ` Bernhard Walle [this message]
2008-06-09 20:54 ` Vivek Goyal
2008-06-09 20:57 ` Bernhard Walle
2008-06-09 21:00 ` Vivek Goyal
2008-06-09 21:04 ` Bernhard Walle
2008-06-09 16:25 ` Bernhard Walle
2008-06-08 22:06 ` Johannes Weiner
2008-06-09 16:37 ` Bernhard Walle
2008-06-08 13:46 ` [patch 3/3] Use reserve_bootmem_generic() to reserve crashkernel memory on x86_64 Bernhard Walle
2008-06-09 13:06 ` [patch 0/3] [x86] Fix crashkernel reservation on NUMA machines Vivek Goyal
2008-06-10 12:44 ` Ingo Molnar
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=20080609224211.2ef0f74c@kopernikus.site \
--to=bwalle@suse.de \
--cc=Benjamin.Romer@unisys.com \
--cc=amul.shah@unisys.com \
--cc=anderson@redhat.com \
--cc=andi@firstfloor.org \
--cc=hannes@saeurebad.de \
--cc=hpa@zytor.com \
--cc=kexec@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=vgoyal@redhat.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®