[PATCH v1 01/15] memory-device: Track the required memslots in DeviceMemoryState

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Let's track how many memslots are currently required by plugged memory
devices. We'll use this number to perform sanity checks next (soft limit
to warn the user).

Right now, each memory device consumes exactly one memslot, and the
number of required memslots matches the number of used memslots.

Once we support memory devices that consume multiple memslots
dynamically, the requested number of memslots will no longer correspond to
the number of memory devices, and there will be a difference between
required and actually used memslots.

Signed-off-by: David Hildenbrand <david@xxxxxxxxxx>
---
 hw/mem/memory-device.c | 2 ++
 include/hw/boards.h    | 2 ++
 2 files changed, 4 insertions(+)

diff --git a/hw/mem/memory-device.c b/hw/mem/memory-device.c
index 667d56bd29..28ad419dc0 100644
--- a/hw/mem/memory-device.c
+++ b/hw/mem/memory-device.c
@@ -275,6 +275,7 @@ void memory_device_plug(MemoryDeviceState *md, MachineState *ms)
     g_assert(ms->device_memory);
 
     ms->device_memory->used_region_size += memory_region_size(mr);
+    ms->device_memory->required_memslots++;
     memory_region_add_subregion(&ms->device_memory->mr,
                                 addr - ms->device_memory->base, mr);
     trace_memory_device_plug(DEVICE(md)->id ? DEVICE(md)->id : "", addr);
@@ -294,6 +295,7 @@ void memory_device_unplug(MemoryDeviceState *md, MachineState *ms)
 
     memory_region_del_subregion(&ms->device_memory->mr, mr);
     ms->device_memory->used_region_size -= memory_region_size(mr);
+    ms->device_memory->required_memslots--;
     trace_memory_device_unplug(DEVICE(md)->id ? DEVICE(md)->id : "",
                                mdc->get_addr(md));
 }
diff --git a/include/hw/boards.h b/include/hw/boards.h
index fcaf40b9da..a346b4ec4a 100644
--- a/include/hw/boards.h
+++ b/include/hw/boards.h
@@ -297,12 +297,14 @@ struct MachineClass {
  * @mr: address space container for memory devices
  * @dimm_size: the sum of plugged DIMMs' sizes
  * @used_region_size: the part of @mr already used by memory devices
+ * @required_memslots: the number of memslots required by memory devices
  */
 typedef struct DeviceMemoryState {
     hwaddr base;
     MemoryRegion mr;
     uint64_t dimm_size;
     uint64_t used_region_size;
+    unsigned int required_memslots;
 } DeviceMemoryState;
 
 /**
-- 
2.40.1




[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux