|
9 | 9 | #include <linux/init.h> |
10 | 10 | #include <linux/kobject.h> |
11 | 11 | #include <linux/export.h> |
| 12 | +#include <linux/memory.h> |
| 13 | +#include <linux/notifier.h> |
12 | 14 | #include "internal.h" |
13 | 15 |
|
14 | 16 | #ifdef CONFIG_DEBUG_MEMORY_INIT |
@@ -147,6 +149,51 @@ early_param("mminit_loglevel", set_mminit_loglevel); |
147 | 149 | struct kobject *mm_kobj; |
148 | 150 | EXPORT_SYMBOL_GPL(mm_kobj); |
149 | 151 |
|
| 152 | +#ifdef CONFIG_SMP |
| 153 | +s32 vm_committed_as_batch = 32; |
| 154 | + |
| 155 | +static void __meminit mm_compute_batch(void) |
| 156 | +{ |
| 157 | + u64 memsized_batch; |
| 158 | + s32 nr = num_present_cpus(); |
| 159 | + s32 batch = max_t(s32, nr*2, 32); |
| 160 | + |
| 161 | + /* batch size set to 0.4% of (total memory/#cpus), or max int32 */ |
| 162 | + memsized_batch = min_t(u64, (totalram_pages/nr)/256, 0x7fffffff); |
| 163 | + |
| 164 | + vm_committed_as_batch = max_t(s32, memsized_batch, batch); |
| 165 | +} |
| 166 | + |
| 167 | +static int __meminit mm_compute_batch_notifier(struct notifier_block *self, |
| 168 | + unsigned long action, void *arg) |
| 169 | +{ |
| 170 | + switch (action) { |
| 171 | + case MEM_ONLINE: |
| 172 | + case MEM_OFFLINE: |
| 173 | + mm_compute_batch(); |
| 174 | + default: |
| 175 | + break; |
| 176 | + } |
| 177 | + return NOTIFY_OK; |
| 178 | +} |
| 179 | + |
| 180 | +static struct notifier_block compute_batch_nb __meminitdata = { |
| 181 | + .notifier_call = mm_compute_batch_notifier, |
| 182 | + .priority = IPC_CALLBACK_PRI, /* use lowest priority */ |
| 183 | +}; |
| 184 | + |
| 185 | +static int __init mm_compute_batch_init(void) |
| 186 | +{ |
| 187 | + mm_compute_batch(); |
| 188 | + register_hotmemory_notifier(&compute_batch_nb); |
| 189 | + |
| 190 | + return 0; |
| 191 | +} |
| 192 | + |
| 193 | +__initcall(mm_compute_batch_init); |
| 194 | + |
| 195 | +#endif |
| 196 | + |
150 | 197 | static int __init mm_sysfs_init(void) |
151 | 198 | { |
152 | 199 | mm_kobj = kobject_create_and_add("mm", kernel_kobj); |
|
0 commit comments