File:  [NetBSD Developer Wiki] / wikisrc / features / uvm_hotplug.mdwn
Revision 1.1: download - view: text, annotated - select for diffs
Thu Dec 29 16:54:37 2016 UTC (4 years, 6 months ago) by cherry
Branches: MAIN
CVS tags: HEAD
Add an FAQ about uvm_hotplug(9)

# [[!template id=man name=uvm_hotplug section=9]] port-masters' FAQ.

1. Why does it matter?

As a port maintainer any architecture that needs to use the virtual memory
sub-system of NetBSD aka uvm is affected by the
[[!template id=man name=uvm_hotplug section=9]] change.

Early boot code of every port is affected. Global variables:
struct vm_physseg vm_physmem;
int vm_nphysmem;
are no longer visible. They need to be replaced by appropriate
accessor calls in [[!template id=man name=uvm_hotplug section=9]]

These calls are documented as "Utility Functions" in the
[[!template id=man name=uvm_hotplug section=9]] manual.


The "switchover" CVS commit log is here:
[http://mail-index.netbsd.org/source-changes/2016/12/23/msg080110.html](http://mail-index.netbsd.org/source-changes/2016/12/23/msg080110.html)


2. What files may be affected?

In most of the architectures the "sys/arch/<arch_name>/<arch_name>/machdep.c"
and "sys/arch/<arch_name>/<arch_name>/pmap.c" if they exist are usually
affected.

But this may not be a exhaustive list. Any other files that deals with pmap and
stealing pages might also be affected.

3. What does it do ?

[[!template id=man name=uvm_hotplug section=9]] manages the previously exposed "vm_physmem" static array which
used to keep track of the memory segments.

In the current implementation, the array has been replaced with a
[[!template id=man name=rbtree section=3]] backing which makes the
data structure dynamic.

An array based implementation is also provided, for backwards
compatibility. This is the default implementation and does not provide
hot pluggability. It is also used without 'options UVM_HOTPLUG'
However the API itself is implementation agnostic.

4. Why is it needed?

With the [[!template id=man name=rbtree section=3]] backing
implementation, the list of physical pages 
in the system is no longer in a static array and can dynamically
expand or collapse, hence adding new pages to the freelist from newly
available RAM / physical memory (plug) or removing retired pages
(unplug) via taking them off the freelist and the old vm_physmem.

5. What should I do?

Review the changes to your port due to this new feature. The changes
may have been made without direct knowledge of your port architecture.

See if your port has hotpluggable hardware. If it does, write a driver
to use the [[!template id=man name=uvm_hotplug section=9]] api.

An example of [[!template id=man name=uvm_hotplug section=9]] api's
application can be found in
[[!template id=man name=balloon section=4]].

CVSweb for NetBSD wikisrc <wikimaster@NetBSD.org> software: FreeBSD-CVSweb