From: Yinghai Lu <Yinghai.Lu@Sun.COM>
To: Ingo Molnar <mingo@elte.hu>, "H. Peter Anvin" <hpa@zytor.com>
Cc: Andi Kleen <ak@suse.de>, LKML <linux-kernel@vger.kernel.org>,
Jesse Barnes <jesse.barnes@intel.com>,
Andrew Morton <akpm@linux-foundation.org>
Subject: [PATCH] x86_32: trim memory by updating e820
Date: Sun, 20 Jan 2008 21:44:46 -0800 [thread overview]
Message-ID: <200801202144.46869.yinghai.lu@sun.com> (raw)
In-Reply-To: <200801202140.57829.yinghai.lu@sun.com>
[PATCH] x86_32: trim memory by updating e820
need to be applied after the patch for x86_64 version mtrr fix e820 v2.
when mtrr is not covering all e820 table, need to trim the ram, need to update e820
reuse some code for x86_64
here need to add early_identify_cpu for x86_32, and move mtrr_bp_init early
compiled only, need someone test it.
Index: linux-2.6/arch/x86/kernel/cpu/common.c
===================================================================
--- linux-2.6.orig/arch/x86/kernel/cpu/common.c
+++ linux-2.6/arch/x86/kernel/cpu/common.c
@@ -396,11 +396,9 @@ __setup("serialnumber", x86_serial_nr_se
/*
* This does the hard work of actually picking apart the CPU stuff...
*/
-void __cpuinit identify_cpu(struct cpuinfo_x86 *c)
+void __cpuinit early_identify_cpu(struct cpuinfo_x86 *c)
{
- int i;
- c->loops_per_jiffy = loops_per_jiffy;
c->x86_cache_size = -1;
c->x86_vendor = X86_VENDOR_UNKNOWN;
c->cpuid_level = -1; /* CPUID not detected */
@@ -424,7 +422,14 @@ void __cpuinit identify_cpu(struct cpuin
if (this_cpu->c_identify)
this_cpu->c_identify(c);
+}
+void __cpuinit identify_cpu(struct cpuinfo_x86 *c)
+{
+ int i;
+
+ c->loops_per_jiffy = loops_per_jiffy;
+ early_identify_cpu(c);
/*
* Vendor-specific initialization. In this section we
* canonicalize the feature flags, meaning if there are
@@ -485,7 +490,6 @@ void __init identify_boot_cpu(void)
identify_cpu(&boot_cpu_data);
sysenter_setup();
enable_sep_cpu();
- mtrr_bp_init();
}
void __cpuinit identify_secondary_cpu(struct cpuinfo_x86 *c)
Index: linux-2.6/arch/x86/kernel/setup_32.c
===================================================================
--- linux-2.6.orig/arch/x86/kernel/setup_32.c
+++ linux-2.6/arch/x86/kernel/setup_32.c
@@ -49,6 +49,7 @@
#include <video/edid.h>
+#include <asm/mtrr.h>
#include <asm/apic.h>
#include <asm/e820.h>
#include <asm/mpspec.h>
@@ -747,6 +748,7 @@ void __init setup_arch(char **cmdline_p)
bss_resource.start = virt_to_phys(&__bss_start);
bss_resource.end = virt_to_phys(&__bss_stop)-1;
+ early_identify_cpu(&boot_cpu_data);
parse_early_param();
if (user_defined_memmap) {
@@ -762,6 +764,12 @@ void __init setup_arch(char **cmdline_p)
max_low_pfn = setup_memory();
+ /* update e820 for memory not covered by WB MTRRs */
+ mtrr_bp_init();
+ if (mtrr_trim_uncached_memory(max_pfn)) {
+ max_low_pfn = setup_memory();
+ }
+
#ifdef CONFIG_VMI
/*
* Must be after max_low_pfn is determined, and before kernel
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
@@ -624,7 +624,6 @@ static struct sysdev_driver mtrr_sysdev_
.resume = mtrr_restore,
};
-#ifdef CONFIG_X86_64
static int disable_mtrr_trim;
static int __init disable_mtrr_trim_setup(char *str)
@@ -726,7 +725,6 @@ int __init mtrr_trim_uncached_memory(uns
return 0;
}
-#endif
/**
* mtrr_bp_init - initialize mtrrs on the boot CPU
Index: linux-2.6/Documentation/kernel-parameters.txt
===================================================================
--- linux-2.6.orig/Documentation/kernel-parameters.txt
+++ linux-2.6/Documentation/kernel-parameters.txt
@@ -575,7 +575,7 @@ and is between 256 and 4096 characters.
See drivers/char/README.epca and
Documentation/digiepca.txt.
- disable_mtrr_trim [X86-64, Intel only]
+ disable_mtrr_trim [X86, Intel and AMD only]
By default the kernel will trim any uncacheable
memory out of your available memory pool based on
MTRR settings. This parameter disables that behavior,
Index: linux-2.6/include/asm-x86/processor.h
===================================================================
--- linux-2.6.orig/include/asm-x86/processor.h
+++ linux-2.6/include/asm-x86/processor.h
@@ -131,6 +131,7 @@ DECLARE_PER_CPU(struct cpuinfo_x86, cpu_
void cpu_detect(struct cpuinfo_x86 *c);
+extern void early_identify_cpu(struct cpuinfo_x86 *);
extern void identify_cpu(struct cpuinfo_x86 *);
extern void identify_boot_cpu(void);
extern void identify_secondary_cpu(struct cpuinfo_x86 *);
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
@@ -827,3 +827,14 @@ static int __init parse_memmap(char *arg
return 0;
}
early_param("memmap", parse_memmap);
+void __init update_e820(void)
+{
+ u8 nr_map;
+
+ nr_map = e820.nr_map;
+ if (sanitize_e820_map(e820.map, &nr_map))
+ return;
+ e820.nr_map = nr_map;
+ printk(KERN_INFO "modified physical RAM map:\n");
+ print_memory_map("modified");
+}
Index: linux-2.6/include/asm-x86/e820_32.h
===================================================================
--- linux-2.6.orig/include/asm-x86/e820_32.h
+++ linux-2.6/include/asm-x86/e820_32.h
@@ -19,6 +19,7 @@
#ifndef __ASSEMBLY__
extern struct e820map e820;
+extern void update_e820(void);
extern int e820_all_mapped(u64 start, u64 end, unsigned type);
extern int e820_any_mapped(u64 start, u64 end, unsigned type);
@@ -29,6 +30,8 @@ extern int is_memory_all_valid(u64 start
extern int is_memory_all_reserved(u64 start, u64 end);
extern void find_max_pfn(void);
extern void register_bootmem_low_pages(unsigned long max_low_pfn);
+extern void add_memory_region(unsigned long long start,
+ unsigned long long size, int type);
extern void e820_register_memory(void);
extern void limit_regions(unsigned long long size);
extern void print_memory_map(char *who);
next prev parent reply other threads:[~2008-01-21 5:38 UTC|newest]
Thread overview: 87+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-01-20 4:45 [PATCH] x86: disable_mtrr_trim only need for x86_64 Yinghai Lu
2008-01-20 5:37 ` H. Peter Anvin
2008-01-20 6:55 ` Yinghai Lu
2008-01-20 8:17 ` [PATCH] x86_64: update e820 instead of updating end_pfn Yinghai Lu
2008-01-20 9:20 ` Ingo Molnar
2008-01-20 15:08 ` Andi Kleen
2008-01-21 5:40 ` [PATCH] x86_64: update e820 instead of updating end_pfn v2 Yinghai Lu
2008-01-21 5:44 ` Yinghai Lu [this message]
2008-01-21 5:58 ` Andi Kleen
2008-01-21 6:05 ` Harvey Harrison
2008-01-21 6:08 ` Andi Kleen
2008-01-21 6:14 ` Li Zefan
2008-01-21 6:57 ` [PATCH] x86_64: check if Tom2 is enabled Yinghai Lu
2008-01-21 17:24 ` Cyrill Gorcunov
2008-01-21 17:39 ` H. Peter Anvin
2008-01-21 17:49 ` Cyrill Gorcunov
2008-01-21 18:03 ` Andi Kleen
2008-01-21 18:09 ` Cyrill Gorcunov
2008-01-21 18:15 ` H. Peter Anvin
2008-01-21 18:46 ` Andi Kleen
2008-01-21 0:00 ` [PATCH] x86_64: update e820 instead of updating end_pfn Yinghai Lu
[not found] ` <200801202255.02645.yinghai.lu@sun.com>
[not found] ` <200801202255.58642.yinghai.lu@sun.com>
2008-01-21 6:56 ` [PATCH] x86_32: trim memory by updating e820 v2 Yinghai Lu
2008-01-21 16:30 ` Jesse Barnes
2008-01-21 19:14 ` Justin Piszcz
2008-01-21 20:09 ` Yinghai Lu
2008-01-21 21:37 ` Justin Piszcz
2008-01-23 3:50 ` Yinghai Lu
2008-01-26 0:01 ` Justin Piszcz
2008-01-26 0:16 ` Yinghai Lu
2008-01-26 0:37 ` Justin Piszcz
2008-01-28 15:09 ` Ingo Molnar
2008-01-28 18:07 ` Justin Piszcz
2008-01-22 16:51 ` Ingo Molnar
2008-01-23 0:23 ` [PATCH] x86_32: trim memory by updating e820 v3 Yinghai Lu
2008-04-26 10:56 ` Andrew Morton
2008-04-26 12:56 ` Gabriel C
2008-04-27 1:05 ` Yinghai Lu
2008-04-28 18:07 ` Eric W. Biederman
2008-04-28 23:16 ` Yinghai Lu
2008-04-29 10:31 ` Ingo Molnar
2008-04-29 17:29 ` Eric W. Biederman
2008-04-29 18:40 ` Yinghai Lu
2008-04-29 19:19 ` Eric W. Biederman
2008-04-29 19:44 ` Yinghai Lu
2008-04-29 20:02 ` Eric W. Biederman
2008-04-28 6:44 ` Yinghai Lu
2008-04-28 9:18 ` Gabriel C
2008-04-28 9:34 ` Yinghai Lu
2008-04-28 9:54 ` Gabriel C
2008-04-28 10:03 ` Gabriel C
2008-04-28 10:07 ` Mika Fischer
2008-04-28 19:03 ` Yinghai Lu
2008-04-28 13:53 ` Ingo Molnar
2008-04-28 14:11 ` Mika Fischer
2008-04-28 14:24 ` Gabriel C
2008-04-28 19:06 ` Yinghai Lu
2008-04-28 19:38 ` Gabriel C
2008-04-28 20:45 ` Gabriel C
2008-04-28 21:19 ` Gabriel C
2008-04-28 22:03 ` Yinghai Lu
2008-04-28 22:56 ` Gabriel C
2008-04-28 23:23 ` Yinghai Lu
2008-04-29 1:05 ` Gabriel C
2008-04-29 2:41 ` Yinghai Lu
2008-04-29 10:34 ` Ingo Molnar
2008-04-29 10:42 ` Yinghai Lu
2008-04-28 19:08 ` Yinghai Lu
2008-04-28 19:46 ` Gabriel C
2008-04-28 14:15 ` Gabriel C
2008-04-28 16:09 ` Jesse Barnes
2008-04-28 16:31 ` Mika Fischer
2008-04-28 16:55 ` Jesse Barnes
2008-04-29 10:37 ` Ingo Molnar
2008-04-29 12:40 ` Andrew Morton
2008-04-29 15:52 ` Jesse Barnes
2008-04-29 22:03 ` [patch] PCI: export resource_wc in pci sysfs Ingo Molnar
2008-04-29 22:24 ` Andrew Morton
2008-04-27 0:57 ` [PATCH] x86_32: trim memory by updating e820 v3 Yinghai Lu
2008-04-27 8:21 ` Mika Fischer
2008-04-27 1:22 ` Yinghai Lu
2008-04-27 8:29 ` Mika Fischer
2008-04-28 6:50 ` Yinghai Lu
2008-04-28 8:38 ` Mika Fischer
2008-04-28 9:09 ` Yinghai Lu
2008-04-28 9:44 ` Mika Fischer
2008-04-28 9:58 ` Gabriel C
2008-01-21 6:57 ` [PATCH] x86_64: update e820 instead of updating end_pfn v3 Yinghai Lu
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=200801202144.46869.yinghai.lu@sun.com \
--to=yinghai.lu@sun.com \
--cc=ak@suse.de \
--cc=akpm@linux-foundation.org \
--cc=hpa@zytor.com \
--cc=jesse.barnes@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
/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.