pseries: accelerate drmem and simplify hotplug with xarrays

From: Scott Cheloha
Date: Fri Feb 21 2020 - 12:30:59 EST

This patch series introduces two xarrays of LMBs in an effort to speed
up the drmem code and simplify the hotplug code on pseries machines.

The first patch introduces an xarray of LMBs indexed by physical
address. xa_load() is then used to accelerate LMB lookup during
memory_add_physaddr_to_nid(). The interface is used during boot,
in drmem_init(), and memory hot-add, in dlpar_add_lmb(), on pseries
machines. Its linear LMB search is a serious bottleneck on larger
machines that xa_load() flattens nicely as shown in the before/after

The second patch introduces a second xarray of LMBs, this one
indexed by DRC index. The xarray API is leveraged to replace
the custom LMB search/iteration/marking code currently used in
the pseries memory hotplug module. The result is cleaner and,
again thanks to xa_load(), faster.

v1: One big patch.

v2 changes:
- Split up the big patch from v1 into a series.
- Provide a more dramatic example in patch 1/2 to emphasize the
linear search bottleneck in memory_add_physaddr_to_nid().
- Expand the use of the xarray API in patch 2/2 to replace more
custom code.