linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH -v4 0/37] x86: not use  bootmem for x86
@ 2010-01-16  3:06 Yinghai Lu
  2010-01-16  3:06 ` [PATCH 01/37] x86: move range related operation to one file Yinghai Lu
                   ` (36 more replies)
  0 siblings, 37 replies; 60+ messages in thread
From: Yinghai Lu @ 2010-01-16  3:06 UTC (permalink / raw)
  To: Ingo Molnar, Thomas Gleixner, H. Peter Anvin, Andrew Morton,
	Jesse Barnes, Christoph Lameter
  Cc: linux-kernel, linux-pci, Yinghai Lu

please check the patches regarding with early_res and bootmem

and at last it will use early_res instead of bootmem with x86 64bits

-v2: allocate vmemmap on one node together, and also seperate early_res
-v3: make x86 32 bit support early_res to use bootmem too
     move related early_res to kernel/
     sparse vmemmap together: address Ingo.
-v4: some patches could go with tip with acked-by Jesse
     radix and logical flat etc

http://lkml.indiana.edu/hypermail/linux/kernel/0910.3/01432.html
Ingo said:
------------------------
I think we could remove the bootmem allocator middle man altogether.

This can be done by initializing the page allocator sooner and by
extending (already existing) 'reserve memory early on' mechanisms in
architecture code. (the reserve_early*() APIs in x86 for example)

Right now we have 5 memory allocation models on x86, initialized
gradually:

- allocator (buddy) [generic]
- early allocator (bootmem) [generic]
- very early allocator (reserve_early*()) [x86]
- very very early allocator (early brk model) [x86]
- very very very early allocator (build time .data/.bss) [generic]

Seems excessive.

The reserve_early() method is list/range based and can handle vast
amounts of not very fragmented memory - perfect for basically all the
real bootmem purposes (which is to bootstrap the buddy).

reserve_early() allocated memory could be freed into the buddy later on
as well. The main reason why bootmem is 'destroyed' during free-to-buddy
is because it has excessive internal bitmaps we want to free. With a
list/range based reserve_early() mechanism there's no such problem -
they can linger indefinitely and there's near zero allocation management
overhead.

reserve_early() might need some small amount of extra work before it can
be used as a generic early allocator - like adding a node field to it
(so that the buddy can then pick those ranges up in a NUMA aware
fashion) - but nothing very complex.


early_res related:
6f632c9: x86: move range related operation to one file
b62d592: x86: check range in update range
2a49dba: x86/pci: use u64 instead of size_t in amd_bus.c
b9406c1: x86/pci: add cap_resource
84dd3b2: x86/pci: enable pci root res read out for 32bit too
e9a7f12: x86: call early_res_to_bootmem one time
c3685a1: x86: introduce max_early_res and early_res_count
4b951ed: x86: dynamic increase early_res array size
5a84eb6: x86: print bootmem free before pci_iommu_alloc and free_all_bootmem -v2
f00c3bb: x86: make early_node_mem get mem > 4g if possible
e3e7efe: x86: only call dma32_reserve_bootmem 64bit !CONFIG_NUMA
9bee1a1: x86: make 64 bit use early_res instead of bootmem before slab
453b0be: sparsemem: put usemap for one node together
5f01a21: sparsemem: put mem map for one node together.
ef6e006: x86: change range end to start+size
480085b: x86: move bios page reserve early to head32/64.c
95630e9: x86: seperate early_res related code from e820.c
a91ebdc: x86: add find_early_area_size
8e98a3a: x86: move back find_e820_area to e820.c
98f958f: early_res: enhance check_and_double_early_res
0e5b16a: x86: make 32bit support NO_BOOTMEM
59cca3b: move round_up/down to kernel.h
27911e4: x86: add find_fw_memmap_area
7809f98: core: move early_res
46afde8: ram_buffer_extend_print
1f32abd: x86: remove bios data range from e820
d1bbc62: irq: remove not need bootmem code

------------------------------------
radix_tree for spare irq:
3ac5b09: radix: move radix init early
3b862ce: sparseirq: change irq_desc_ptrs to static
9d32b70: sparseirq: use radix_tree instead of ptrs array
ff0c3de: x86: remove arch_probe_nr_irqs

--------------------------------------
logical flat cleanup:
1a8b97c: x86, apic: Use logical flat on intel with <= 8 logical cpus
eaf5895: use nr_cpus= to set nr_cpu_ids early
6efca5a: x86: using logical flat for amd cpu too.
4607ec4: x86: according to nr_cpu_ids to decide if need to leave logical flat
d2e2375: x86: make 32bit apic flat to physflat switch like 64bit
99ec7c7: x86: use num_processors for possible cpus

Thanks

Yinghai

^ permalink raw reply	[flat|nested] 60+ messages in thread

end of thread, other threads:[~2010-01-26  1:27 UTC | newest]

