All of lore.kernel.org
 help / color / mirror / Atom feed
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 v4] x86, kdump: Set crashkernel_low automatically
Date: Mon, 18 Mar 2013 18:04:08 -0700	[thread overview]
Message-ID: <1363655048-6772-1-git-send-email-yinghai@kernel.org> (raw)
In-Reply-To: <5147B0EC.2020907@zytor.com>

Current code does not set low range for crashkernel if the user
does not specify that.

That cause regressions on system that does not support intel_iommu
properly.

Chao said that his system does work well on 3.8 without extra parameter.
even iommu does not work with kdump.

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

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>
 

  reply	other threads:[~2013-03-19  1:04 UTC|newest]

Thread overview: 120+ 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:03   ` CAI Qian
2013-03-08  6:32   ` Yinghai Lu
2013-03-08  6:32     ` Yinghai Lu
2013-03-08  6:36     ` Yinghai Lu
2013-03-08  6:36       ` Yinghai Lu
2013-03-08  7:20       ` WANG Chao
2013-03-08  7:20         ` WANG Chao
2013-03-08  7:27         ` Yinghai Lu
2013-03-08  7:27           ` Yinghai Lu
2013-03-08  7:33           ` WANG Chao
2013-03-08  7:33             ` WANG Chao
2013-03-08  7:50             ` Yinghai Lu
2013-03-08  7:50               ` Yinghai Lu
2013-03-08 12:12               ` WANG Chao
2013-03-08 18:24                 ` Yinghai Lu
2013-03-08 18:24                   ` Yinghai Lu
2013-03-08 19:39                   ` Yinghai Lu
2013-03-08 19:39                     ` Yinghai Lu
2013-03-11  3:42                     ` WANG Chao
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                                                                   ` Yinghai Lu [this message]
2013-03-19 13:33                                                                     ` [PATCH v4] " Vivek Goyal
2013-03-19 15:05                                                                       ` [PATCH v5] " Yinghai Lu
2013-03-20 13:08                                                                         ` 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-20 19:24                                                                                   ` [PATCH] kdump, x86: Process multiple Crash kernel in /proc/iomem Yinghai Lu
2013-03-22 17:59                                                                                     ` Vivek Goyal
2013-03-22 20:52                                                                                       ` Yinghai Lu
2013-03-22 21:21                                                                                         ` Vivek Goyal
2013-03-22 21:27                                                                                           ` H. Peter Anvin
2013-03-22 21:35                                                                                             ` Yinghai Lu
2013-03-22 21:32                                                                                           ` Yinghai Lu
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-11 13:14                       ` Konrad Rzeszutek Wilk
2013-03-08  7:52             ` Takao Indoh
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=1363655048-6772-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 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.