|
@@ -1477,22 +1477,7 @@ static void hv_balloon_ensure_mr(HvBalloon *balloon)
|
|
balloon->mr = g_new0(MemoryRegion, 1);
|
|
balloon->mr = g_new0(MemoryRegion, 1);
|
|
memory_region_init(balloon->mr, OBJECT(balloon), TYPE_HV_BALLOON,
|
|
memory_region_init(balloon->mr, OBJECT(balloon), TYPE_HV_BALLOON,
|
|
memory_region_size(hostmem_mr));
|
|
memory_region_size(hostmem_mr));
|
|
-
|
|
|
|
- /*
|
|
|
|
- * The VM can indicate an alignment up to 32 GiB. Memory device core can
|
|
|
|
- * usually only handle/guarantee 1 GiB alignment. The user will have to
|
|
|
|
- * specify a larger maxmem eventually.
|
|
|
|
- *
|
|
|
|
- * The memory device core will warn the user in case maxmem might have to be
|
|
|
|
- * increased and will fail plugging the device if there is not sufficient
|
|
|
|
- * space after alignment.
|
|
|
|
- *
|
|
|
|
- * TODO: we could do the alignment ourselves in a slightly bigger region.
|
|
|
|
- * But this feels better, although the warning might be annoying. Maybe
|
|
|
|
- * we can optimize that in the future (e.g., with such a device on the
|
|
|
|
- * cmdline place/size the device memory region differently.
|
|
|
|
- */
|
|
|
|
- balloon->mr->align = MAX(32 * GiB, memory_region_get_alignment(hostmem_mr));
|
|
|
|
|
|
+ balloon->mr->align = memory_region_get_alignment(hostmem_mr);
|
|
}
|
|
}
|
|
|
|
|
|
static void hv_balloon_free_mr(HvBalloon *balloon)
|
|
static void hv_balloon_free_mr(HvBalloon *balloon)
|
|
@@ -1654,6 +1639,25 @@ static MemoryRegion *hv_balloon_md_get_memory_region(MemoryDeviceState *md,
|
|
return balloon->mr;
|
|
return balloon->mr;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static uint64_t hv_balloon_md_get_min_alignment(const MemoryDeviceState *md)
|
|
|
|
+{
|
|
|
|
+ /*
|
|
|
|
+ * The VM can indicate an alignment up to 32 GiB. Memory device core can
|
|
|
|
+ * usually only handle/guarantee 1 GiB alignment. The user will have to
|
|
|
|
+ * specify a larger maxmem eventually.
|
|
|
|
+ *
|
|
|
|
+ * The memory device core will warn the user in case maxmem might have to be
|
|
|
|
+ * increased and will fail plugging the device if there is not sufficient
|
|
|
|
+ * space after alignment.
|
|
|
|
+ *
|
|
|
|
+ * TODO: we could do the alignment ourselves in a slightly bigger region.
|
|
|
|
+ * But this feels better, although the warning might be annoying. Maybe
|
|
|
|
+ * we can optimize that in the future (e.g., with such a device on the
|
|
|
|
+ * cmdline place/size the device memory region differently.
|
|
|
|
+ */
|
|
|
|
+ return 32 * GiB;
|
|
|
|
+}
|
|
|
|
+
|
|
static void hv_balloon_md_fill_device_info(const MemoryDeviceState *md,
|
|
static void hv_balloon_md_fill_device_info(const MemoryDeviceState *md,
|
|
MemoryDeviceInfo *info)
|
|
MemoryDeviceInfo *info)
|
|
{
|
|
{
|
|
@@ -1766,5 +1770,6 @@ static void hv_balloon_class_init(ObjectClass *klass, void *data)
|
|
mdc->get_memory_region = hv_balloon_md_get_memory_region;
|
|
mdc->get_memory_region = hv_balloon_md_get_memory_region;
|
|
mdc->decide_memslots = hv_balloon_decide_memslots;
|
|
mdc->decide_memslots = hv_balloon_decide_memslots;
|
|
mdc->get_memslots = hv_balloon_get_memslots;
|
|
mdc->get_memslots = hv_balloon_get_memslots;
|
|
|
|
+ mdc->get_min_alignment = hv_balloon_md_get_min_alignment;
|
|
mdc->fill_device_info = hv_balloon_md_fill_device_info;
|
|
mdc->fill_device_info = hv_balloon_md_fill_device_info;
|
|
}
|
|
}
|