Thread overview: 60+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-01-16  3:06 [PATCH -v4 0/37] x86: not use bootmem for x86 Yinghai Lu
2010-01-16  3:06 ` [PATCH 01/37] x86: move range related operation to one file Yinghai Lu
2010-01-19 16:54   ` Christoph Lameter
2010-01-20 19:37     ` Yinghai Lu
2010-01-20 19:51       ` Christoph Lameter
2010-01-20 19:59         ` Yinghai Lu
2010-01-16  3:06 ` [PATCH 02/37] x86: check range in update range Yinghai Lu
2010-01-19 16:56   ` Christoph Lameter
2010-01-20 19:39     ` Yinghai Lu
2010-01-20 19:50       ` Christoph Lameter
2010-01-20 19:57         ` Yinghai Lu
2010-01-16  3:06 ` [PATCH 03/37] x86/pci: use u64 instead of size_t in amd_bus.c Yinghai Lu
2010-01-16  3:06 ` [PATCH 04/37] x86/pci: add cap_resource Yinghai Lu
2010-01-16  3:06 ` [PATCH 05/37] x86/pci: enable pci root res read out for 32bit too Yinghai Lu
2010-01-16  3:06 ` [PATCH 06/37] x86: call early_res_to_bootmem one time Yinghai Lu
2010-01-16  3:06 ` [PATCH 07/37] x86: introduce max_early_res and early_res_count Yinghai Lu
2010-01-16  3:06 ` [PATCH 08/37] x86: dynamic increase early_res array size Yinghai Lu
2010-01-16  3:06 ` [PATCH 09/37] x86: print bootmem free before pci_iommu_alloc and free_all_bootmem -v2 Yinghai Lu
2010-01-16  3:06 ` [PATCH 10/37] x86: make early_node_mem get mem > 4g if possible Yinghai Lu
2010-01-16  3:06 ` [PATCH 11/37] x86: only call dma32_reserve_bootmem 64bit !CONFIG_NUMA Yinghai Lu
2010-01-16  3:06 ` [PATCH 12/37] x86: make 64 bit use early_res instead of bootmem before slab Yinghai Lu
2010-01-16  3:06 ` [PATCH 13/37] sparsemem: put usemap for one node together Yinghai Lu
2010-01-16  3:06 ` [PATCH 14/37] sparsemem: put mem map " Yinghai Lu
2010-01-19 17:13   ` Christoph Lameter
2010-01-16  3:06 ` [PATCH 15/37] x86: change range end to start+size Yinghai Lu
2010-01-16  3:06 ` [PATCH 16/37] x86: move bios page reserve early to head32/64.c Yinghai Lu
2010-01-16  3:06 ` [PATCH 17/37] x86: seperate early_res related code from e820.c Yinghai Lu
2010-01-16  3:06 ` [PATCH 18/37] x86: add find_early_area_size Yinghai Lu
2010-01-16  3:06 ` [PATCH 19/37] x86: move back find_e820_area to e820.c Yinghai Lu
2010-01-16  3:06 ` [PATCH 20/37] early_res: enhance check_and_double_early_res Yinghai Lu
2010-01-16  3:06 ` [PATCH 21/37] x86: make 32bit support NO_BOOTMEM Yinghai Lu
2010-01-16  3:06 ` [PATCH 22/37] move round_up/down to kernel.h Yinghai Lu
2010-01-19 17:57   ` Christoph Lameter
2010-01-20 20:01     ` Yinghai Lu
2010-01-20 20:28     ` Yinghai Lu
2010-01-20 20:52       ` Christoph Lameter
2010-01-20 21:02         ` Yinghai Lu
2010-01-26  0:40       ` Andrew Morton
2010-01-26  0:58         ` H. Peter Anvin
2010-01-26  1:26           ` Andrew Morton
2010-01-16  3:06 ` [PATCH 23/37] x86: add find_fw_memmap_area Yinghai Lu
2010-01-16  3:06 ` [PATCH 24/37] core: move early_res Yinghai Lu
2010-01-16  3:06 ` [PATCH 25/37] ram_buffer_extend_print Yinghai Lu
2010-01-19 17:59   ` Christoph Lameter
2010-01-16  3:06 ` [PATCH 26/37] x86: remove bios data range from e820 Yinghai Lu
2010-01-16  3:06 ` [PATCH 27/37] irq: remove not need bootmem code Yinghai Lu
2010-01-16  3:06 ` [PATCH 28/37] radix: move radix init early Yinghai Lu
2010-01-16  3:07 ` [PATCH 29/37] sparseirq: change irq_desc_ptrs to static Yinghai Lu
2010-01-19 18:01   ` Christoph Lameter
2010-01-20 19:49     ` Yinghai Lu
2010-01-16  3:07 ` [PATCH 30/37] sparseirq: use radix_tree instead of ptrs array Yinghai Lu
2010-01-16  3:07 ` [PATCH 31/37] x86: remove arch_probe_nr_irqs Yinghai Lu
2010-01-16  3:07 ` [PATCH 32/37] x86, apic: Use logical flat on intel with <= 8 logical cpus Yinghai Lu
2010-01-16  3:07 ` [PATCH 33/37] use nr_cpus= to set nr_cpu_ids early Yinghai Lu
2010-01-19 18:03   ` Christoph Lameter
2010-01-20 19:54     ` Yinghai Lu
2010-01-16  3:07 ` [PATCH 34/37] x86: using logical flat for amd cpu too Yinghai Lu
2010-01-16  3:07 ` [PATCH 35/37] x86: according to nr_cpu_ids to decide if need to leave logical flat Yinghai Lu
2010-01-16  3:07 ` [PATCH 36/37] x86: make 32bit apic flat to physflat switch like 64bit Yinghai Lu
2010-01-16  3:07 ` [PATCH 37/37] x86: use num_processors for possible cpus Yinghai Lu

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).