• Bharata B Rao's avatar
    powerpc/numa: Fix multiple bugs in memory_hotplug_max() · 45b64ee6
    Bharata B Rao authored
    memory_hotplug_max() uses hot_add_drconf_memory_max() to get maxmimum
    addressable memory by referring to ibm,dyanamic-memory property. There
    are three problems with the current approach:
    
    1 hot_add_drconf_memory_max() assumes that ibm,dynamic-memory includes
      all the LMBs of the guest, but that is not true for PowerKVM which
      populates only DR LMBs (LMBs that can be hotplugged/removed) in that
      property.
    2 hot_add_drconf_memory_max() multiplies lmb-size with lmb-count to arrive
      at the max possible address. Since ibm,dynamic-memory doesn't include
      RMA LMBs, the address thus obtained will be less than the actual max
      address. For example, if max possible memory size is 32G, with lmb-size
      of 256MB there can be 127 LMBs in ibm,dynamic-memory (1 LMB for RMA
      which won't be present here).  hot_add_drconf_memory_max() would then
      return the max addressable memory as 127 * 256MB = 31.75GB, the max
      address should have been 32G which is what ibm,lrdr-capacity shows.
    3 In PowerKVM, there can be a gap between the end of boot time RAM and
      beginning of hotplug RAM area. So just multiplying lmb-count with
      lmb-size will not provide the correct max possible address for PowerKVM.
    
    This patch fixes 1 by using ibm,lrdr-capacity property to return the max
    addressable memory whenever the property is present. Then it fixes 2 & 3
    by fetching the address of the last LMB in ibm,dynamic-memory property.
    
    Fixes: cd34206e ("powerpc: Add memory_hotplug_max()")
    Signed-off-by: default avatarBharata B Rao <bharata@linux.vnet.ibm.com>
    Reviewed-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
    Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
    45b64ee6
numa.c 39.5 KB