Blame view

Documentation/memory-hotplug.txt 17.1 KB
6867c9310   Yasunori Goto   Memory hotplug do...
1
2
3
  ==============
  Memory Hotplug
  ==============
10020ca24   Yasunori Goto   memory hotplug: d...
4
5
  Created:					Jul 28 2007
  Add description of notifier of memory hotplug	Oct 11 2007
6867c9310   Yasunori Goto   Memory hotplug do...
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
  
  This document is about memory hotplug including how-to-use and current status.
  Because Memory Hotplug is still under development, contents of this text will
  be changed often.
  
  1. Introduction
    1.1 purpose of memory hotplug
    1.2. Phases of memory hotplug
    1.3. Unit of Memory online/offline operation
  2. Kernel Configuration
  3. sysfs files for memory hotplug
  4. Physical memory hot-add phase
    4.1 Hardware(Firmware) Support
    4.2 Notify memory hot-add event by hand
  5. Logical Memory hot-add phase
    5.1. State of memory
    5.2. How to online memory
  6. Logical memory remove
    6.1 Memory offline and ZONE_MOVABLE
    6.2. How to offline memory
  7. Physical memory remove
10020ca24   Yasunori Goto   memory hotplug: d...
27
28
  8. Memory hotplug event notifier
  9. Future Work List
6867c9310   Yasunori Goto   Memory hotplug do...
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
  
  Note(1): x86_64's has special implementation for memory hotplug.
           This text does not describe it.
  Note(2): This text assumes that sysfs is mounted at /sys.
  
  
  ---------------
  1. Introduction
  ---------------
  
  1.1 purpose of memory hotplug
  ------------
  Memory Hotplug allows users to increase/decrease the amount of memory.
  Generally, there are two purposes.
  
  (A) For changing the amount of memory.
      This is to allow a feature like capacity on demand.
  (B) For installing/removing DIMMs or NUMA-nodes physically.
      This is to exchange DIMMs/NUMA-nodes, reduce power consumption, etc.
  
  (A) is required by highly virtualized environments and (B) is required by
  hardware which supports memory power management.
  
  Linux memory hotplug is designed for both purpose.
  
  
  1.2. Phases of memory hotplug
  ---------------
  There are 2 phases in Memory Hotplug.
    1) Physical Memory Hotplug phase
    2) Logical Memory Hotplug phase.
  
  The First phase is to communicate hardware/firmware and make/erase
  environment for hotplugged memory. Basically, this phase is necessary
  for the purpose (B), but this is good phase for communication between
  highly virtualized environments too.
  
  When memory is hotplugged, the kernel recognizes new memory, makes new memory
  management tables, and makes sysfs files for new memory's operation.
  
  If firmware supports notification of connection of new memory to OS,
  this phase is triggered automatically. ACPI can notify this event. If not,
  "probe" operation by system administration is used instead.
  (see Section 4.).
  
  Logical Memory Hotplug phase is to change memory state into
19f594600   Matt LaPlante   trivial: Miscella...
75
  available/unavailable for users. Amount of memory from user's view is
6867c9310   Yasunori Goto   Memory hotplug do...
76
77
78
79
  changed by this phase. The kernel makes all memory in it as free pages
  when a memory range is available.
  
  In this document, this phase is described as online/offline.
19f594600   Matt LaPlante   trivial: Miscella...
80
  Logical Memory Hotplug phase is triggered by write of sysfs file by system
6867c9310   Yasunori Goto   Memory hotplug do...
81
82
83
84
85
86
87
88
  administrator. For the hot-add case, it must be executed after Physical Hotplug
  phase by hand.
  (However, if you writes udev's hotplug scripts for memory hotplug, these
   phases can be execute in seamless way.)
  
  
  1.3. Unit of Memory online/offline operation
  ------------
56a3c655a   Li Zhong   memory-hotplug: u...
89
90
91
92
  Memory hotplug uses SPARSEMEM memory model which allows memory to be divided
  into chunks of the same size. These chunks are called "sections". The size of
  a memory section is architecture dependent. For example, power uses 16MiB, ia64
  uses 1GiB.
6867c9310   Yasunori Goto   Memory hotplug do...
93

56a3c655a   Li Zhong   memory-hotplug: u...
94
95
96
97
98
99
100
  Memory sections are combined into chunks referred to as "memory blocks". The
  size of a memory block is architecture dependent and represents the logical
  unit upon which memory online/offline operations are to be performed. The
  default size of a memory block is the same as memory section size unless an
  architecture specifies otherwise. (see Section 3.)
  
  To determine the size (in bytes) of a memory block please read this file:
6867c9310   Yasunori Goto   Memory hotplug do...
101
102
  
  /sys/devices/system/memory/block_size_bytes
6867c9310   Yasunori Goto   Memory hotplug do...
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
  
  -----------------------
  2. Kernel Configuration
  -----------------------
  To use memory hotplug feature, kernel must be compiled with following
  config options.
  
  - For all memory hotplug
      Memory model -> Sparse Memory  (CONFIG_SPARSEMEM)
      Allow for memory hot-add       (CONFIG_MEMORY_HOTPLUG)
  
  - To enable memory removal, the followings are also necessary
      Allow for memory hot remove    (CONFIG_MEMORY_HOTREMOVE)
      Page Migration                 (CONFIG_MIGRATION)
  
  - For ACPI memory hotplug, the followings are also necessary
      Memory hotplug (under ACPI Support menu) (CONFIG_ACPI_HOTPLUG_MEMORY)
      This option can be kernel module.
  
  - As a related configuration, if your box has a feature of NUMA-node hotplug
    via ACPI, then this option is necessary too.
      ACPI0004,PNP0A05 and PNP0A06 Container Driver (under ACPI Support menu)
      (CONFIG_ACPI_CONTAINER).
      This option can be kernel module too.
56a3c655a   Li Zhong   memory-hotplug: u...
127

6867c9310   Yasunori Goto   Memory hotplug do...
128
  --------------------------------
56a3c655a   Li Zhong   memory-hotplug: u...
129
  3 sysfs files for memory hotplug
6867c9310   Yasunori Goto   Memory hotplug do...
130
  --------------------------------
56a3c655a   Li Zhong   memory-hotplug: u...
131
132
  All memory blocks have their device information in sysfs.  Each memory block
  is described under /sys/devices/system/memory as
6867c9310   Yasunori Goto   Memory hotplug do...
133
134
  
  /sys/devices/system/memory/memoryXXX
56a3c655a   Li Zhong   memory-hotplug: u...
135
  (XXX is the memory block id.)
6867c9310   Yasunori Goto   Memory hotplug do...
136

56a3c655a   Li Zhong   memory-hotplug: u...
137
  For the memory block covered by the sysfs directory.  It is expected that all
0c2c99b1b   Nathan Fontenot   memory hotplug: A...
138
139
140
141
  memory sections in this range are present and no memory holes exist in the
  range. Currently there is no way to determine if there is a memory hole, but
  the existence of one should not affect the hotplug capabilities of the memory
  block.
6867c9310   Yasunori Goto   Memory hotplug do...
142

56a3c655a   Li Zhong   memory-hotplug: u...
143
  For example, assume 1GiB memory block size. A device for a memory starting at
6867c9310   Yasunori Goto   Memory hotplug do...
144
145
146
  0x100000000 is /sys/device/system/memory/memory4
  (0x100000000 / 1Gib = 4)
  This device covers address range [0x100000000 ... 0x140000000)
824333805   Sheng Yong   mem-hotplug: fix ...
147
  Under each memory block, you can see 5 files:
6867c9310   Yasunori Goto   Memory hotplug do...
148

56a3c655a   Li Zhong   memory-hotplug: u...
149
  /sys/devices/system/memory/memoryXXX/phys_index
6867c9310   Yasunori Goto   Memory hotplug do...
150
151
  /sys/devices/system/memory/memoryXXX/phys_device
  /sys/devices/system/memory/memoryXXX/state
c04fc586c   Gary Hade   mm: show node to ...
152
  /sys/devices/system/memory/memoryXXX/removable
ed2f24009   Zhang Zhen   memory-hotplug: a...
153
  /sys/devices/system/memory/memoryXXX/valid_zones
6867c9310   Yasunori Goto   Memory hotplug do...
154

56a3c655a   Li Zhong   memory-hotplug: u...
155
  'phys_index'      : read-only and contains memory block id, same as XXX.
0c2c99b1b   Nathan Fontenot   memory hotplug: A...
156
157
  'state'           : read-write
                      at read:  contains online/offline state of memory.
511c2aba8   Lai Jiangshan   mm, memory-hotplu...
158
159
                      at write: user can specify "online_kernel",
                      "online_movable", "online", "offline" command
59e68a181   Xishi Qiu   mm/hotplug: fix a...
160
                      which will be performed on all sections in the block.
0c2c99b1b   Nathan Fontenot   memory hotplug: A...
161
162
163
164
165
166
167
168
  'phys_device'     : read-only: designed to show the name of physical memory
                      device.  This is not well implemented now.
  'removable'       : read-only: contains an integer value indicating
                      whether the memory block is removable or not
                      removable.  A value of 1 indicates that the memory
                      block is removable and a value of 0 indicates that
                      it is not removable. A memory block is removable only if
                      every section in the block is removable.
ed2f24009   Zhang Zhen   memory-hotplug: a...
169
170
171
172
173
174
175
176
177
  'valid_zones'     : read-only: designed to show which zones this memory block
  		    can be onlined to.
  		    The first column shows it's default zone.
  		    "memory6/valid_zones: Normal Movable" shows this memoryblock
  		    can be onlined to ZONE_NORMAL by default and to ZONE_MOVABLE
  		    by online_movable.
  		    "memory7/valid_zones: Movable Normal" shows this memoryblock
  		    can be onlined to ZONE_MOVABLE by default and to ZONE_NORMAL
  		    by online_kernel.
6867c9310   Yasunori Goto   Memory hotplug do...
178
179
180
  
  NOTE:
    These directories/files appear after physical memory hotplug phase.
dee5d0d51   Alex Chiang   mm: add numa node...
181
182
183
184
  If CONFIG_NUMA is enabled the memoryXXX/ directories can also be accessed
  via symbolic links located in the /sys/devices/system/node/node* directories.
  
  For example:
c04fc586c   Gary Hade   mm: show node to ...
185
  /sys/devices/system/node/node0/memory9 -> ../../memory/memory9
6867c9310   Yasunori Goto   Memory hotplug do...
186

dee5d0d51   Alex Chiang   mm: add numa node...
187
188
  A backlink will also be created:
  /sys/devices/system/memory/memory9/node0 -> ../../node/node0
56a3c655a   Li Zhong   memory-hotplug: u...
189

6867c9310   Yasunori Goto   Memory hotplug do...
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
  --------------------------------
  4. Physical memory hot-add phase
  --------------------------------
  
  4.1 Hardware(Firmware) Support
  ------------
  On x86_64/ia64 platform, memory hotplug by ACPI is supported.
  
  In general, the firmware (ACPI) which supports memory hotplug defines
  memory class object of _HID "PNP0C80". When a notify is asserted to PNP0C80,
  Linux's ACPI handler does hot-add memory to the system and calls a hotplug udev
  script. This will be done automatically.
  
  But scripts for memory hotplug are not contained in generic udev package(now).
  You may have to write it by yourself or online/offline memory by hand.
  Please see "How to online memory", "How to offline memory" in this text.
  
  If firmware supports NUMA-node hotplug, and defines an object _HID "ACPI0004",
  "PNP0A05", or "PNP0A06", notification is asserted to it, and ACPI handler
  calls hotplug code for all of objects which are defined in it.
  If memory device is found, memory hotplug code will be called.
  
  
  4.2 Notify memory hot-add event by hand
  ------------
7cdb0d25b   David Rientjes   mm, hotplug: prob...
215
216
217
218
219
220
  On some architectures, the firmware may not notify the kernel of a memory
  hotplug event.  Therefore, the memory "probe" interface is supported to
  explicitly notify the kernel.  This interface depends on
  CONFIG_ARCH_MEMORY_PROBE and can be configured on powerpc, sh, and x86
  if hotplug is supported, although for x86 this should be handled by ACPI
  notification.
6867c9310   Yasunori Goto   Memory hotplug do...
221
222
223
224
225
226
227
  
  Probe interface is located at
  /sys/devices/system/memory/probe
  
  You can tell the physical address of new memory to the kernel by
  
  % echo start_address_of_new_memory > /sys/devices/system/memory/probe
56a3c655a   Li Zhong   memory-hotplug: u...
228
229
230
231
  Then, [start_address_of_new_memory, start_address_of_new_memory +
  memory_block_size] memory range is hot-added. In this case, hotplug script is
  not called (in current implementation). You'll have to online memory by
  yourself.  Please see "How to online memory" in this text.
6867c9310   Yasunori Goto   Memory hotplug do...
232
233
234
235
236
237
238
239
  
  
  ------------------------------
  5. Logical Memory hot-add phase
  ------------------------------
  
  5.1. State of memory
  ------------
56a3c655a   Li Zhong   memory-hotplug: u...
240
  To see (online/offline) state of a memory block, read 'state' file.
6867c9310   Yasunori Goto   Memory hotplug do...
241
242
  
  % cat /sys/device/system/memory/memoryXXX/state
56a3c655a   Li Zhong   memory-hotplug: u...
243
244
  If the memory block is online, you'll read "online".
  If the memory block is offline, you'll read "offline".
6867c9310   Yasunori Goto   Memory hotplug do...
245
246
247
248
249
  
  
  5.2. How to online memory
  ------------
  Even if the memory is hot-added, it is not at ready-to-use state.
56a3c655a   Li Zhong   memory-hotplug: u...
250
  For using newly added memory, you have to "online" the memory block.
6867c9310   Yasunori Goto   Memory hotplug do...
251

56a3c655a   Li Zhong   memory-hotplug: u...
252
  For onlining, you have to write "online" to the memory block's state file as:
6867c9310   Yasunori Goto   Memory hotplug do...
253
254
  
  % echo online > /sys/devices/system/memory/memoryXXX/state
56a3c655a   Li Zhong   memory-hotplug: u...
255
256
  This onlining will not change the ZONE type of the target memory block,
  If the memory block is in ZONE_NORMAL, you can change it to ZONE_MOVABLE:
511c2aba8   Lai Jiangshan   mm, memory-hotplu...
257
258
  
  % echo online_movable > /sys/devices/system/memory/memoryXXX/state
56a3c655a   Li Zhong   memory-hotplug: u...
259
  (NOTE: current limit: this memory block must be adjacent to ZONE_MOVABLE)
511c2aba8   Lai Jiangshan   mm, memory-hotplu...
260

56a3c655a   Li Zhong   memory-hotplug: u...
261
  And if the memory block is in ZONE_MOVABLE, you can change it to ZONE_NORMAL:
511c2aba8   Lai Jiangshan   mm, memory-hotplu...
262
263
  
  % echo online_kernel > /sys/devices/system/memory/memoryXXX/state
56a3c655a   Li Zhong   memory-hotplug: u...
264
  (NOTE: current limit: this memory block must be adjacent to ZONE_NORMAL)
511c2aba8   Lai Jiangshan   mm, memory-hotplu...
265

56a3c655a   Li Zhong   memory-hotplug: u...
266
  After this, memory block XXX's state will be 'online' and the amount of
6867c9310   Yasunori Goto   Memory hotplug do...
267
268
269
270
271
272
273
274
275
276
277
278
279
280
  available memory will be increased.
  
  Currently, newly added memory is added as ZONE_NORMAL (for powerpc, ZONE_DMA).
  This may be changed in future.
  
  
  
  ------------------------
  6. Logical memory remove
  ------------------------
  
  6.1 Memory offline and ZONE_MOVABLE
  ------------
  Memory offlining is more complicated than memory online. Because memory offline
56a3c655a   Li Zhong   memory-hotplug: u...
281
282
  has to make the whole memory block be unused, memory offline can fail if
  the memory block includes memory which cannot be freed.
6867c9310   Yasunori Goto   Memory hotplug do...
283
284
  
  In general, memory offline can use 2 techniques.
56a3c655a   Li Zhong   memory-hotplug: u...
285
286
  (1) reclaim and free all memory in the memory block.
  (2) migrate all pages in the memory block.
6867c9310   Yasunori Goto   Memory hotplug do...
287
288
  
  In the current implementation, Linux's memory offline uses method (2), freeing
56a3c655a   Li Zhong   memory-hotplug: u...
289
  all  pages in the memory block by page migration. But not all pages are
6867c9310   Yasunori Goto   Memory hotplug do...
290
  migratable. Under current Linux, migratable pages are anonymous pages and
56a3c655a   Li Zhong   memory-hotplug: u...
291
292
  page caches. For offlining a memory block by migration, the kernel has to
  guarantee that the memory block contains only migratable pages.
6867c9310   Yasunori Goto   Memory hotplug do...
293

56a3c655a   Li Zhong   memory-hotplug: u...
294
295
  Now, a boot option for making a memory block which consists of migratable pages
  is supported. By specifying "kernelcore=" or "movablecore=" boot option, you can
6867c9310   Yasunori Goto   Memory hotplug do...
296
297
298
299
300
301
302
303
304
305
306
307
308
  create ZONE_MOVABLE...a zone which is just used for movable pages.
  (See also Documentation/kernel-parameters.txt)
  
  Assume the system has "TOTAL" amount of memory at boot time, this boot option
  creates ZONE_MOVABLE as following.
  
  1) When kernelcore=YYYY boot option is used,
    Size of memory not for movable pages (not for offline) is YYYY.
    Size of memory for movable pages (for offline) is TOTAL-YYYY.
  
  2) When movablecore=ZZZZ boot option is used,
    Size of memory not for movable pages (not for offline) is TOTAL - ZZZZ.
    Size of memory for movable pages (for offline) is ZZZZ.
56a3c655a   Li Zhong   memory-hotplug: u...
309
  Note: Unfortunately, there is no information to show which memory block belongs
6867c9310   Yasunori Goto   Memory hotplug do...
310
311
312
313
314
  to ZONE_MOVABLE. This is TBD.
  
  
  6.2. How to offline memory
  ------------
56a3c655a   Li Zhong   memory-hotplug: u...
315
316
  You can offline a memory block by using the same sysfs interface that was used
  in memory onlining.
6867c9310   Yasunori Goto   Memory hotplug do...
317
318
  
  % echo offline > /sys/devices/system/memory/memoryXXX/state
56a3c655a   Li Zhong   memory-hotplug: u...
319
  If offline succeeds, the state of the memory block is changed to be "offline".
6867c9310   Yasunori Goto   Memory hotplug do...
320
  If it fails, some error core (like -EBUSY) will be returned by the kernel.
56a3c655a   Li Zhong   memory-hotplug: u...
321
322
  Even if a memory block does not belong to ZONE_MOVABLE, you can try to offline
  it.  If it doesn't contain 'unmovable' memory, you'll get success.
6867c9310   Yasunori Goto   Memory hotplug do...
323

56a3c655a   Li Zhong   memory-hotplug: u...
324
325
326
327
328
  A memory block under ZONE_MOVABLE is considered to be able to be offlined
  easily.  But under some busy state, it may return -EBUSY. Even if a memory
  block cannot be offlined due to -EBUSY, you can retry offlining it and may be
  able to offline it (or not). (For example, a page is referred to by some kernel
  internal call and released soon.)
6867c9310   Yasunori Goto   Memory hotplug do...
329
330
331
332
333
334
335
336
337
338
339
340
341
342
  
  Consideration:
  Memory hotplug's design direction is to make the possibility of memory offlining
  higher and to guarantee unplugging memory under any situation. But it needs
  more work. Returning -EBUSY under some situation may be good because the user
  can decide to retry more or not by himself. Currently, memory offlining code
  does some amount of retry with 120 seconds timeout.
  
  -------------------------
  7. Physical memory remove
  -------------------------
  Need more implementation yet....
   - Notification completion of remove works by OS to firmware.
   - Guard from remove if not yet.
10020ca24   Yasunori Goto   memory hotplug: d...
343
344
345
  --------------------------------
  8. Memory hotplug event notifier
  --------------------------------
433b89cfb   Heinrich Schuchardt   Doc/memory-hotplu...
346
  Hotplugging events are sent to a notification queue.
10020ca24   Yasunori Goto   memory hotplug: d...
347

433b89cfb   Heinrich Schuchardt   Doc/memory-hotplu...
348
349
350
  There are six types of notification defined in include/linux/memory.h:
  
  MEM_GOING_ONLINE
10020ca24   Yasunori Goto   memory hotplug: d...
351
352
353
    Generated before new memory becomes available in order to be able to
    prepare subsystems to handle memory. The page allocator is still unable
    to allocate from the new memory.
433b89cfb   Heinrich Schuchardt   Doc/memory-hotplu...
354
  MEM_CANCEL_ONLINE
10020ca24   Yasunori Goto   memory hotplug: d...
355
    Generated if MEMORY_GOING_ONLINE fails.
433b89cfb   Heinrich Schuchardt   Doc/memory-hotplu...
356
  MEM_ONLINE
19f594600   Matt LaPlante   trivial: Miscella...
357
    Generated when memory has successfully brought online. The callback may
10020ca24   Yasunori Goto   memory hotplug: d...
358
    allocate pages from the new memory.
433b89cfb   Heinrich Schuchardt   Doc/memory-hotplu...
359
  MEM_GOING_OFFLINE
10020ca24   Yasunori Goto   memory hotplug: d...
360
361
362
    Generated to begin the process of offlining memory. Allocations are no
    longer possible from the memory but some of the memory to be offlined
    is still in use. The callback can be used to free memory known to a
56a3c655a   Li Zhong   memory-hotplug: u...
363
    subsystem from the indicated memory block.
10020ca24   Yasunori Goto   memory hotplug: d...
364

433b89cfb   Heinrich Schuchardt   Doc/memory-hotplu...
365
  MEM_CANCEL_OFFLINE
10020ca24   Yasunori Goto   memory hotplug: d...
366
    Generated if MEMORY_GOING_OFFLINE fails. Memory is available again from
56a3c655a   Li Zhong   memory-hotplug: u...
367
    the memory block that we attempted to offline.
10020ca24   Yasunori Goto   memory hotplug: d...
368

433b89cfb   Heinrich Schuchardt   Doc/memory-hotplu...
369
  MEM_OFFLINE
10020ca24   Yasunori Goto   memory hotplug: d...
370
    Generated after offlining memory is complete.
433b89cfb   Heinrich Schuchardt   Doc/memory-hotplu...
371
  A callback routine can be registered by calling
10020ca24   Yasunori Goto   memory hotplug: d...
372
    hotplug_memory_notifier(callback_func, priority)
433b89cfb   Heinrich Schuchardt   Doc/memory-hotplu...
373
374
375
376
377
378
379
380
381
382
383
384
  Callback functions with higher values of priority are called before callback
  functions with lower values.
  
  A callback function must have the following prototype:
  
    int callback_func(
      struct notifier_block *self, unsigned long action, void *arg);
  
  The first argument of the callback function (self) is a pointer to the block
  of the notifier chain that points to the callback function itself.
  The second argument (action) is one of the event types described above.
  The third argument (arg) passes a pointer of struct memory_notify.
10020ca24   Yasunori Goto   memory hotplug: d...
385
386
387
388
  
  struct memory_notify {
         unsigned long start_pfn;
         unsigned long nr_pages;
d9713679d   Lai Jiangshan   memory_hotplug: f...
389
         int status_change_nid_normal;
6715ddf94   Lai Jiangshan   hotplug: update n...
390
         int status_change_nid_high;
19f594600   Matt LaPlante   trivial: Miscella...
391
         int status_change_nid;
10020ca24   Yasunori Goto   memory hotplug: d...
392
393
394
395
  }
  
  start_pfn is start_pfn of online/offline memory.
  nr_pages is # of pages of online/offline memory.
d9713679d   Lai Jiangshan   memory_hotplug: f...
396
397
  status_change_nid_normal is set node id when N_NORMAL_MEMORY of nodemask
  is (will be) set/clear, if this is -1, then nodemask status is not changed.
6715ddf94   Lai Jiangshan   hotplug: update n...
398
399
400
  status_change_nid_high is set node id when N_HIGH_MEMORY of nodemask
  is (will be) set/clear, if this is -1, then nodemask status is not changed.
  status_change_nid is set node id when N_MEMORY of nodemask is (will be)
10020ca24   Yasunori Goto   memory hotplug: d...
401
402
  set/clear. It means a new(memoryless) node gets new memory by online and a
  node loses all memory. If this is -1, then nodemask status is not changed.
d9713679d   Lai Jiangshan   memory_hotplug: f...
403
  If status_changed_nid* >= 0, callback should create/discard structures for the
10020ca24   Yasunori Goto   memory hotplug: d...
404
  node if necessary.
433b89cfb   Heinrich Schuchardt   Doc/memory-hotplu...
405
406
407
408
409
410
411
412
413
414
415
  The callback routine shall return one of the values
  NOTIFY_DONE, NOTIFY_OK, NOTIFY_BAD, NOTIFY_STOP
  defined in include/linux/notifier.h
  
  NOTIFY_DONE and NOTIFY_OK have no effect on the further processing.
  
  NOTIFY_BAD is used as response to the MEM_GOING_ONLINE, MEM_GOING_OFFLINE,
  MEM_ONLINE, or MEM_OFFLINE action to cancel hotplugging. It stops
  further processing of the notification queue.
  
  NOTIFY_STOP stops further processing of the notification queue.
6867c9310   Yasunori Goto   Memory hotplug do...
416
  --------------
10020ca24   Yasunori Goto   memory hotplug: d...
417
  9. Future Work
6867c9310   Yasunori Goto   Memory hotplug do...
418
419
420
  --------------
    - allowing memory hot-add to ZONE_MOVABLE. maybe we need some switch like
      sysctl or new control file.
56a3c655a   Li Zhong   memory-hotplug: u...
421
    - showing memory block and physical device relationship.
6867c9310   Yasunori Goto   Memory hotplug do...
422
423
424
425
    - test and make it better memory offlining.
    - support HugeTLB page migration and offlining.
    - memmap removing at memory offline.
    - physical remove memory.