[PATCH 0/3] x86/platform/UV: Update Memory Block Size Setting

From: mike.travis
Date: Fri May 25 2018 - 07:02:19 EST



Update support for the UV kernel to accommodate Intel BIOS changes in
NVDIMM alignment, which caused UV BIOS to align the memory boundaries
on different blocks than the previous UV standard of 2GB.

Background: Since 2009 the UV arch dependent support has used 2GB as the
memory block size mainly to reduce the number of physical memory blocks
when a 16TB memory capable machine was introduced. This significantly
reduced the time to initialize memory during system startup, and
has worked fine until Intel added PMEM NVDIMM's to the architecture.
This has caused the alignment boundary to be reduced to whatever is
needed to accommodate these new devices.

There are no other changes suggested by this patch set. Basically the
previous strict boundary of 2GB has been relaxed to allow the arch
dependent code to adjust this memory block size depending on the
system requirements of the running environment.

* Patch 1
Add a function for any arch dependent call to "adjust" this fixed
memory block size.

* Patch 2
Add a function to check what the minimum memory block size that can
be used to accommodate where BIOS has set the boundaries for all of
memory placement within node ranges.

* Patch 3
Add a UV specific kernel arg to adjust for other memory block size
adjustments that may be required with future new DIMM restrictions.
Note that it can be raised (to 64GB) as well as lowered. This should
allow potential testing when the number of physical address bits are
raised from the current 46 bit limit to 52 bits.

Note that an option I did consider was to make Patch 3 a more generic
function for all arches to use (IOW, with or without CONFIG_X86_UV set).
Opinions welcome about this.

--