Documentation/core-api/memory-hotplug.rst

Source file repositories/reference/linux-study-clean/Documentation/core-api/memory-hotplug.rst

File Facts

System
Linux kernel
Corpus path
Documentation/core-api/memory-hotplug.rst
Extension
.rst
Size
7098 bytes
Lines
196
Domain
Support Tooling And Documentation
Bucket
Documentation
Inferred role
Support Tooling And Documentation: documentation
Status
atlas-only

Why This File Exists

Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.

Dependency Surface

Detected Declarations

Annotated Snippet

struct memory_notify {
		unsigned long start_pfn;
		unsigned long nr_pages;
	}

- start_pfn is start_pfn of online/offline memory.
- nr_pages is # of pages of online/offline memory.

It is possible to get notified for MEM_CANCEL_ONLINE without having been notified
for MEM_GOING_ONLINE, and the same applies to MEM_CANCEL_OFFLINE and
MEM_GOING_OFFLINE.
This can happen when a consumer fails, meaning we break the callchain and we
stop calling the remaining consumers of the notifier.
It is then important that users of memory_notify make no assumptions and get
prepared to handle such cases.

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.

Numa node notifier
------------------

There are six types of notification defined in ``include/linux/node.h``:

NODE_ADDING_FIRST_MEMORY
 Generated before memory becomes available to this node for the first time.

NODE_CANCEL_ADDING_FIRST_MEMORY
 Generated if NODE_ADDING_FIRST_MEMORY fails.

NODE_ADDED_FIRST_MEMORY
 Generated when memory has become available for this node for the first time.

NODE_REMOVING_LAST_MEMORY
 Generated when the last memory available to this node is about to be offlined.

NODE_CANCEL_REMOVING_LAST_MEMORY
 Generated when NODE_CANCEL_REMOVING_LAST_MEMORY fails.

NODE_REMOVED_LAST_MEMORY
 Generated when the last memory available to this node has been offlined.

A callback routine can be registered by calling::

  hotplug_node_notifier(callback_func, priority)

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 node_notify::

        struct node_notify {

Annotation

Implementation Notes