Commit 6951e82f authored by Kamezawa Hiroyuki's avatar Kamezawa Hiroyuki Committed by Linus Torvalds

[PATCH] no buddy bitmap patch revist: intro and includes

Followings are patches for removing bitmaps from the buddy allocator.  This
is benefical to memory-hot-plug stuffs, because this removes a data
structure which must meet to a host's physical memory layout.

This is one step to manage physical memory in nonlinear / discontiguous way
and will reduce some amounts of codes to implement memory-hot-plug.

This patch removes bitmaps from zone->free_area[] in include/linux/mmzone.h,
and adds some comments on page->private field in include/linux/mm.h.

non-atomic ops for changing PG_private bit is added in include/page-flags.h.
zone->lock is always acquired when PG_private of "a free page" is changed.
Signed-off-by: default avatarKAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>
Signed-off-by: default avatarAndrew Morton <akpm@osdl.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@osdl.org>
parent ce1d9c8a
...@@ -232,6 +232,8 @@ struct page { ...@@ -232,6 +232,8 @@ struct page {
* usually used for buffer_heads * usually used for buffer_heads
* if PagePrivate set; used for * if PagePrivate set; used for
* swp_entry_t if PageSwapCache * swp_entry_t if PageSwapCache
* When page is free, this indicates
* order in the buddy system.
*/ */
struct address_space *mapping; /* If low bit clear, points to struct address_space *mapping; /* If low bit clear, points to
* inode address_space, or NULL. * inode address_space, or NULL.
......
...@@ -22,7 +22,6 @@ ...@@ -22,7 +22,6 @@
struct free_area { struct free_area {
struct list_head free_list; struct list_head free_list;
unsigned long *map;
unsigned long nr_free; unsigned long nr_free;
}; };
......
...@@ -239,6 +239,8 @@ extern unsigned long __read_page_state(unsigned offset); ...@@ -239,6 +239,8 @@ extern unsigned long __read_page_state(unsigned offset);
#define SetPagePrivate(page) set_bit(PG_private, &(page)->flags) #define SetPagePrivate(page) set_bit(PG_private, &(page)->flags)
#define ClearPagePrivate(page) clear_bit(PG_private, &(page)->flags) #define ClearPagePrivate(page) clear_bit(PG_private, &(page)->flags)
#define PagePrivate(page) test_bit(PG_private, &(page)->flags) #define PagePrivate(page) test_bit(PG_private, &(page)->flags)
#define __SetPagePrivate(page) __set_bit(PG_private, &(page)->flags)
#define __ClearPagePrivate(page) __clear_bit(PG_private, &(page)->flags)
#define PageWriteback(page) test_bit(PG_writeback, &(page)->flags) #define PageWriteback(page) test_bit(PG_writeback, &(page)->flags)
#define SetPageWriteback(page) \ #define SetPageWriteback(page) \
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment