From: Yinghai Lu <yinghai@kernel.org>
To: Thomas Gleixner <tglx@linutronix.de>, Ingo Molnar <mingo@elte.hu>,
"H. Peter Anvin" <hpa@zytor.com>
Cc: WANG Chao <chaowang@redhat.com>, Vivek Goyal <vgoyal@redhat.com>,
"Eric W. Biederman" <ebiederm@xmission.com>,
linux-kernel@vger.kernel.org, Yinghai Lu <yinghai@kernel.org>
Subject: [PATCH v5] x86, kdump: Set crashkernel_low automatically
Date: Tue, 19 Mar 2013 08:05:26 -0700 [thread overview]
Message-ID: <1363705526-3197-1-git-send-email-yinghai@kernel.org> (raw)
In-Reply-To: <20130319133326.GB3872@redhat.com>
Chao said that kdump does does work well on his system on 3.8
without extra parameter, even iommu does not work with kdump.
And now have to append crashkernel_low=Y in first kernel to make
kdump work.
We have now modified crashkernel=X to allocate memory beyong 4G (if
available) and do not allocate low range for crashkernel if the user
does not specify that with crashkernel_low=Y. This causes regression
if iommu is not enabled. Without iommu, swiotlb needs to be setup in
first 4G and there is no low memory available to second kernel.
Set crashkernel_low automatically if the user does not specify that.
For system that does support IOMMU with kdump properly, user could
specify crashkernel_low=0 to save that 72M low ram.
-v3: add swiotlb_size() according to Konrad.
-v4: add comments what 8M is for according to hpa.
also update more crashkernel_low= in kernel-parameters.txt
-v5: update changelog according to Vivek.
Reported-by: WANG Chao <chaowang@redhat.com>
Tested-by: WANG Chao <chaowang@redhat.com>
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
---
Documentation/kernel-parameters.txt | 15 ++++++++++++---
arch/x86/kernel/setup.c | 20 +++++++++++++++++---
include/linux/swiotlb.h | 1 +
lib/swiotlb.c | 19 +++++++++++++++----
4 files changed, 45 insertions(+), 10 deletions(-)
Index: linux-2.6/arch/x86/kernel/setup.c
===================================================================
--- linux-2.6.orig/arch/x86/kernel/setup.c
+++ linux-2.6/arch/x86/kernel/setup.c
@@ -521,19 +521,33 @@ static void __init reserve_crashkernel_l
unsigned long long low_base = 0, low_size = 0;
unsigned long total_low_mem;
unsigned long long base;
+ bool auto_set = false;
int ret;
total_low_mem = memblock_mem_size(1UL<<(32-PAGE_SHIFT));
ret = parse_crashkernel_low(boot_command_line, total_low_mem,
&low_size, &base);
- if (ret != 0 || low_size <= 0)
- return;
+ if (ret != 0) {
+ /*
+ * two parts from lib/swiotlb.c:
+ * swiotlb size: user specified with swiotlb= or default.
+ * swiotlb overflow buffer: now is hardcoded to 32k,
+ * round to 8M to cover more others.
+ */
+ low_size = swiotlb_size_or_default() + (8UL<<20);
+ auto_set = true;
+ } else {
+ /* passed with crashkernel_low=0 ? */
+ if (!low_size)
+ return;
+ }
low_base = memblock_find_in_range(low_size, (1ULL<<32),
low_size, alignment);
if (!low_base) {
- pr_info("crashkernel low reservation failed - No suitable area found.\n");
+ if (!auto_set)
+ pr_info("crashkernel low reservation failed - No suitable area found.\n");
return;
}
Index: linux-2.6/include/linux/swiotlb.h
===================================================================
--- linux-2.6.orig/include/linux/swiotlb.h
+++ linux-2.6/include/linux/swiotlb.h
@@ -25,6 +25,7 @@ extern int swiotlb_force;
extern void swiotlb_init(int verbose);
int swiotlb_init_with_tbl(char *tlb, unsigned long nslabs, int verbose);
extern unsigned long swiotlb_nr_tbl(void);
+unsigned long swiotlb_size_or_default(void);
extern int swiotlb_late_init_with_tbl(char *tlb, unsigned long nslabs);
/*
Index: linux-2.6/lib/swiotlb.c
===================================================================
--- linux-2.6.orig/lib/swiotlb.c
+++ linux-2.6/lib/swiotlb.c
@@ -105,9 +105,9 @@ setup_io_tlb_npages(char *str)
if (!strcmp(str, "force"))
swiotlb_force = 1;
- return 1;
+ return 0;
}
-__setup("swiotlb=", setup_io_tlb_npages);
+early_param("swiotlb", setup_io_tlb_npages);
/* make io_tlb_overflow tunable too? */
unsigned long swiotlb_nr_tbl(void)
@@ -115,6 +115,18 @@ unsigned long swiotlb_nr_tbl(void)
return io_tlb_nslabs;
}
EXPORT_SYMBOL_GPL(swiotlb_nr_tbl);
+
+/* default to 64MB */
+#define IO_TLB_DEFAULT_SIZE (64UL<<20)
+unsigned long swiotlb_size_or_default(void)
+{
+ unsigned long size;
+
+ size = io_tlb_nslabs << IO_TLB_SHIFT;
+
+ return size ? size : (IO_TLB_DEFAULT_SIZE);
+}
+
/* Note that this doesn't work with highmem page */
static dma_addr_t swiotlb_virt_to_bus(struct device *hwdev,
volatile void *address)
@@ -188,8 +200,7 @@ int __init swiotlb_init_with_tbl(char *t
void __init
swiotlb_init(int verbose)
{
- /* default to 64MB */
- size_t default_size = 64UL<<20;
+ size_t default_size = IO_TLB_DEFAULT_SIZE;
unsigned char *vstart;
unsigned long bytes;
Index: linux-2.6/Documentation/kernel-parameters.txt
===================================================================
--- linux-2.6.orig/Documentation/kernel-parameters.txt
+++ linux-2.6/Documentation/kernel-parameters.txt
@@ -596,9 +596,6 @@ bytes respectively. Such letter suffixes
is selected automatically. Check
Documentation/kdump/kdump.txt for further details.
- crashkernel_low=size[KMG]
- [KNL, x86] parts under 4G.
-
crashkernel=range1:size1[,range2:size2,...][@offset]
[KNL] Same as above, but depends on the memory
in the running system. The syntax of range is
@@ -606,6 +603,18 @@ bytes respectively. Such letter suffixes
a memory unit (amount[KMG]). See also
Documentation/kdump/kdump.txt for an example.
+ crashkernel_low=size[KMG]
+ [KNL, x86_64] range under 4G. When crashkernel= is
+ passed, kernel allocate physical memory region
+ above 4G, that cause second kernel crash on system
+ that need swiotlb later. Kernel would try to allocate
+ some region below 4G automatically. This one let
+ user to specify own low range under 4G for second
+ kernel instead.
+ 0: to disable low allocation on systems that do not
+ need swiotlb, that will save 72M low ram in first
+ kernel.
+
cs89x0_dma= [HW,NET]
Format: <dma>
next prev parent reply other threads:[~2013-03-19 15:06 UTC|newest]
Thread overview: 101+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-03-08 5:54 3.9-rc1: crash kernel panic - not syncing: Can not allocate SWIOTLB buffer earlier and can't now provide you with the DMA bounce buffer WANG Chao
2013-03-08 6:03 ` CAI Qian
2013-03-08 6:32 ` Yinghai Lu
2013-03-08 6:36 ` Yinghai Lu
2013-03-08 7:20 ` WANG Chao
2013-03-08 7:27 ` Yinghai Lu
2013-03-08 7:33 ` WANG Chao
2013-03-08 7:50 ` Yinghai Lu
2013-03-08 12:12 ` WANG Chao
2013-03-08 18:24 ` Yinghai Lu
2013-03-08 19:39 ` Yinghai Lu
2013-03-11 3:42 ` WANG Chao
2013-03-11 4:56 ` [PATCH] x86, kdump: Set crashkernel_low automatically Yinghai Lu
2013-03-11 14:48 ` Vivek Goyal
2013-03-11 15:02 ` Vivek Goyal
2013-03-11 17:58 ` Yinghai Lu
2013-03-11 18:26 ` Vivek Goyal
2013-03-11 18:44 ` Yinghai Lu
2013-03-11 18:46 ` H. Peter Anvin
2013-03-11 18:50 ` Yinghai Lu
2013-03-11 18:55 ` H. Peter Anvin
2013-03-11 19:06 ` Yinghai Lu
2013-03-11 19:06 ` H. Peter Anvin
2013-03-11 19:08 ` Yinghai Lu
2013-03-11 19:20 ` Vivek Goyal
2013-03-11 19:55 ` H. Peter Anvin
2013-03-11 20:12 ` Vivek Goyal
2013-03-11 20:19 ` H. Peter Anvin
2013-03-11 20:36 ` H. Peter Anvin
2013-03-11 20:38 ` Eric W. Biederman
2013-03-11 20:42 ` H. Peter Anvin
2013-03-11 21:10 ` Vivek Goyal
2013-03-11 21:13 ` H. Peter Anvin
2013-03-11 20:45 ` Vivek Goyal
2013-03-11 20:50 ` H. Peter Anvin
2013-03-11 21:03 ` Vivek Goyal
2013-03-11 21:06 ` H. Peter Anvin
2013-03-12 13:46 ` Vivek Goyal
2013-03-12 8:35 ` Ingo Molnar
2013-03-11 20:57 ` Yinghai Lu
2013-03-11 21:06 ` Vivek Goyal
2013-03-11 21:15 ` Yinghai Lu
2013-03-11 19:10 ` Vivek Goyal
2013-03-11 19:34 ` Yinghai Lu
2013-03-11 19:38 ` Vivek Goyal
2013-03-11 19:39 ` Yinghai Lu
2013-03-11 19:44 ` Vivek Goyal
2013-03-11 19:44 ` Yinghai Lu
2013-03-18 14:46 ` Vivek Goyal
2013-03-18 15:33 ` Vivek Goyal
2013-03-18 19:05 ` Yinghai Lu
2013-03-18 19:10 ` H. Peter Anvin
2013-03-18 20:00 ` Vivek Goyal
2013-03-18 21:14 ` H. Peter Anvin
2013-03-18 21:25 ` [PATCH v3] " Yinghai Lu
2013-03-18 22:52 ` H. Peter Anvin
2013-03-18 23:26 ` Yinghai Lu
2013-03-19 0:27 ` H. Peter Anvin
2013-03-19 1:04 ` [PATCH v4] " Yinghai Lu
2013-03-19 13:33 ` Vivek Goyal
2013-03-19 15:05 ` Yinghai Lu [this message]
2013-03-20 13:08 ` [PATCH v5] " Vivek Goyal
2013-03-20 15:53 ` Yinghai Lu
2013-03-20 16:03 ` Vivek Goyal
2013-03-20 16:21 ` Yinghai Lu
2013-03-20 16:31 ` Vivek Goyal
2013-03-20 19:22 ` [PATCH] kexec: use Crash kernel for Crash kernel low Yinghai Lu
2013-03-25 19:42 ` Vivek Goyal
2013-03-25 21:50 ` Yinghai Lu
2013-03-26 18:14 ` Vivek Goyal
2013-04-01 13:34 ` Vivek Goyal
2013-04-01 18:33 ` H. Peter Anvin
2013-04-01 19:26 ` Vivek Goyal
2013-04-01 20:47 ` H. Peter Anvin
2013-04-01 21:10 ` Yinghai Lu
2013-04-01 22:02 ` H. Peter Anvin
2013-04-01 22:17 ` Yinghai Lu
2013-04-01 22:20 ` H. Peter Anvin
2013-04-01 22:40 ` Yinghai Lu
2013-04-02 1:11 ` Yinghai Lu
2013-04-02 13:50 ` Vivek Goyal
2013-04-02 14:17 ` Vivek Goyal
2013-04-02 14:50 ` Yinghai Lu
2013-04-02 14:45 ` Yinghai Lu
2013-04-02 14:58 ` Vivek Goyal
2013-04-02 15:44 ` Yinghai Lu
2013-04-02 15:39 ` Vivek Goyal
2013-04-02 15:46 ` Yinghai Lu
2013-04-02 15:50 ` Vivek Goyal
2013-04-02 17:21 ` Yinghai Lu
2013-04-02 13:30 ` Vivek Goyal
2013-03-11 19:14 ` [PATCH] x86, kdump: Set crashkernel_low automatically Eric W. Biederman
2013-03-11 19:22 ` Vivek Goyal
2013-03-11 19:59 ` H. Peter Anvin
2013-03-11 20:17 ` Vivek Goyal
2013-03-11 19:56 ` H. Peter Anvin
2013-03-11 19:02 ` Vivek Goyal
2013-03-11 19:04 ` H. Peter Anvin
2013-03-11 19:17 ` Vivek Goyal
2013-03-11 13:14 ` 3.9-rc1: crash kernel panic - not syncing: Can not allocate SWIOTLB buffer earlier and can't now provide you with the DMA bounce buffer Konrad Rzeszutek Wilk
2013-03-08 7:52 ` Takao Indoh
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=1363705526-3197-1-git-send-email-yinghai@kernel.org \
--to=yinghai@kernel.org \
--cc=chaowang@redhat.com \
--cc=ebiederm@xmission.com \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=tglx@linutronix.de \
--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;
as well as URLs for NNTP newsgroup(s).