All of lore.kernel.org
 help / color / mirror / Atom feed
From: Yinghai Lu <yhlu.kernel.send@gmail.com>
To: Andrew Morton <akpm@linux-foundation.org>,
	Ingo Molnar <mingo@elte.hu>, "H. Peter Anvin" <hpa@zytor.com>,
	Thomas Gleixner <tglx@linutronix.de>,
	Gabriel C <nix.or.die@googlemail.com>,
	Mika Fischer <mika.fischer@zoopnet.de>
Cc: "linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>
Subject: [PATCH] x86: fix trimming e820 with MTRR holes. - fix
Date: Tue, 29 Apr 2008 20:25:16 -0700	[thread overview]
Message-ID: <200804292025.17159.yhlu.kernel@gmail.com> (raw)
In-Reply-To: <200804290159.49882.yhlu.kernel@gmail.com>


v2: process hole then end_pfn
    fix update_memory_range with whole cover comparing

Signed-off-by: Yinghai Lu <yinghai.lu@gmail.com>

Index: linux-2.6/arch/x86/kernel/cpu/mtrr/main.c
===================================================================
--- linux-2.6.orig/arch/x86/kernel/cpu/mtrr/main.c
+++ linux-2.6/arch/x86/kernel/cpu/mtrr/main.c
@@ -1098,11 +1098,12 @@ int __init amd_special_default_mtrr(void
 static u64 __init real_trim_memory(unsigned long start_pfn, unsigned long limit_pfn)
 {
 	u64 trim_start, trim_size;
-	trim_start =  start_pfn;
+	trim_start = start_pfn;
 	trim_start <<= PAGE_SHIFT;
 	trim_size = limit_pfn;
 	trim_size <<= PAGE_SHIFT;
 	trim_size -= trim_start;
+
 	return update_memory_range(trim_start, trim_size, E820_RAM,
 				E820_RESERVED);
 }
@@ -1124,7 +1125,6 @@ int __init mtrr_trim_uncached_memory(uns
 	struct res_range range[RANGE_NUM];
 	int nr_range;
 	u64 total_real_trim_size;
-	int changed;
 
 	/* extra one for all 0 */
 	int num[MTRR_NUM_TYPES + 1];
@@ -1189,49 +1189,35 @@ int __init mtrr_trim_uncached_memory(uns
 	}
 	nr_range = x86_get_mtrr_mem_range(range, nr_range, 0, 0);
 
-	changed = 0;
-	total_real_trim_size = 0;
-
-	/* check the top at first */
-	i = nr_range - 1;
-	if (range[i].end + 1 < end_pfn) {
-			total_real_trim_size += real_trim_memory(range[i].end + 1, end_pfn);
-	}
-
-	if (total_real_trim_size) {
-		printk(KERN_WARNING "WARNING: BIOS bug: CPU MTRRs don't cover"
-			" all of memory, losing %lluMB of RAM.\n",
-			total_real_trim_size >> 20);
-
-		WARN_ON(1);
-
-		printk(KERN_INFO "update e820 for mtrr -- end_pfn\n");
-		update_e820();
-		changed = 1;
-	}
-
 	total_real_trim_size = 0;
+	/* check the head */
 	if (range[0].start)
 		total_real_trim_size += real_trim_memory(0, range[0].start);
-
-	for (i = 0; i < nr_range - 1; i--) {
+	/* check the holes */
+	for (i = 0; i < nr_range - 1; i++) {
 		if (range[i].end + 1 < range[i+1].start)
 			total_real_trim_size += real_trim_memory(range[i].end + 1, range[i+1].start);
 	}
+	/* check the top */
+	i = nr_range - 1;
+	if (range[i].end + 1 < end_pfn)
+		total_real_trim_size += real_trim_memory(range[i].end + 1, end_pfn);
 
 	if (total_real_trim_size) {
 		printk(KERN_WARNING "WARNING: BIOS bug: CPU MTRRs don't cover"
 			" all of memory, losing %lluMB of RAM.\n",
 			total_real_trim_size >> 20);
 
-		WARN_ON(1);
+		if (enable_mtrr_cleanup < 1)
+			WARN_ON(1);
 
-		printk(KERN_INFO "update e820 for mtrr -- holes\n");
+		printk(KERN_INFO "update e820 for mtrr\n");
 		update_e820();
-		changed = 1;
+
+		return 1;
 	}
 
-	return changed;
+	return 0;
 }
 
 /**
Index: linux-2.6/arch/x86/kernel/e820_64.c
===================================================================
--- linux-2.6.orig/arch/x86/kernel/e820_64.c
+++ linux-2.6/arch/x86/kernel/e820_64.c
@@ -843,7 +843,8 @@ u64 __init update_memory_range(u64 start
 		if (ei->type != old_type)
 			continue;
 		/* totally covered? */
-		if (ei->addr >= start && ei->size <= size) {
+		if (ei->addr >= start &&
+		    (ei->addr + ei->size) <= (start + size)) {
 			ei->type = new_type;
 			real_updated_size += ei->size;
 			continue;
Index: linux-2.6/arch/x86/kernel/e820_32.c
===================================================================
--- linux-2.6.orig/arch/x86/kernel/e820_32.c
+++ linux-2.6/arch/x86/kernel/e820_32.c
@@ -797,7 +797,8 @@ u64 __init update_memory_range(u64 start
 		if (ei->type != old_type)
 			continue;
 		/* totally covered? */
-		if (ei->addr >= start && ei->size <= size) {
+		if (ei->addr >= start &&
+		    (ei->addr + ei->size) <= (start + size)) {
 			ei->type = new_type;
 			real_updated_size += ei->size;
 			continue;

  parent reply	other threads:[~2008-04-30  3:26 UTC|newest]

Thread overview: 89+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-04-28  6:37 [PATCH] x86: mtrr cleanup for converting continuous to discrete layout Yinghai Lu
2008-04-28  9:06 ` [PATCH] x86: mtrr cleanup for converting continuous to discrete layout v2 Yinghai Lu
2008-04-28 13:08   ` Ingo Molnar
2008-04-28 13:49     ` Arjan van de Ven
2008-04-28 15:28       ` Mika Fischer
2008-04-28  5:50         ` Arjan van de Ven
2008-04-28 16:01         ` Gabriel C
2008-04-28 16:28           ` Mika Fischer
2008-04-28 19:44   ` [PATCH] x86: mtrr cleanup for converting continuous to discrete layout v3 Yinghai Lu
2008-04-28 20:15     ` Ingo Molnar
2008-04-28 20:18       ` Yinghai Lu
2008-04-28 20:29         ` Ingo Molnar
2008-04-28 20:16     ` [PATCH] x86: mtrr cleanup for converting continuous to discrete layout v4 Yinghai Lu
2008-04-28 22:05       ` [PATCH] x86: mtrr cleanup for converting continuous to discrete layout v5 Yinghai Lu
2008-04-28 22:36         ` Randy Dunlap
2008-04-28 22:47           ` Yinghai Lu
2008-04-29  2:42         ` Andrew Morton
2008-04-29  3:01           ` Yinghai Lu
     [not found]         ` <200804290157.30651.yhlu.kernel@gmail.com>
2008-04-29  8:59           ` [PATCH 2/2] x86: fix trimming e820 with MTRR holes Yinghai Lu
2008-04-29 11:35             ` Ingo Molnar
2008-04-29 17:18               ` Yinghai Lu
2008-04-29 17:20                 ` Yinghai Lu
2008-04-30  3:25             ` Yinghai Lu [this message]
2008-04-30 12:09               ` [PATCH] x86: fix trimming e820 with MTRR holes. - fix Ingo Molnar
2008-04-29  9:00         ` [PATCH 1/2] x86: mtrr cleanup for converting continuous to discrete layout v7 Yinghai Lu
2008-04-29  9:47           ` Gabriel C
2008-04-29 10:30             ` Yinghai Lu
2008-04-29 10:56               ` Yinghai Lu
2008-04-29 11:26                 ` Ingo Molnar
2008-04-29 11:51                 ` Gabriel C
2008-04-29 17:11                   ` Yinghai Lu
2008-04-29 20:25                     ` Gabriel C
2008-04-29 21:49                       ` Yinghai Lu
2008-04-29 23:56                         ` Gabriel C
2008-04-30  0:06                           ` Gabriel C
2008-04-30  0:38                             ` Yinghai Lu
2008-04-30  1:02                               ` Gabriel C
2008-04-30  3:00                                 ` Yinghai Lu
2008-04-30  3:29                                   ` Yinghai Lu
2008-04-30  4:12                                     ` Gabriel C
2008-04-30  4:25                                       ` Yinghai Lu
2008-04-30 12:04                                         ` Gabriel C
2008-04-30 16:26                                           ` Yinghai Lu
2008-04-30  0:13                           ` Yinghai Lu
2008-04-29 10:52           ` [PATCH 1/2] x86: mtrr cleanup for converting continuous to discrete layout v8 Yinghai Lu
2008-04-29 13:07             ` Ingo Molnar
2008-04-29 17:25               ` Yinghai Lu
2008-04-29 20:46             ` Randy Dunlap
2008-04-29 21:54               ` Yinghai Lu
2008-04-30  3:25             ` [PATCH] x86: mtrr cleanup for converting continuous to discrete layout v8 - fix Yinghai Lu
2008-04-30 12:09               ` Ingo Molnar
2008-05-01  8:00               ` [PATCH] x86: mtrr cleanup for converting continuous to discrete - auto detect Yinghai Lu
2008-05-01 11:45                 ` Gabriel C
2008-05-02  0:06                   ` Yinghai Lu
2008-05-02  0:29                     ` Gabriel C
2008-05-02  0:35                       ` Yinghai Lu
2008-05-02  1:18                         ` Gabriel C
2008-05-02  1:55                           ` Yinghai Lu
2008-05-01 12:09                 ` Mika Fischer
2008-05-01 16:35                   ` Yinghai Lu
2008-05-01 16:59                     ` Mika Fischer
2008-05-01 17:40                       ` Yinghai Lu
2008-05-01 15:09                 ` Randy Dunlap
2008-05-01 16:38                   ` Yinghai Lu
2008-05-01 18:57                 ` [PATCH] x86: mtrr cleanup for converting continuous to discrete - auto detect v2 Yinghai Lu
2008-05-01 19:42                   ` H. Peter Anvin
2008-05-01 21:02                     ` Yinghai Lu
2008-05-01 21:10                       ` H. Peter Anvin
2008-05-01 21:20                         ` Yinghai Lu
2008-05-01 21:26                           ` H. Peter Anvin
2008-05-01 21:31                             ` Yinghai Lu
2008-05-01 21:33                               ` H. Peter Anvin
2008-05-01 21:44                                 ` Yinghai Lu
2008-05-01 21:49                                   ` H. Peter Anvin
2008-05-01 22:52                                     ` Yinghai Lu
2008-05-01 22:57                                       ` H. Peter Anvin
2008-05-01 23:10                                         ` Yinghai Lu
2008-05-02  0:52                   ` [PATCH] x86: mtrr cleanup for converting continuous to discrete - auto detect v3 Yinghai Lu
2008-05-02  9:40                     ` [PATCH] x86: mtrr cleanup for converting continuous to discrete - auto detect v4 Yinghai Lu
2008-04-29 19:00         ` [PATCH] x86: mtrr cleanup for converting continuous to discrete layout v5 Eric W. Biederman
2008-04-29 20:04           ` Yinghai Lu
2008-04-29 20:29             ` Eric W. Biederman
2008-04-29 21:57               ` Yinghai Lu
2008-04-29 22:09                 ` Ingo Molnar
2008-04-29 22:18                   ` Yinghai Lu
2008-04-29 22:14                 ` Eric W. Biederman
2008-04-29 22:54                   ` Thomas Gleixner
2008-04-30  1:16                     ` Eric W. Biederman
2008-04-30  9:57                       ` Alan Cox

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=200804292025.17159.yhlu.kernel@gmail.com \
    --to=yhlu.kernel.send@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=hpa@zytor.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mika.fischer@zoopnet.de \
    --cc=mingo@elte.hu \
    --cc=nix.or.die@googlemail.com \
    --cc=tglx@linutronix.de \
    --cc=yhlu.kernel@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.