qemu-e2k/hw
Bharata B Rao d0e5a8f293 spapr: Ensure all LMBs are represented in ibm,dynamic-memory
Memory hotplug can fail for some combinations of RAM and maxmem when
DDW is enabled in the presence of devices like nec-usb-xhci. DDW depends
on maximum addressable memory returned by guest and this value is currently
being calculated wrongly by the guest kernel routine memory_hotplug_max().
While there is an attempt to fix the guest kernel, this patch works
around the problem within QEMU itself.

memory_hotplug_max() routine in the guest kernel arrives at max
addressable memory by multiplying lmb-size with the lmb-count obtained
from ibm,dynamic-memory property. There are two assumptions here:

- All LMBs are part of ibm,dynamic memory: This is not true for PowerKVM
  where only hot-pluggable LMBs are present in this property.
- The memory area comprising of RAM and hotplug region is contiguous: This
  needn't be true always for PowerKVM as there can be gap between
  boot time RAM and hotplug region.

To work around this guest kernel bug, ensure that ibm,dynamic-memory
has information about all the LMBs (RMA, boot-time LMBs, future
hotpluggable LMBs, and dummy LMBs to cover the gap between RAM and
hotpluggable region).

RMA is represented separately by memory@0 node. Hence mark RMA LMBs
and also the LMBs for the gap b/n RAM and hotpluggable region as
reserved and as having no valid DRC so that these LMBs are not considered
by the guest.

Signed-off-by: Bharata B Rao <bharata@linux.vnet.ibm.com>
Reviewed-by: Michael Roth <mdroth@linux.vnet.ibm.com>
Reviewed-by: Nathan Fontenot <nfont@linux.vnet.ibm.com>
Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
2016-06-14 13:20:01 +10:00
..
9pfs all: Remove unnecessary glib.h includes 2016-06-07 18:19:24 +03:00
acpi acpi: make bios_linker_loader_add_checksum() API offset based 2016-06-07 15:39:27 +03:00
alpha alpha: include cpu-qom.h in files that require AlphaCPU 2016-05-19 16:42:27 +02:00
arm vl: Eliminate usb_enabled() 2016-06-13 13:24:41 +02:00
audio audio: Use DIV_ROUND_UP 2016-06-07 18:19:25 +03:00
block trivial patches for 2016-06-07 2016-06-07 16:34:45 +01:00
bt bt: rewrite csrhci_write to avoid out-of-bounds writes 2016-05-29 09:11:11 +02:00
char hw/char: QOM'ify escc.c (fix) 2016-06-06 18:57:06 +02:00
core qdev: Clean up around properties 2016-06-07 18:19:23 +03:00
cpu explicitly include qom/cpu.h 2016-05-19 16:42:27 +02:00
cris hw/char: QOM'ify etraxfs_ser.c 2016-05-29 09:11:10 +02:00
display xen: Use DIV_ROUND_UP 2016-06-07 18:19:24 +03:00
dma hw: explicitly include qemu/log.h 2016-05-19 16:42:29 +02:00
gpio hw: clean up hw/hw.h includes 2016-05-19 16:42:30 +02:00
i2c i2c: add aspeed i2c controller 2016-06-06 16:59:29 +01:00
i386 vl: Eliminate usb_enabled() 2016-06-13 13:24:41 +02:00
ide macio: call dma_memory_unmap() at the end of each DMA transfer 2016-06-14 10:43:24 +10:00
input hw: explicitly include qemu/log.h 2016-05-19 16:42:29 +02:00
intc hw: Clean up includes 2016-06-07 18:19:23 +03:00
ipack ipack: Update e-mail address 2016-05-18 15:04:27 +03:00
ipmi hw/ipmi: fix spelling 2016-06-07 18:02:48 +03:00
isa ICH9: fix typo 2016-06-07 18:19:23 +03:00
lm32 hw/char: QOM'ify milkymist-uart.c 2016-05-29 09:11:10 +02:00
m68k
mem pc-dimm: introduce realize callback 2016-06-07 15:39:28 +03:00
microblaze hw/char: QOM'ify xilinx_uartlite model 2016-06-06 16:59:32 +01:00
mips mips: use MIPSCPU instead of CPUMIPSState 2016-05-19 16:42:27 +02:00
misc dbdma: use DMA memory interface for memory accesses 2016-06-07 10:17:45 +10:00
moxie
net rocker: Use DIV_ROUND_UP 2016-06-07 18:19:25 +03:00
nvram fw_cfg: follow CODING_STYLE 2016-06-07 18:19:23 +03:00
openrisc
pci pcie: Introduce function for DSN capability creation 2016-06-02 10:42:26 +08:00
pci-bridge
pci-host hw: explicitly include qemu/log.h 2016-05-19 16:42:29 +02:00
pcmcia
ppc spapr: Ensure all LMBs are represented in ibm,dynamic-memory 2016-06-14 13:20:01 +10:00
s390x s390x/virtio-ccw: fix spelling 2016-06-07 18:02:48 +03:00
scsi * max-ram-below-4g improvement (Gerd) 2016-06-08 14:45:28 +01:00
sd hw: explicitly include qemu/log.h 2016-05-19 16:42:29 +02:00
sh4 cpu: move exec-all.h inclusion out of cpu.h 2016-05-19 16:42:29 +02:00
smbios
sparc vl: Replace DT_NOGRAPHIC with machine option 2016-05-20 14:28:54 -03:00
sparc64
ssi hw: explicitly include qemu/log.h 2016-05-19 16:42:29 +02:00
timer hw: Clean up includes 2016-06-07 18:19:23 +03:00
tpm
tricore
unicore32
usb hw/usb/dev-network.c: Use ldl_le_p() and stl_le_p() 2016-06-13 13:18:51 +02:00
vfio vfio: Check that IOMMU MR translates to system address space 2016-05-26 11:12:09 -06:00
virtio -----BEGIN PGP SIGNATURE----- 2016-06-07 15:59:28 +01:00
watchdog nmi: remove x86 specific nmi handling 2016-05-23 16:53:46 +02:00
xen xen: write information about supported backends 2016-05-23 13:30:03 +02:00
xenpv xen: add pvUSB backend 2016-05-23 13:30:03 +02:00
xtensa replace muldiv64(a, b, c) by (uint64_t)a * b / c 2016-06-07 18:02:49 +03:00
Makefile.objs