> Let's warn instead of bailing out - the worst thing that can happen is > that we'll fail hot/coldplug later. The user got warned, and this should > be rare. > > This will be necessary for memory devices with rather big (user-defined) > alignment requirements - say a virtio-mem device with a 2G block size - > which will become important, for example, when supporting vfio in the > future. > > Cc: "Michael S. Tsirkin" <m...@redhat.com> > Cc: Wei Yang <richardw.y...@linux.intel.com> > Cc: Dr. David Alan Gilbert <dgilb...@redhat.com> > Cc: Igor Mammedov <imamm...@redhat.com> > Cc: Pankaj Gupta <pankaj.gupta.li...@gmail.com> > Signed-off-by: David Hildenbrand <da...@redhat.com> > --- > hw/mem/memory-device.c | 9 +++++---- > 1 file changed, 5 insertions(+), 4 deletions(-) > > diff --git a/hw/mem/memory-device.c b/hw/mem/memory-device.c > index 4bc9cf0917..8a736f1a26 100644 > --- a/hw/mem/memory-device.c > +++ b/hw/mem/memory-device.c > @@ -119,9 +119,10 @@ static uint64_t memory_device_get_free_addr(MachineState > *ms, > > /* start of address space indicates the maximum alignment we expect */ > if (!QEMU_IS_ALIGNED(range_lob(&as), align)) { > - error_setg(errp, "the alignment (0x%" PRIx64 ") is not supported", > - align); > - return 0; > + warn_report("the alignment (0x%" PRIx64 ") exceeds the expected" > + " maximum alignment, memory will get fragmented and not" > + " all 'maxmem' might be usable for memory devices.", > + align); > } > > memory_device_check_addable(ms, size, &err); > @@ -151,7 +152,7 @@ static uint64_t memory_device_get_free_addr(MachineState > *ms, > return 0; > } > } else { > - if (range_init(&new, range_lob(&as), size)) { > + if (range_init(&new, QEMU_ALIGN_UP(range_lob(&as), align), size)) { > error_setg(errp, "can't add memory device, device too big"); > return 0; > }
Reviewed-by: Pankaj Gupta <pankaj.gupta.li...@gmail.com>