diff options
author | Hugh Dickins <hugh.dickins@tiscali.co.uk> | 2009-12-14 20:59:34 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-12-15 11:53:20 -0500 |
commit | d0f209f68f80f9a152799760c230019e7f270b2a (patch) | |
tree | 83e4a6b2e15f50738572b31cfadb5fc0db17d2b7 /mm/ksm.c | |
parent | 62b61f611eb5e20f7e9f8619bfd03bdfe8af6348 (diff) |
ksm: remove unswappable max_kernel_pages
Now that ksm pages are swappable, and the known holes plugged, remove
mention of unswappable kernel pages from KSM documentation and comments.
Remove the totalram_pages/4 initialization of max_kernel_pages. In fact,
remove max_kernel_pages altogether - we can reinstate it if removal turns
out to break someone's script; but if we later want to limit KSM's memory
usage, limiting the stable nodes would not be an effective approach.
Signed-off-by: Hugh Dickins <hugh.dickins@tiscali.co.uk>
Cc: Izik Eidus <ieidus@redhat.com>
Cc: Andrea Arcangeli <aarcange@redhat.com>
Cc: Chris Wright <chrisw@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/ksm.c')
-rw-r--r-- | mm/ksm.c | 41 |
1 files changed, 2 insertions, 39 deletions
@@ -179,9 +179,6 @@ static unsigned long ksm_pages_unshared; | |||
179 | /* The number of rmap_items in use: to calculate pages_volatile */ | 179 | /* The number of rmap_items in use: to calculate pages_volatile */ |
180 | static unsigned long ksm_rmap_items; | 180 | static unsigned long ksm_rmap_items; |
181 | 181 | ||
182 | /* Limit on the number of unswappable pages used */ | ||
183 | static unsigned long ksm_max_kernel_pages; | ||
184 | |||
185 | /* Number of pages ksmd should scan in one batch */ | 182 | /* Number of pages ksmd should scan in one batch */ |
186 | static unsigned int ksm_thread_pages_to_scan = 100; | 183 | static unsigned int ksm_thread_pages_to_scan = 100; |
187 | 184 | ||
@@ -943,14 +940,6 @@ static struct page *try_to_merge_two_pages(struct rmap_item *rmap_item, | |||
943 | { | 940 | { |
944 | int err; | 941 | int err; |
945 | 942 | ||
946 | /* | ||
947 | * The number of nodes in the stable tree | ||
948 | * is the number of kernel pages that we hold. | ||
949 | */ | ||
950 | if (ksm_max_kernel_pages && | ||
951 | ksm_max_kernel_pages <= ksm_pages_shared) | ||
952 | return NULL; | ||
953 | |||
954 | err = try_to_merge_with_ksm_page(rmap_item, page, NULL); | 943 | err = try_to_merge_with_ksm_page(rmap_item, page, NULL); |
955 | if (!err) { | 944 | if (!err) { |
956 | err = try_to_merge_with_ksm_page(tree_rmap_item, | 945 | err = try_to_merge_with_ksm_page(tree_rmap_item, |
@@ -1850,8 +1839,8 @@ static ssize_t run_store(struct kobject *kobj, struct kobj_attribute *attr, | |||
1850 | /* | 1839 | /* |
1851 | * KSM_RUN_MERGE sets ksmd running, and 0 stops it running. | 1840 | * KSM_RUN_MERGE sets ksmd running, and 0 stops it running. |
1852 | * KSM_RUN_UNMERGE stops it running and unmerges all rmap_items, | 1841 | * KSM_RUN_UNMERGE stops it running and unmerges all rmap_items, |
1853 | * breaking COW to free the unswappable pages_shared (but leaves | 1842 | * breaking COW to free the pages_shared (but leaves mm_slots |
1854 | * mm_slots on the list for when ksmd may be set running again). | 1843 | * on the list for when ksmd may be set running again). |
1855 | */ | 1844 | */ |
1856 | 1845 | ||
1857 | mutex_lock(&ksm_thread_mutex); | 1846 | mutex_lock(&ksm_thread_mutex); |
@@ -1876,29 +1865,6 @@ static ssize_t run_store(struct kobject *kobj, struct kobj_attribute *attr, | |||
1876 | } | 1865 | } |
1877 | KSM_ATTR(run); | 1866 | KSM_ATTR(run); |
1878 | 1867 | ||
1879 | static ssize_t max_kernel_pages_store(struct kobject *kobj, | ||
1880 | struct kobj_attribute *attr, | ||
1881 | const char *buf, size_t count) | ||
1882 | { | ||
1883 | int err; | ||
1884 | unsigned long nr_pages; | ||
1885 | |||
1886 | err = strict_strtoul(buf, 10, &nr_pages); | ||
1887 | if (err) | ||
1888 | return -EINVAL; | ||
1889 | |||
1890 | ksm_max_kernel_pages = nr_pages; | ||
1891 | |||
1892 | return count; | ||
1893 | } | ||
1894 | |||
1895 | static ssize_t max_kernel_pages_show(struct kobject *kobj, | ||
1896 | struct kobj_attribute *attr, char *buf) | ||
1897 | { | ||
1898 | return sprintf(buf, "%lu\n", ksm_max_kernel_pages); | ||
1899 | } | ||
1900 | KSM_ATTR(max_kernel_pages); | ||
1901 | |||
1902 | static ssize_t pages_shared_show(struct kobject *kobj, | 1868 | static ssize_t pages_shared_show(struct kobject *kobj, |
1903 | struct kobj_attribute *attr, char *buf) | 1869 | struct kobj_attribute *attr, char *buf) |
1904 | { | 1870 | { |
@@ -1948,7 +1914,6 @@ static struct attribute *ksm_attrs[] = { | |||
1948 | &sleep_millisecs_attr.attr, | 1914 | &sleep_millisecs_attr.attr, |
1949 | &pages_to_scan_attr.attr, | 1915 | &pages_to_scan_attr.attr, |
1950 | &run_attr.attr, | 1916 | &run_attr.attr, |
1951 | &max_kernel_pages_attr.attr, | ||
1952 | &pages_shared_attr.attr, | 1917 | &pages_shared_attr.attr, |
1953 | &pages_sharing_attr.attr, | 1918 | &pages_sharing_attr.attr, |
1954 | &pages_unshared_attr.attr, | 1919 | &pages_unshared_attr.attr, |
@@ -1968,8 +1933,6 @@ static int __init ksm_init(void) | |||
1968 | struct task_struct *ksm_thread; | 1933 | struct task_struct *ksm_thread; |
1969 | int err; | 1934 | int err; |
1970 | 1935 | ||
1971 | ksm_max_kernel_pages = totalram_pages / 4; | ||
1972 | |||
1973 | err = ksm_slab_init(); | 1936 | err = ksm_slab_init(); |
1974 | if (err) | 1937 | if (err) |
1975 | goto out; | 1938 | goto out; |